📅  最后修改于: 2023-12-03 15:22:11.787000             🧑  作者: Mango
H2 in-memory-DB 是一个 Java 编写的嵌入式数据库,可以运行于 Java 应用程序的内部,而不需要单独的服务进程。H2 in-memory-DB 支持 SQL-92 和 JDBC 标准,具有完整的 ACID 事务支持。使用 H2 in-memory-DB 可以轻松地将数据库整合到应用程序中,同时也可以大大提高应用程序的性能。
使用 H2 in-memory-DB 有以下优点:
首先,需要将 H2 in-memory-DB 添加为应用程序的依赖项。如果使用 Maven,可以添加以下依赖项:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
如果不使用 Maven,则需要手动下载 H2 in-memory-DB 的 JAR 文件,并将其添加到应用程序的依赖路径中。
使用 H2 in-memory-DB 需要创建数据源。下面是一个创建数据源的示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DataSource {
private static Connection connection;
private DataSource() {}
public static Connection getConnection() throws SQLException {
if (connection == null || connection.isClosed()) {
connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", "");
}
return connection;
}
}
上面的代码使用 JDBC API 创建了一个连接到内存数据库的 Connection 对象。需要注意的是,在连接字符串 "jdbc:h2:mem:testdb" 中,"testdb" 是数据库的名称,"sa" 是用户名,"" 是密码。在实际情况中,这些值应该根据应用程序的需要进行更改。
创建表格的方法与传统的 SQL 数据库相同。下面是一个创建表格的示例代码:
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class CreateTable {
public static void main(String[] args) throws SQLException {
String sql = "CREATE TABLE users " +
"(id INT PRIMARY KEY, " +
" username VARCHAR(255), " +
" password VARCHAR(255), " +
" email VARCHAR(255))";
try (Connection connection = DataSource.getConnection();
Statement statement = connection.createStatement()) {
statement.execute(sql);
}
}
}
上面的代码使用 SQL 语句创建了一个名为 "users" 的表格,并定义了该表格的列和主键。需要注意的是,在使用 Statement 对象之前,需要通过 DataSource.getConnection() 方法获取 Connection 对象。
插入数据的方法也与传统的 SQL 数据库相同。下面是一个插入数据的示例代码:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InsertData {
public static void main(String[] args) throws SQLException {
String sql = "INSERT INTO users (id, username, password, email) VALUES (?, ?, ?, ?)";
try (Connection connection = DataSource.getConnection();
PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setInt(1, 1);
statement.setString(2, "john");
statement.setString(3, "123");
statement.setString(4, "john@example.com");
statement.executeUpdate();
}
}
}
上面的代码将一条数据插入到名为 "users" 的表格中。需要注意的是,在使用 PreparedStatement 对象之前,需要通过 DataSource.getConnection() 方法获取 Connection 对象,并使用占位符 ? 来代替实际的数据值。
查询数据的方法与传统的 SQL 数据库相同。下面是一个查询数据的示例代码:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SelectData {
public static void main(String[] args) throws SQLException {
String sql = "SELECT id, username, password, email FROM users ORDER BY id";
try (Connection connection = DataSource.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
String email = resultSet.getString("email");
System.out.println("id: " + id + ", username: " + username + ", password: " + password + ", email: " + email);
}
}
}
}
上面的代码从名为 "users" 的表格中查询了所有数据,并按照 id 列的升序排列。需要注意的是,在使用 ResultSet 对象之前,需要通过 DataSource.getConnection() 方法获取 Connection 对象和创建 Statement 对象以及执行 SQL 语句。
使用 H2 in-memory-DB 可以轻松地将数据库整合到 Java 应用程序中。不需要单独的数据库服务器或配置,可以大大提高应用程序的性能。通过 Maven 添加依赖项,使用 JDBC API 创建数据源,执行 SQL 语句可以方便地进行数据的增删改查操作。同时,H2 in-memory-DB 也支持事务,为应用程序提供完整的 ACID 支持。