1.JDBC的快速入门
步骤
1.创建工程,导入驱动jar包
2.注册驱动
Class.forname("com.mysql.jdbc.Driver");
3.获取链接
Connection conn = DriverManager.getConnection(url,username,password);
4.定义sql语句
String sql="update...";
5.获取执行sql对象
Statement stmt=conn.createStatement();
6.执行sql
stmt.executeUpdate(sql);
7.处理返回结果
8.释放资源
stmt.close();
conn.close();
2.JDBC API详解
2.1DriverManager
2.1.1注册驱动
Class.forname("com.mysql.jdbc.Driver");
·Driver类源码会调用DriverManager.registerDriver()方法注册驱动
注意
MySQL 5之后的驱动包可以省略注册驱动的步骤
2.1.2获取连接
DriverManager.getConnection(url,username,password);
url:链接路径
语法:jdbc:mysql//ip地址:端口号/数据库名称?参数键值对1&参数键值对2...
细节:
如果链接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以省略ip地址:端口号
配置useSSL=false 参数,禁用安全连接方式,解决警告提示
2.2Connection
2.2.1获取执行SQL的对象
·普通执行SQL的对象
Statement createStatement()
·预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
·执行储存过程的对象
CallableStatement prepareCall(sql)
2.2.2JDBC事务管理
开启事务:setAutoCommit(boolean autoCommit); true为自动提交事务;false为手动提交事务(开启事务)
提交事务:commit();
回滚事务:rollback();
2.3Statement
2.3.1执行SQL语句
int executeUpdate(sql) :执行DML、DDL语句
返回值:DML语句影响的行数;DDL语句执行成功后也可能返回0
ResultSet executeQuery(sql) :执行DQL语句
返回值:为结果集对象;
2.4ResultSet
2.4.1ResultSet作用
封装了DQL查询的结果
ResultSet stmt.executeQuery(sql)
获取查询结果
boolean next():(1)将光标从当前位置向后移动一行 (2)判断当前是否为有效行
类似迭代器的写法进行操作
xxx getXxx(参数):获取数据
参数:·int:列的编号,从1开始
·String:列的名称
2.5PreparedStatement
2.5.1作用
预编译SQL语句并执行:预防SQL注入的问题
SQL注入:通过操作输入来修改事先定义的SQL语句,用以达到执行代码对服务器攻击的方式
2.5.2使用方法
(1)获取PreparedStatement对象
String sql="select * from user where usename=? and password =?";
//用?代替sql中的参数值
PreparedStatement pstmt = conn.preparedStatement(sql);
//通过Connection对象获取,并且传入对应的sql语句
(2)设置参数值
pstmt.setXxx(参数1,参数2);
参数1:?的位置编号,从1开始
参数2:?的值
(3)执行SQL
executeUpdate(); 或 executeQuery();
不需要再传入sql
2.5.3原理
好处:(1)预编译SQL,性能更高
(2)防止SQL注入:将敏感字符进行转义
注意:预编译功能默认关闭,使用键值对开启 useServerPrepStmts=true
原理:(1)在获取PreparedStatement对象时,提前将sql语句发送给mysql服务器进行检查编译
(2)如果sql模板一样,则只需要一次检查编译