JDBC教程
使用流程
注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
获取连接
Connection connection=DriverManager.getConnection(url,username,password)
定义SQL语句
String sql="select xxx from table";
获取执行SQL对象
Statement statement = connection.createStatement();
执行SQL
statement.execute(sql);
获取返回后的结果
ResultSet resultSet = statement.getResultSet();
释放资源
statement.close(); connection.close();
常用API
DriverManger(驱动管理类)
registerDriver(Driver driver)
- 作用:用于注册驱动
- 参数:驱动对象
Class.forName("com.mysql.cj.jdbc.Driver") 注册驱动底层实现
static { try { java.sql.DriverManager.registerDriver(new Driver());//类被加载时调用注册方法 } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
getConnection(url,username,password)
- 作用:用于创建数据库连接
- 参数: url:数据库连接url username:用户名 password:密码
- 返回值:Connection对象
Connection(数据库连接对象)
作用:
1.获取执行SQL的对象
2.管理事务
获取普通执行SQL对象
connection.createStatement()
- 返回值:Statement
获取预编译SQL执行对象(防止SQL注入)
connection.prepareStatement(sql)
- 参数:SQL语句
- 返回值:PreparedStatement
获取执行存储过程对象
connection.prepareCall(sql)
- 参数:SQL语句
- 返回值:CallableStatement
事务管理API
开启事务
connection.setAutoCommit();
- 作用:设置是否开启自动提交:true为自动提交事务,false为手动提交事务,即开启事务
提交事务
connection.commit();
回滚事务
connection.rollback();
Statement(普通SQL执行对象)
作用:执行SQL语句
statement.executeQuery()
- 作用:执行DQL语句
- 返回值:ResultSet对象
statement.executeUpdate()
- 作用:执行DML、DDL语句
- 返回值:受影响行数
ResultSet(结果集对象)
作用:获取查询结果
resultSet.next()
- 作用:将游标向前移动一行(游标默认在第一行的前一行),判断当前行是否为有效行
- 返回值:true:当前行有数据 false:当前行没有数据
resultSet.getXX()
- 作用:获取数据
- XX:数据类型
- 参数:int:根据列索引获取数据(从1开始) String:根据列名获取数据
PreparedStatement
作用:预编译SQL并执行SQL语句,利用转义符对参数进行转义处理
setXxx(参数1,参数2)
- 作用:给占位符赋值
- 参数: 参数1:占位符的位置,从1开始 参数2:替换的值
操作流程
获取PreparedStatement对象:sql中的参数用?进行占位
connection.prepareStatement(sql)
- 设置参数值setXxx
- 执行SQL:executeUpdate() executeQuery() 不需要再传递sql
原理:
1.在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查、编译(步骤很耗时)
2.执行时就不用再进行这些步骤了,速度更快
3.如果sql模板一样,则只需要进行一次检查、编译
开启PreparedStatment预编译功能:在url参数中添加useServerPrepStmts=true