目录
3.1 创建项目并添加MySQL驱动(DataSource实现操作数据库)
1. 什么是JDBC
Java 数据库连接。是种于执 SQL 语句的 Java API,它是 Java 中的数据库连接规范。 使了 JDBC 之后,不管是什么数据库与什么数据库驱动,我们只需要使套标准代码就 可以实现对不同数据库进统操作(添加、修改、删除、查询),它的目的就在于解决不同数据库厂商的数据库存在不一样时,会产生的问题。
2. JDBC 作原理
JDBC 为多种关系数据库提供了统访问式,作为特定商数据库访问 API 的种级抽象,
它主要包含些通的接类。
JDBC 访问数据库层次结构:
JDBC的优点:1. Java语言访问数据库操作完全面向抽象接口编程。
2. 开发数据库应用不用限定在特定数据库厂商的API。
3. 程序的可移植性大大增强。
3. JDBC 使
3.1 创建项目并添加MySQL驱动(DataSource实现操作数据库)
创建Java项目,添加MySQL驱动(注意:不同数据库版本对应不同驱动包)
3.2 使用代码操作数据库
操作数据库MySQL提供两种操作API:
1. DirverManager
2. DataSource(推荐使用)
下面是使用DataSource来实现操作数据库:
1. 获取数据源 (输入MySQL数据库连接的服务器地址、用户名、密码)
2. 获取连接 (建立客户端与服务端的连接)
3. 获取执行器 (连接服务器并切换到数据库)
4. 查询或操作数据库 (输入命令,并得到结果)
5. 关闭连接 (关闭客户端)
3.2.1 获取数据源
// 1. 创建数据源
MysqlDataSource dataSource = new MysqlDataSource();
// 1.1 设置连接的 MySQL 数据库服务器
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33characterEncoding=utf8&useSSL=true");
// 1.2 设置?户名
dataSource.setUser("root");
// 1.3 设置密码
dataSource.setPassword("********");
3.2.2 获得连接
连接对象是 Connection,注意此步骤操作容易出错,定是 com.mysql.jdbc 包下的 Connection 对象。
// 2.创建连接
Connection connection = (Connection) dataSource.getConnection();
3.2.3 获得执行器
执器是来执 SQL 命令的,执器有三种:
1. Statement (用于执行不带参数的简单语句)
2. PreparedStatement (用于执行带或者不带参数的语句,SQL语句会在数据库系统预编译,执行速度快于Statement)(常用)
3. CallableStatement (用于执行数据库存储过程的调用)
PreparedStatement 优点:
性能比 Statement高,SQL预编译,阻止常见SQL注入攻击,占位符“ ?”下标从1开始,占位符不能用多值,参数化SQL查询。
// 3.获得执?器
String selectSQL = "select * from student where user name = ?";
PreparedStatement statement = connection.prepareStatement(selectSQL);
// 3.1 占位符赋值
statement.setString(1, "王五");
PreparedStatement 有 主要两种重要的法:
1. executeQuery(); 法执后返回单个结果集的,通常于 select 语句。
2.executeUpdate():法返回值是个整数,指示受影响的数,通常于 update、insert、delete 语句。
3.2.4 查询或操作数据库
// 4.获得结果集
ResultSet resultSet = statement.executeQuery();
// 4.1 获得结果并打印
while (resultSet.next()) {
? ?String sn = resultSet.getString("sn");
? ?String username = resultSet.getString("username");
? ?String mail = resultSet.getString("mail");
? ?System.out.println(String.format("SN:%s,UserName:%s,Mail:%s", sn,username, mail));
}
ResultSet 的数据排列,每有多个字段,并且有个记录指针,指针所指的数据
叫做当前数据,我们只能来操作当前的数据。我们如果想要取得某条记录,就要使
ResultSet 的 next() 法 ,如果我们想要得到 ResultSet 的所有记录,就应该使 while 循环。
3.2.5 关闭数据库连接
?// 5. 关闭资源
? ? ? ?resultSet.close();
statement.close();
? ? ? ?connection.close();