JDBC(Java Database Connectivity)是Java连接数据库的标准API,它提供了一个通用的接口,使得Java程序可以和任何数据库连接,并执行诸如查询、插入和更新等操作。JDBC是Java访问数据库的门票,也是Java应用程序中不可或缺的一部分。
一、快速入门
下面是在Java程序中使用JDBC的一个简单示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCDemo {
public static void main(String[] args) throws SQLException {
// 1. 加载 JDBC 驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 2. 创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"username", "password");
// 3. 创建 Statement 对象
Statement stmt = conn.createStatement();
// 4. 执行 SQL 查询
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
// 5. 处理结果集
while (rs.next()) {
System.out.println(rs.getString("name"));
}
// 6. 释放资源
rs.close();
stmt.close();
conn.close();
}
}
上面的代码用JDBC连接到本地MySQL数据库,查询了一个users表的所有记录,并将每条记录的名字(name)打印到控制台。这段代码展示了JDBC连接数据库并执行SQL查询的基本步骤:
1. 加载JDBC驱动程序。
2. 创建数据库连接。
3. 创建Statement对象。
4. 执行SQL查询。
5. 处理结果集。
6. 释放资源。
二、获得连接
在JDBC中,使用Connection接口来表示数据库连接。连接到数据库需要用到以下三个参数:
url:表示数据库的URL,形如jdbc:database://host:port/database_nameusername:表示数据库登录的用户名。password:表示数据库登录的密码。
连接数据库的一种常见方式是使用DriverManager类,具体示例如下:
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"username", "password");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
三、执行SQL语句
执行SQL语句需要用到Statement或PreparedStatement对象。
Statement可以执行任何类型的SQL语句,但是可能存在SQL注入的问题。代码示例如下:
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM users WHERE id = " + id);
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
}
PreparedStatement支持预编译的SQL语句,避免了SQL注入问题。代码示例如下:
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
stmt.setInt(1, id);
rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
}
四、事务处理
JDBC支持事务处理,可以使用Connection接口的commit、rollback和setAutoCommit方法完成事务处理。
代码示例如下:
conn.setAutoCommit(false); // 关闭自动提交
try {
// 执行多条SQL语句
stmt1.execute();
stmt2.execute();
// 提交事务
conn.commit();
} catch (Exception e) {
// 回滚事务
conn.rollback();
} finally {
conn.setAutoCommit(true); // 恢复自动提交
}
五、连接池
使用JDBC连接数据库时,每次都需要创建连接对象、执行SQL语句和释放资源,这样会消耗大量的时间和资源,而且对于高并发的应用来说,可能会导致连接过多,从而导致数据库的性能下降。
连接池技术的出现就是为了解决这些问题。连接池会维护一些预先创建好的连接,并在需要时分配这些连接。通过连接池可以有效地避免连接过多和频繁创建连接对象的开销,提升应用性能。
常见的Java连接池有C3P0、Druid和HikariCP等。
以HikariCP举例,代码示例如下:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class ConnectionPoolDemo {
private static HikariConfig config = new HikariConfig();
private static HikariDataSource ds;
static {
config.setJdbcUrl("jdbc:mysql://localhost:3306/test");
config.setUsername("username");
config.setPassword("password");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds = new HikariDataSource(config);
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
六、总结
JDBC是Java访问数据库的重要手段,也是Java应用程序中不可或缺的一部分。本文主要介绍了如何连接数据库、执行SQL语句、进行事务处理和使用连接池。在实际应用中,根据业务需求选择合适的方法和工具来优化数据库访问,提升应用性能。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/243492.html
微信扫一扫
支付宝扫一扫