JDBC(Java Database Connectivity)是Java编程语言中的一种用于执行SQL语句的API(应用程序接口)。它使得Java应用程序能够访问和处理各种不同的关系数据库。
使用JDBC可以连接到多种数据库系统,例如MySQL、Oracle、PostgreSQL、SQL Server等,并且可以执行各种不同类型的SQL查询、更新和事务操作。
下面是使用JDBC访问数据库的一些基本步骤:
-
加载驱动程序。首先需要加载用于特定数据库的JDBC驱动程序。这通常是通过使用Class.forName()方法来实现的。
-
建立数据库连接。使用DriverManager.getConnection()方法可以建立与特定数据库的连接。
-
创建Statement对象。创建一个可用于发送SQL语句到数据库的Statement对象。
-
执行SQL查询。使用Statement对象可以执行各种类型的SQL语句,例如SELECT、INSERT、UPDATE和DELETE等。
-
处理结果集。使用ResultSet对象来处理SQL查询的结果集,并以适当的方式显示或使用这些结果。
-
释放资源。在使用完数据库之后,需要释放所有相关资源。这通常包括关闭连接、Statement和ResultSet对象。
在JDBC连接数据库中,执行SQL语句并接收结果集的方法主要有以下几种:
- execute()方法:可以执行所有类型的SQL语句(SELECT、INSERT、UPDATE、DELETE等),如果SQL语句返回结果集,需要使用getResultSet()方法获取结果集。
- executeQuery()方法:只能执行SELECT语句,并返回一个ResultSet对象,该对象包含了查询语句的结果集。
- executeUpdate()方法:用于执行INSERT、UPDATE或DELETE语句,返回值为更新记录数。
- executeBatch()方法:批量执行一批SQL语句,返回一个int数组,其中每个元素是对应SQL语句影响的行数。
- execute():执行SQL语句,返回一个boolean类型值,表示执行该语句是否返回了一个结果集。
- executeQuery():执行查询操作,返回一个ResultSet类型的结果集,其中ResultSet接口用于访问表格型的数据。
- executeUpdate():执行插入/更新/删除操作,返回一个int类型的值,表示操作影响到的行数。
一、连接常见数据库的JDBC驱动代码:二、建立数据库连接
MySQL:
// 1. 加载驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 获取数据库连接对象
String jdbcUrl = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
String username = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
Oracle:
// 1. 加载驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2. 获取数据库连接对象
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:orcl";
String username = "system";
String password = "123456";
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
Microsoft SQL Server:
// 1. 加载驱动程序
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2. 获取数据库连接对象
String jdbcUrl = "jdbc:sqlserver://localhost:1433;databaseName=test";
String username = "sa";
String password = "123456";
Connection connection = DriverManager.getConnection(jdbcUrl, username, password);
三、创建Statement对象
Statement statement=connection.createStatement();
在实际开发中,为避免SQL注入等安全问题,建议使用PreparedStatement对象而非Statement对象来执行SQL语句。PreparedStatement对象使用起来与Statement对象类似,但可通过参数化查询方式对SQL语句进行预编译和防注入处理。
// 创建PreparedStatement对象
String sql = "SELECT * FROM users WHERE name = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "张三"); // 设置参数值,并防止SQL注入攻击
// 执行查询
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
// 处理结果集
}
- setString() 方法是 PreparedStatement 类的一个成员方法。
- 该方法用于为 SQL语句中的字符串参数设置字符串值,可以防止 SQL 注入攻击。
- setString() 方法有两个参数,第一个参数表示 SQL语句中的参数位置,从 1 开始计数;第二个参数表示字符串参数的值。
- 当 SQL 语句中的某个参数位置与 Java 代码中的参数位置不一致时,就会抛出 SQLException 异常。
- 另外,如果在使用 setString() 方法时,传入的字符串包含特殊字符,比如单引号、双引号、反斜杠等,需要进行转义处理,否则会导致 SQL 语句语法错误或 SQL 注入攻击。
next()方法
在 while 循环中,每次调用 resultSet.next() 方法会将当前指针向下移动一行,
如果当前行有数据,就返回true,
否则返回 false。因此我们可以在循环体内,通过调用 getInt() 或 getString()等方法,从结果集中读取每行的数据。需要注意的是,ResultSet 对象是一个指向当前数据行的游标,而非数据本身。在使用 ResultSet
对象之前,必须首先将查询结果集检索到本地,并将游标移动到第一行。同时,如果不再需要ResultSet 对象,应该手动关闭它以释放资源,以避免内存泄漏等问题。