📜  与数据库交互 java (1)

📅  最后修改于: 2023-12-03 15:06:13.675000             🧑  作者: Mango

与数据库交互Java

简介

Java是一种强大的编程语言,可以使用它来与各种数据库进行交互。在任何一个Web应用程序中,数据库都是一个重要的部分,它包含了所有的数据。Java JDBC API是与关系型数据库进行交互的标准API。这将让Java程序员有能力以一种更为优雅的方式与各种数据库进行交互,而不是手动拼接SQL查询。

数据库连接
  • 导入JDBC依赖

要使用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语句

建立与数据库的连接后,就可以执行SQL查询并获取数据了。Java中有几种不同的方式来执行SQL查询。

  • 使用Statement

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

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执行存储过程的例子:

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程序员完成复杂的数据库操作。连接池可以提高应用程序的性能,因为它充分利用了资源并避免了过多的数据库连接。