JDBC是Java数据库连接的简称,是Java语言中访问数据库的标准规范。通过JDBC可以连接不同种类的数据库,与数据库进行交互操作。
本文将讲解JDBC的基本操作,重点介绍Statement和PreparedStatement的使用区别。
JDBC基本操作
JDBC的使用过程大致如下:
- 加载数据库驱动
- 建立与数据库的连接
- 创建Statement对象
- 执行SQL语句
- 处理返回结果
- 释放资源
具体使用步骤可以见如下的示例代码:
import java.sql.*;
public class JDBCTest {
public static void main(String[] args) {
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 建立与数据库的连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
// 创建Statement对象
Statement statement = connection.createStatement();
// 执行SQL语句
String sql = "SELECT * FROM user";
ResultSet resultSet = statement.executeQuery(sql);
// 处理返回结果
while (resultSet.next()) {
System.out.println(resultSet.getInt(1) + " " + resultSet.getString(2));
}
// 释放资源
resultSet.close();
statement.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
以上代码中,我们通过Class.forName()加载MySQL数据库驱动,使用DriverManager.getConnection()方法建立与数据库的连接,然后创建Statement对象执行SQL语句,并通过ResultSet获取返回结果。
需要注意的是,JDBC的资源必须手动释放,否则可能会导致资源泄露。
Statement和PreparedStatement
Statement是JDBC中的一个重要的接口,用于执行静态SQL语句。它是所有Statement的超类。PreparedStatement是Statement的子接口,用于执行动态SQL语句。
Statement和PreparedStatement的使用区别如下:
-
Statement在执行SQL语句之前需要把SQL语句字符串和参数一起发送到数据库服务器。因此,如果要执行多次不同的SQL语句,会产生大量的网络传输数据,降低执行效率;而PreparedStatement只需要将SQL语句发送到数据库服务器一次,在后续的执行过程中只发送参数,减少网络通讯的开销。
-
PreparedStatement对于必须重复执行的SQL语句,其执行效率要比Statement高,因为PreparedStatement在数据库中缓存了编译好的SQL语句,因此在重复执行该SQL语句时,只需要解析和优化SQL语句一次就可以。而Statement需要每次都重新解析和优化SQL语句。
示例代码如下:
import java.sql.*;
public class PreparedStatementTest {
public static void main(String[] args) {
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 建立与数据库的连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
// 创建PreparedStatement对象
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM user WHERE id = ?");
// 设置参数
preparedStatement.setInt(1, 1);
// 执行SQL语句
ResultSet resultSet = preparedStatement.executeQuery();
// 处理返回结果
while (resultSet.next()) {
System.out.println(resultSet.getInt(1) + " " + resultSet.getString(2));
}
// 释放资源
resultSet.close();
preparedStatement.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
以上代码中,我们使用PreparedStatement的setXXX()方法设置参数,并通过executeQuery()方法执行SQL语句获取返回结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JDBC的基本操作与Statement和PreparedStateMent使用区别分析 - Python技术站