java如何执行sql语句
执行SQL语句的方法
在Java中执行SQL语句通常需要通过JDBC(Java Database Connectivity)API实现。以下是具体实现步骤:
加载数据库驱动
使用Class.forName()方法加载特定数据库的JDBC驱动。不同数据库的驱动类名不同:
Class.forName("com.mysql.jdbc.Driver"); // MySQL
// 或
Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle
建立数据库连接
通过DriverManager.getConnection()方法建立与数据库的连接,需要提供数据库URL、用户名和密码:
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
Connection connection = DriverManager.getConnection(url, username, password);
创建Statement对象
使用Connection对象创建Statement或PreparedStatement对象:
Statement statement = connection.createStatement(); // 简单Statement
// 或
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM users WHERE id = ?"); // 参数化查询
执行SQL语句
根据SQL语句类型选择不同的执行方法:
-
查询语句(SELECT):使用
executeQuery()方法,返回ResultSet对象:
ResultSet resultSet = statement.executeQuery("SELECT * FROM users"); while (resultSet.next()) { String name = resultSet.getString("name"); int age = resultSet.getInt("age"); } -
更新语句(INSERT/UPDATE/DELETE):使用
executeUpdate()方法,返回受影响的行数:int rowsAffected = statement.executeUpdate("UPDATE users SET age = 30 WHERE name = 'John'"); -
通用执行(任意SQL):使用
execute()方法,返回布尔值表示是否为查询结果:boolean isResultSet = statement.execute("SQL语句");
处理PreparedStatement参数
若使用PreparedStatement,需通过setXxx()方法设置参数:

preparedStatement.setInt(1, 1001); // 设置第一个参数为1001
ResultSet rs = preparedStatement.executeQuery();
释放资源
操作完成后必须关闭所有数据库资源,按ResultSet→Statement→Connection顺序:
resultSet.close();
statement.close();
connection.close();
现代Java建议使用try-with-resources自动关闭资源:
try (Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement()) {
// 执行SQL操作
}
事务管理
需要事务支持时,通过Connection对象控制:
connection.setAutoCommit(false); // 关闭自动提交
try {
// 执行多个SQL
connection.commit(); // 提交事务
} catch (SQLException e) {
connection.rollback(); // 回滚事务
}
使用连接池(推荐)
生产环境建议使用连接池(如HikariCP、DBCP):
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/mydb");
config.setUsername("user");
config.setPassword("password");
HikariDataSource ds = new HikariDataSource(config);
Connection connection = ds.getConnection();
注意事项
- SQL语句字符串拼接易导致注入攻击,务必使用
PreparedStatement。 - 不同数据库的JDBC URL格式可能不同,需参考具体数据库文档。
- JDBC 4.0+支持自动驱动加载,可省略
Class.forName()步骤。






