DriverManager
DriverManager(驱动管理类)作用:
url:连接路径
语法:jdbc.mysql://IP地址(域名):端口号/数据库名称?参数键值对1&参数键值对2……
Eg;
Jdbc.mysql://127.0.0.1:3306/db1
如果连接的是本机的mysql,切端口号为为默认的。则可以改写成:jdbc.mysql///数据库名称?参数键值对……
Connection
Connection(数据库连接对象)作用:
获取SQL对象
普通获取对象
Statement creatStatement()
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
执行存储过程的对象
CallableStatement prepareCall(sql)
事务管理:
Mysql事务管理:
开启事务:begin/start transaction
提交事务:commit
回滚事务:rollback
Mysql默认自动提交事务
Jdbc事务管理:connection接口定义了三个对应的方法
开启事务:setAutoCommit(boolean autoCommit);true为自动提交,false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:rollback( )
Statement
Statement作用:
执行SQL语句
int executeUpdate(sql):执行DML,DDL语句
返回值:1.DML影响的行数 2.DDL语句执行后,执行成功也可能返回0
ResultSet
ResultSet executeQuery(sql):执行DQL语句
返回值:ResultSet结果集对象
获取查询结果
bollean next():(1)将光标从当前位置向前移动一行 (2)判断当前行是否为有效行
返回值:true:有效行,当前行有数据
false:无效行,当前行没有数据
xxx getXxx(参数):获取数据
xxx:数据类型,入int,String
参数int:列编号,从1开始
String:列的名称
PreparedStatement
作用:预编译sql,预防SQL注入问题
SQL注入:是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击大方法。
获取PreparedStatement对象
//SQL语句中的参数值,使用?占位符来替代
String sql=“select * from 表名 where 条件1=?and 条件2=?……”;
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt=conn.preparedStatement(sql);
设置参数值
PreparedStatement对象:setXxx(参数值1,参数值2):给?赋值
Xxx:数据类型;
如setInt(参数1,参数2),setString(参数1,参数2)
参数:
参数1:?的位置编号
参数2:?的值
执行SQL
executeUpdate();/executeQuery()0; //不需要在传递sql
PreparedStatement原理:
防止SQL注入:将敏感字符进行转义
如 ‘ 会变成 /’ 这样编译后的 ‘ 依旧是我们所认为的 ’ 。
其中检查SQL语法和编译SQl所花费的时间一般都大于执行SQL的时间。
PreparedStatement还有还会预编译SQL,从而提高性能
如:在执行SQL语句 select * from user where name=?;
setString(1,“come的喂”);
setString(1,“ABC”);
在执行setString(1,“come的喂”);这个的时候会进行sql预编译,但是预编译后再执行setString(1,“ABC”);这个语句的时候就不会再进行检查sql语法和编译sql语句,可以直接进行执行,从而节省时间,提高性能。
但是PreparedStatement预编译功能默认为关闭状态
开启预编译功能:把useServerPrepStmts=true加到url后参数键值对上。