zoukankan      html  css  js  c++  java
  • JAVA学习笔记(十三)

    JDBC

    1.概述

      JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范

      JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

      JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

    2.原理

      JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。

    3.JDBC开发步骤

      1.注册驱动.

        告知JVM使用的是哪一个数据库的驱动

      2.获得连接.

        使用JDBC中的类,完成对MySQL数据库的连接

      3.获得语句执行平台

        通过连接对象获取对SQL语句的执行者对象

      4.执行sql语句

        使用执行者对象,向数据库执行SQL语句

        获取到数据库的执行后的结果

      5.处理结果

      6.释放资源.

        调用一堆close()方法

      3.1导入驱动jar包

      创建lib目录,用于存放当前项目需要的所有jar包,选择jar包,右键执行build path / Add to Build Path

      3.2JDBC开发步骤代码

    package com.oracle.demo1;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    public class demo01 {
    
        public static void main(String[] args) throws SQLException, ClassNotFoundException {
            // 1.注册驱动(反射的概念)
            //DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获得连接
            //url格式url="jdbc:mysql://主机:端口号/数据库名";
            String url="jdbc:mysql://localhost:3306/demo_jdbc";
            String username="root";
            String password="123456";
            Connection conn=DriverManager.getConnection(url, username, password);
            //3.获得语句执行平台
            Statement sta=conn.createStatement();
            //4.执行SQL语句
            //String sql="INSERT INTO sort(sname,sprice,syear) VALUES ('中央空调',2000,10)";
            String sql="update sort set sprice=33 where sid=2";
            int row=sta.executeUpdate(sql);
            //5.处理结果集
            System.out.println(row);
            //6.释放资源(先开的后关)
            sta.close();
            conn.close();
        }
    }

      3.3SQL注入问题

      假设有登录SQL语句如下

    SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码;

      此时,用户输入正确的用户名和密码,查询到了信息用户可以登录。但是当输入的帐号为XXX

    密码为'XXX' OR 'a'='a'时,真正执行的代码变成了

    SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’  OR ’a’=’a’;

      此时,用户不需要输入正确的用户名和密码也能登录成功。这便是SQL的注入问题。

      为了解决这一问题,我们使用PreparedStatement来反注入。

      3.4JDBC工具类

      以后涉及数据库的增删改查操作,都会用到获得数据库连接操作。为了实现代码的重复利用,我们可以封装工具类JDBCUtil,用来提供获取连接对象的方法。代码如下

    package com.oracle.demo2;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Scanner;
    
    public class Dbutil {
        private Dbutil() {}
        static Connection conn;
        static {
            try{
                Class.forName("com.mysql.jdbc.Driver");
                String url="jdbc:mysql://localhost:3306/demo_jdbc";
                Scanner sc=new Scanner(System.in);
                String username="root";
                String password="123456";
                conn=DriverManager.getConnection(url,username,password);
                }catch(Exception ex){
                    throw new RuntimeException(ex+"数据库连接失败");
                }
        }
        public static Connection getConn() {
            return conn;
        }
        public static void close(ResultSet rs,Statement sta,Connection conn){
            if(rs!=null) {
                try {
                    rs.close();
                }catch(SQLException ex) {}
            }
            if(sta!=null) {
                try {
                    sta.close();
                }catch(SQLException ex) {}
            }if(conn!=null) {
                try {
                    conn.close();
                }catch(SQLException ex) {}
            }
        }
        public static void close(Statement sta,Connection conn){
            if(sta!=null) {
                try {
                    sta.close();
                }catch(SQLException ex) {}
            }if(conn!=null) {
                try {
                    conn.close();
                }catch(SQLException ex) {}
            }
        }
    }
  • 相关阅读:
    MacOS如何正确配置Idea自带Maven插件的环境变量?(亲测)
    通过Canvas实现画板
    插入排序
    选择排序
    冒泡排序法
    进制
    JDBC(宠物管理系统)
    银行ATM存取款机系统MySQL数据库
    高级查询(二)
    高级查询
  • 原文地址:https://www.cnblogs.com/boringLee/p/8856963.html
Copyright © 2011-2022 走看看