JDBC
- JDBC(java database connectivity): sun公司为了简化和统一java连接数据库,定义的一套**规范(**类,接口)
实现用java代码操作Mysql
import com.mysql.jdbc.Driver;
import java.sql.*;
public class Idejdbc {
public static void main(String[] args) throws Exception {
/**
* -- 先准备好驱动包到模块下,并添加依赖
* 1.注册驱动
* 2.获得连接
* 3.创建执行sql语句对象
* 4.释放资源
*/
// 注册驱动 or Class.forName("import com.mysql.jdbc.Driver");
DriverManager.registerDriver(new Driver()); // 驱动版本5及以上可以不写注册驱动,自动加载
// 获得连接
String url = "jdbc:mysql://localhost:3307/day18?useSSL = false"; // 连接地址
String user = "root"; // 用户名
String password = "123456";// mm
Connection connection = DriverManager.getConnection(url, user, password);
// 创建声明sql语句对象
Statement statement = connection.createStatement();
// 编写sql语句
String sql = "select * from user";
//执行sql语句,得到结果
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){ // 每遍历一次就指向下一个索引
System.out.println(resultSet.getObject("id"));// 也可以写索引
System.out.println(resultSet.getObject("username"));
System.out.println(resultSet.getObject("password"));
System.out.println(resultSet.getObject("nickname"));
}
// 释放资源
resultSet.close();
statement.close();
connection.close();
}
}
JDBC Api 详解
- DriverManager(驱动管理类)
- 注册驱动
- 获取数据库连接
注册驱动 (加载类)
Class.forName("com.mysql.jdbc.Driver") // // 驱动版本5及以上可以不写注册驱动,自动加载
jdbc:遵循的协议,mysql:子协议,localhost:3307:数据库所在的服务器地址,如果是在本地默认为127.0.0.1:3306,可以省略不写, ?useSSL = false:表示禁用SSL安全检查,可提升执行效率
jdbc:mysql://localhost:3307/day18?useSSL = false
- Connection(数据库连接对象)
- 获取执行SQL的对象
- 管理事务
// 普通执行SQL对象
Statement createStatement()
// 预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
// MySQL事务管理
开启事务:BEGIN; / START TRANSACTION
提交事务:COMMIT;
回滚事务:ROLLBACK;
// MySql默认自动提交事务
// JDBC事务管理:Connection 接口中定义了3个对应的方法
开启事务:setAutoCommit(boolean autoCommit) true为自动提交事务;false为手动提交事务
提交事务:commit()
回滚事务:rollabck()
- Statement(执行语句)
- 执行SQL语句
// 返回值 :1.DML语句返回受影响的行数 2.DDL语句执行后,执行成功也可能返回0
int executeUpdate(sql):执行DML、DLL语句
// 返回值 :ResultSet 结果对象
ResultSet executeQuery(sql):执行DQL语句
- ResultSet(结果集对象)
- 封装了DQL查询语句的结果
// 执行DQL语句,返回ResultSet对象
ResultSet statement.executeQuery(sql)
// 获取查询结果 返回值 :true有效行,当前行有数据 false无效行,当前行没有数据
boolean next() : 1.将光标从当前位置向下移动一行 2.判断当前行是否为有效行
// Xxx:数据类型 如int getInt(参数); String getString(参数);
getXxx(参数):获取数据 // int :列的编号,从1开始 String : 列的名称
- PreparedStatement
- 预编译SQL并执行SQL语句
// SQL语句中的参数值 ,使用? 占位符替代
String sql = "select * from user where username = ? and password = ?";
// 通过Connection对象获取,并传入对应的Sql语句
PreparedStatement ps = connection.prepareStatement(sql);
// 参数设置
PreparedStatement对象:setXxx(参数1,参数2):用来给?赋值
// 参数:参数1,?的位置编号,从1开始
// 执行SQL
executeUpdate(); / executeQuery(); // 不需要再传递SQL语句