Java JDBC实现过程及各个对象详解

1. JDBC的实现过程
//(1)导入驱动包
//(2)注册驱动
Class.forName("com.mysql.jdbc.Driver");//加载MySQL数据库的驱动
//(3)获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称","数据库用户名","密码");
//(4)定义sql语句
String sql = "update 数据表 set 字段名 = '值' where 判断条件";
//(5)获取执行sql的对象Statement
Statement stmt = conn.createStatement();
//(6)执行sql
stmt.executeUpdate(sql);
//(7)处理结果
//(8)释放资源
stmt.Close();
conn.Close();
2. 各个对象功能详解

(1)DriverManager:驱动管理对象

功能:
(1)注册驱动
        源码:
            static void registerDriver(Driver driver);注册给定的驱动程序
        在连接mysql数据库时,代码是这样写的:
            Class.forName("com.mysql.jdbc.Driver");//加载MySQL数据库的驱动
        上述两者之间的关系:
            在com.mysql.jdbc.Driver类中存在静态代码块:

            package com.mysql.jdbc;  
                  
            import java.sql.SQLException;  
            public class Driver extends NonRegisteringDriver implements java.sql.Driver {  
      
                   //执行这个静态代码块  
                    static {  
                        try {//注册mysql实现的驱动类  
                            java.sql.DriverManager.registerDriver(new Driver());  
                        } catch (SQLException E) {  
                            throw new RuntimeException("Can't register driver!");  
                        }  
                    }  
  
                    public Driver() throws SQLException {  
                        // Required for Class.forName().newInstance()  
                    }  
            }  
            
(2)获取数据库连接
    方法:public static synchronized Connection getConnection(String url, String user, String password)
    参数:
        url:jdbc:mysql://ip地址:端口号/数据库名称
        user:用户名
        password:密码

参考:https://www.iteye.com/blog/liangjf85-163-com-2153408

(2)Connection:数据库连接对象

功能:
    (1)获取执行sql的对象
        Statement createStatement();
        PreparedStatement preparedStatement(String sql); 

    (2)管理事务
        开启事务:void setAutoCommit(boolean autoCommit);调用该方法,设置参数为false,为关闭自动提交事务,需要手动提交。
        提交事务:commit();
        回滚事务:rollback();

(3)Statement:执行sql的对象(静态sql)

功能:
    (1)执行sql:
        boolean excute(String sql);可以执行任意的sql,但是不常用。
        int executeUpdate(String sql);执行DML语句,即增、删、改语句,执行DDL语句,操作数据库和数据表。
            返回值:指的是影响的行数,可以通过这个返回值来判断语句是否执行成功,返回值大于0则表示执行成功,否则表示执行失败。
        ResultSet executeQuery(String sql);执行DQL语句,即查询语句。

(4)ResultSet:结果集对象

ResultSet对象中的方法
(1)boolean next();游标向下移动一行,判断当前行是否是最后一行,如果是则返回false,如果不是则返回true
(2)getXXX(参数);获取数据,这里的XXX表示数据类型
    参数:
        int:代表列的编号,从1开始  如:getString(1);
        String:代表列的名称  如:getString(name); 

(5)PreparedStatement:执行sql的对象(动态sql)

(1)SQL注入问题:在拼接sql时,有一些特使的关键字参与字符串拼接,可能会造成安全性问题。
    例如在登录时,输入秘密为:[a' or 'a' = 'a],在后台拼接结束后,生成的sql语句如下所示:
    select * from user where username = 'wdwfw' and password = 'a' or 'a' = 'a';
    该sql输出结果是用户表中的全部数据。
(2)需要解决上述sql注入的问题时,官方提供了PreparedStatement对象
    PreparedStatement对象为预编译对象,参数使用?作为占位符,如下:
    select * from user where username = ? and password = ?;
    使用connection.PreparedStatement(String sql);获取PreparedStatement对象
    给?进行赋值使用:setXXX(参数1,参数2);
    参数1表示?的位置,参数2表示值。

 

最新回复(0)
/jishu6N4jBBKHg_2BX6eICMnjAF_2Fsh9iyiF8QHyoBFlzg_3D_3D4795057
8 简首页