java 如何执行sql语句
执行SQL语句的基本方法
在Java中执行SQL语句通常通过JDBC(Java Database Connectivity)实现。JDBC是Java标准库提供的数据库访问接口,支持多种关系型数据库。
加载JDBC驱动
使用Class.forName()加载特定数据库的JDBC驱动类。不同数据库需要不同的驱动类名:
Class.forName("com.mysql.jdbc.Driver"); // MySQL
Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle
Class.forName("org.postgresql.Driver"); // PostgreSQL
建立数据库连接
通过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类型选择不同的执行方法:

// 执行查询返回ResultSet
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
// 执行更新操作(INSERT/UPDATE/DELETE)
int rowsAffected = statement.executeUpdate("UPDATE users SET name='John' WHERE id=1");
// 执行任意SQL语句
boolean isResultSet = statement.execute("CALL stored_procedure()");
处理结果集
对于查询语句,需要处理返回的ResultSet:
while(resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
关闭资源
确保在使用完毕后关闭所有数据库资源:
resultSet.close();
statement.close();
connection.close();
使用try-with-resources
Java 7+推荐使用try-with-resources自动管理资源:

try (Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
// 处理结果
} catch (SQLException e) {
e.printStackTrace();
}
使用PreparedStatement防止SQL注入
对于包含用户输入的SQL语句,应使用参数化查询:
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
// 处理结果
}
事务处理
对于需要原子性的一组操作,可以使用事务:
connection.setAutoCommit(false); // 关闭自动提交
try {
// 执行多个SQL语句
statement.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
statement.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
connection.commit(); // 提交事务
} catch (SQLException e) {
connection.rollback(); // 回滚事务
}
使用连接池
生产环境推荐使用连接池(如HikariCP、DBCP)管理数据库连接:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
config.setUsername("root");
config.setPassword("password");
try (HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement()) {
// 执行SQL
}






