JDBC API:
- DriverManager
- Connection
- Statement
- ResultSet
- PreparedStatement
DriverManager:驱动管理类
作用:
- 注册驱动
- 获取驱动连接
1、注册驱动:
Class.forName("com.mysql.jdbc.Driver");
2、获取驱动连接
static Connection getConnection(String url, String user, String password);
参数:
- url:连接路径
语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...(参数键值对:useSSL=false)
实例:
jdbc:mysql://127.0.0.1:3306/db1
细节:
- 如果连接的是本机的mysql服务器,并且mysql服务器默认端口号是3306,
- 则url可以简写为:jdbc:mysql:///数据库名称?参数键值对1&参数键值对2…
Connection:数据库连接对象
作用:
- 获取执行SQL的对象
- 管理事务
1、获取执行SQL的对象
普通执行SQL对象
Statement createStatement()
预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
执行存储过程的对象
CallableStatement prepareCall(sql)
2、管理事务
MySQL事务管理:
- 开启事务:BEGIN;/START TRANSACTION;
- 提交事务:COMMIT;
- 回滚事务:ROLLBACK;
MySQL默认自动提交事务。
JDBC事务管理:Connection接口中定义了3个对应的方法
-
开启事务:setAutoCommit(boolean c)
- autoCommit:true为自动提交事务;false为手动提交事务,即为开启事务。
-
提交事务:commit()
-
回滚事务:rollback()
Statement:
作用:
执行SQL语句
执行SQL语句
-
int executeUpdate(sql):执行DML、DDL语句
- 返回值:(1)DML语句影响行数(2)DDL语句执行后,执行成功也可能返回0
-
ResultSet executeQuery(sql):执行DQL语句
- 返回值: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:
作用:
预编译SQL语句并执行:预防SQL注入问题
SQL注入:
SQL注入是通过操作输入来修改事先定义好的SQL语句,
用以达到执行代码对服务器进行攻击的方法。
书写步骤:
1、获取PreparedStatement对象
//SQL语句中的参数,使用?占位符替代
String sql = "select * from user where usename = ? and password = ?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.preparedStatement(sql);
2、设置参数值
PreparedStatement对象:
setXxx(参数1,参数2):给?赋值
Xxx:数据类型;如setInt(参数1,参数2)
参数1:?的位置编号,从1开始
参数2:?的值
3、执行SQL
//不需要再传递sql
executeUpdate();
executeQuery();