JDBC(Java Database Connectivity) 使用步骤
- 下载 JDBC 相应数据库的 jar 包加入项目下的 lib 文件夹中
此处使用 mysql,对应 mysql 的 jar 包下载地址:
mysql-connector-java-8.0.13.jar - 创建一个专门用作操作数据库操作的类
DBUtils
,下面示例在DBUtils
中写一个查找本地的数据库student
中一个叫student
的表中的所有记录 - 基本步骤
a. 注册数据库驱动
b. 获取连接Connection
对象
c. 创建Statement
对象
d.statement
对象执行 SQL 语句得到ResultSet
e. 遍历得到的ResultSet
得到结果 - 完整代码及注释
import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.*; import java.util.Properties; public class DBUtils { @Test public void findAll() throws IOException, ClassNotFoundException { Connection connection = null; Statement statement = null; ResultSet rs = null; // 通过 Properties 对象或许建立 Connection 对象需要的参数的值 Properties properties = new Properties(); properties.load(new FileInputStream(new File("jdbc.properties"))); // 注册驱动,似乎现在是可以省略的,获取 Connection 对象时会自动注册 Class.forName(properties.getProperty("driver")); try { // 获取数据库 url,此处为 "jdbc:mysql://localhost/student", 最后一个 student 是在本地数据库上的一个数据库名 String url = properties.getProperty("url"); String user = properties.getProperty("user"); String password = properties.getProperty("password"); connection = DriverManager.getConnection(url, user, password); statement = connection.createStatement(); // 需要执行的 SQL 语句,此处是查询操作,根据需要编写不同语句 String query = "SELECT * FROM student"; // 查询语句对应的方法是 executeQuery 方法,另如 update 操作对应的则是 executeUpdate 方法 // 不同的方法返回的 rs 对象也不同,基本通过打一下 . 这个符号就知道该怎么操作了 rs = statement.executeQuery(query); // 此处只是对查询到的记录做了简单的打印处理 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("stu_name"); int age = rs.getInt("age"); System.out.println("Id: " + id + ", Name: " + name + ", Age: " + age + "."); } } catch (SQLException e) { e.printStackTrace(); } finally { // finally 中关闭资源 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
DAO(Data Access Object) 模式简单介绍
DAO 即一个用于数据库操作的对象
实现步骤:
- 新建一个 dao 接口,声明数据库访问规则(一系列与数据库操作直接相关的,对数据库进行更新、查询、删除、修改等操作的方法)
- 新建一个 dao 实现类,具体实现 dao 接口中定义的方法
- 新建一个 dao 实现类对象,直接使用其中的方法与数据库交互
Statement 的安全问题,PreparedStatement
Statement
执行是先拼接 sql 语句后执行的,以前易存在“注入攻击”的问题,因此现在用 PreparedStatement
,PreparedStatement
会在执行前做语法规则校验。
PreparedStatement
使用介绍:
Statement
对象是在写好 sql 语句的字符串后执行;
而 PreparedStatement
不将 sql 语句的参数直接拼接成 sql 语句的字符串,而是创建了 PreparedStatement
对象后通过 set…() 等方法传入 (…处为参数对应数据类型)
代码实例:
String sql = "SELECT * FROM user WHERE username=? AND password=?";
// 如果用 Statement,上述对应的 sql 语句中的问号则会直接换成实际的值
PreparedStatement ps = connection.preparedStatement(sql);
// 没错,下标从 1 开始,1 表示在第 1 个 ? 的位置插入 username 的值
ps.setString(1, username);
ps.setString(2, password);
// 若是添加、更新、删除操作则使用 executeUpdate() 方法
ps.executeQuery();