DriverManager
DriverManager(驱动管理类)作用:
1、注册驱动
2、获取数据库连接
Connnection
Connection(数据库连接对象)作用:
1、获取执行SQL的对象
普通执行SQL对象
Statement createStatement()
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
执行存储过程的对象
CallableStatement prepareCall(sql)
2、管理事务
MySQL事务管理
开启事务:BNEGIN;/START TRANSACTION 提交事务:COMMIT; 回滚事务:ROLLBACK; MySQL自动提交事务
JDBC事务管理:Connection接口中定义了3个对应的方法
开启事务:setAutoCommit(boolean autoCommit); true为自动提交事务,false为手动提交事务 提交事务:commit() 回滚事务:rollback()
Statement
Statement作用
执行sql语句
执行sql语句
int executeUpdate(sql):执行DML,DDL语句 返回值:(1)DML语句影响的行数 (2)DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql):执行DQL语句 返回值:ResultSet结果集对象
ResultSet
ResultSet(结果集对象)作用:
封装DQL查询语句的结果
ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
获取查询结果
boolean next():(1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行 返回值: true:有效行,当前行有数据 false:无效当,当前行没有数据
xxx getXxx(参数):获取数据 xxx:数据类型;如 int getInt(参数) String getString(参数) 参数: int:列的编号,从1开始 String:列的名称
使用步骤:
游标向下移动一行,并判断改行是否有数据:next()
获取数据:getXxx(参数)
//循环判断游标是否最后一行末尾 while(rs.next()) { //获取数据 rs.getXxx(参数); }
PreparedStatement
PreparedStatement作用:
预编译SQL语句并执行,预防SQL注入问题
1、获取PreparedStatement对象
String sql = "select * from user where username = ? and password = ?"; //通过Connection对象获取,并传入对应的sql语句 PreparedStatement pstmt = conn.prepareStatement(sql);
2、设置参数值
PreparedStatement对象:setXxx(参数1, 参数2);给?赋值 Xxx:数据类型;如setInt(参数1, 参数2) 参数: 参数1:?的位置编号,从1开始 参数2:?的值
3、执行sql
executeUpdate(); /executeQuery(); :不需要再传递sql
SQL注入
SQL注入是通过操作输入来修改实现定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法
PreparedStatement原理
PreparedStatement好处:
预编译sql,性能稳定
防止sql注入:将敏感字符进行转义
PreparedStatement预编译功能开启:useServerPrepStmt=true
配置MySql执行日志(重启MySql服务后生效)
log-output=FILE general-log=1 general_log_file="D:\mysql.log" slow-query-log-1 slow_query_log_file="D:\mysql_slow.log" long_query_time=2
PreparedStatement原理;
1、在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查,编译(这些步骤很耗时)
2、执行时就不用再进行这些步骤了,速度更快
3、如果sql模板一样,则只需要进行一次检查,编译