📅  最后修改于: 2023-12-03 15:06:13.675000             🧑  作者: Mango
Java是一种强大的编程语言,可以使用它来与各种数据库进行交互。在任何一个Web应用程序中,数据库都是一个重要的部分,它包含了所有的数据。Java JDBC API是与关系型数据库进行交互的标准API。这将让Java程序员有能力以一种更为优雅的方式与各种数据库进行交互,而不是手动拼接SQL查询。
要使用JDBC连接数据库,需要导入数据库对应的JDBC依赖。以下是MySQL的JDBC依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
建立与数据库的连接需要 java.sql.Connection
类。连接参数是数据库的URL,数据库用户名和密码。以下是一个建立与MySQL数据库连接的例子:
String url = "jdbc:mysql://localhost/Users";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
建立与数据库的连接后,就可以执行SQL查询并获取数据了。Java中有几种不同的方式来执行SQL查询。
Statement是最基本的执行SQL查询的方式,它将SQL字符串作为参数传递给数据库。以下是一个使用Statement执行SQL查询的例子:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
String name = rs.getString("name");
System.out.println(name);
}
PreparedStatement比Statement更安全,因为它可以防止SQL注入攻击。以下是一个使用PreparedStatement执行SQL查询的例子:
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM users WHERE name = ?");
pstmt.setString(1, "Tom");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
System.out.println(name);
}
CallableStatement用于执行存储过程或函数。以下是一个使用CallableStatement执行存储过程的例子:
CallableStatement cstmt = conn.prepareCall("{CALL get_user(?, ?)}");
cstmt.setString(1, "Tom");
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.execute();
String name = cstmt.getString(2);
System.out.println(name);
在Java中,可以使用 java.sql.Connection
实现事务。事务是对一组数据库操作进行逻辑分组的机制,如果其中一个操作失败,所有操作都将回滚。
conn.setAutoCommit(false);
conn.rollback();
conn.commit();
数据库连接是一种资源,因此它们应该被留给正在使用它们的线程。连接池的基本思想就是在应用程序启动时建立一组数据库连接,当需要连接数据库时从连接池中获取连接,使用完毕后再将其返回连接池。使用连接池可以提高应用程序的性能。
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/Users");
config.setUsername("root");
config.setPassword("root");
config.setMaximumPoolSize(50); // 最大连接数
config.setMinimumIdle(10); // 最小空闲连接数
HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();
以上是Java与数据库交互的一些注意事项和示例。有了正确的姿势,与各种关系型数据库进行交互就变得更加容易。JDBC API提供了许多类和方法,可以帮助Java程序员完成复杂的数据库操作。连接池可以提高应用程序的性能,因为它充分利用了资源并避免了过多的数据库连接。