1. Java的数据库变成编程:JDBC
JDBC
,即
Java Database Connectivity
,
java
数据库连接。是一种用于执行
SQL
语句的
Java API
,它是 Java中的数据库连接规范。这个
API
由
java.sql.*,javax.sql.*
包中的一些类和接口组成,它为
Java 开发人员操作数据库提供了一个标准的API
,可以为多种关系数据库提供统一访问.
2. JDBC优势
· Java
语言访问数据库操作完全面向抽象接口编程
· 开发数据库应用不用限定在特定数据库厂商的
API
· 程序的可移植性大大增强
3. JDBC使用
1)准备数据库驱动包,并添加到项目的依赖中
在项目中创建文件夹
lib(与 src 同级)
,并将依赖包
mysql-connector-java-5.1.47.jar
复制到
lib
中。再配置该
jar 包到本项目的依赖中:右键点击项目Open Module Settings
,在
Modules
中,点击项目,配置 Dependencies,点击
+
,
JARS or Directories
,将该
lib
文件夹配置进依赖中,表示该文件夹下的 jar包都引入作为依赖。
2)创建数据库连接Connection
Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
· 一种是通过DriverManager (驱动管理类) 的静态方法获取:
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
· 一种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象
DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("密码");
Connection connection = ds.getConnection();
MySQL数据连接的URL参数格式如下:
jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
· 以上两种方式的区别是:
1. DriverManager
类来获取的
Connection
连接,是无法重复利用的,每次使用完以后释放资源 时,通过connection.close()都是关闭物理连接。
2. DataSource
提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接
是可以复用的,每次使用完数据库连接,释放资源调用
connection.close()
都是将 Conncetion连接对象回收。
3)创建操作命令Statement
Statement statement = connection.createStatement();
4) 使用操作命令来执行SQL
// 构造要执行的 SQL 语句
String sql = "insert into student values(1, '张三')";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 查询操作 (返回临时表数据)
preparedStatement.executeQuery();
// 新增, 修改, 删除操作 (返回值表示这次 SQL 操作影响到的行数)
preparedStatement.executeUpdate();
也可以通过用户输入来进行操作
// 用户输入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要插入的学号:");
int id = scanner.nextInt();
System.out.println("请输入要插入的姓名:");
String name = scanner.next();
// 构造请求
// 使用 ? 作为占位符
String sql = "insert into student values(?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
statement.setInt(1, id);
statement.setString(2, name);
System.out.println("statement: " + statement);
处理查询结果集
// 执行查询 SQL
String sql = "select * from student";
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet resultSet = statement.executeQuery();
//遍历结果集合
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id = " + id + ", name = " + name);
}
5) 释放相关资源
resultSet.close();
statement.close();
connection.close();