JDBC使用步骤及其主要对象

144 阅读3分钟

1. JDBC

  1. 概念
    • Java DataBase Connectivity
    • 由Sun公司定义的一套可以操作所有关系型数据库的接口,各个数据库厂商实现这套接口,然后提供数据库驱动jar包。程序员使用这套接口操作数据库时,真正执行的代码是数据库驱动jar包中的实现类。
  2. 使用步骤
    1. 导入数据库驱动jar包
    2. 注册驱动
    3. 获取数据库连接对象
    4. 定义SQL语句
    5. 获取执行SQL语句的对象
    6. 执行SQL,接收返回结果
    7. 处理结果
    8. 释放资源
  3. 主要对象
    1. DriveManagement:驱动管理对象
      • 注册驱动:告诉程序使用哪一个数据库驱动jar包
        • Class.forName("com.mysql.jdbc.Driver");
          • 实际上在com.mysql.jdbc.Driver类中存在静态代码块调用了DriveManagement类的registerDriver()方法
            static {
                try {
                    DriverManager.registerDriver(new Driver());
                } catch (SQLException var1) {
                    throw new RuntimeException("Can't register driver!");
                }
            }
            
        • 获取数据库连接:public static Connection getConnection(String url, String user, String password)
          • 参数
            • url:连接的路径
              • 格式:jdbc:mysql://ip地址(域名):端口号/数据库名称
              • 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
            • user:用户名
            • password:密码
    2. Connection:数据库连接对象
      • 获取执行SQL语句的对象
        • 获取Statement:Statement createStatement()
        • 获取PreparedStatement:PreparedStatement prepareStatement(String sql)
      • 管理事务
        • 开启事务(在执行sql之前开启事务):void setAutoCommit(boolean var1) 调用该方法,传入参数false开启事务
        • 提交事务(当所有sql都执行完提交事务):void commit()
        • 回滚事务(在catch中回滚事务):void rollback()
    3. Statement:执行静态SQL语句的对象
      • boolean execute(String sql):可以执行任意的sql语句
      • int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
        • 返回值为影响的行数,可以通过返回值判断SQL语句是否执行成功,若返回值>0,执行成功;否则,执行失败。
      • ResultSet executeQuery(String sql):执行DQL(select)语句
    4. ResultSet:结果集对象,用来封装查询结果
      • boolean next(): 执行此方法后游标向下移动一行(游标默认位置在表头),然后判断当前行是否是否有数据,如果有数据,返回true;如果没有数据,返回false
      • Xxx getXxx(参数):获取数据
        • Xxx:数据类型
        • 参数
          • int:列的编号,从1开始
          • String:列的名称
    5. PreparedStatement:执行预编译SQL语句的对象
      1. SQL注入问题:在拼接SQL时,使用一些SQL的特殊关键字参与字符串的拼接
        • 登录时随便输入用户名,输入密码:a' or 'a' = 'a
        • 使用Statement执行SQL语句时,select * from user where username = 'najhuf' and password = 'a' or 'a' = 'a'
        • 这样就会成功登陆,造成了安全性问题
      2. 使用PreparedStatement对象执行SQL语句可以解决SQL注入问题
      3. 使用步骤
        1. 定义SQL语句时参数使用?作为占位符。例如:String sql = "select * from user where username = ? and password = ?"
        2. 获取执行预编译SQL语句的对象:connection.preparedStatement(sql)
        3. 为?赋值
          • preparedStatement.setXxx(参数1, 参数2)
            • 参数1:?的位置编号,从1开始
            • 参数2:?的值
        4. 执行SQL语句
          • preparedStatement.executeUpdate()
          • preparedStatement.executeQuery()