Java 生态圈中的嵌入式数据库,哪家强?(下)

简介: 嵌入式数据库一个很陌生的词汇,以前只是听说,但是没有真正使用过,今天小编和大家一起来揭开它的面纱。

4.2、环境配置

String DRIVER_CLASS = "org.h2.Driver";
String JDBC_URL = "jdbc:h2:mem:h2DB";
String USER = "root";
String PASSWORD = "root";

说明:

  • org.h2.Driver表示使用h2嵌入式数据库模式。
  • JDBC_URL中的h2DB表示创建一个名为h2DB的临时数据库。
  • USERPASSWORD主要用于客户端登录使用。

4.3、单元测试应用

下面,来测试一下h2是否可以正常使用。

public class H2Test {
    /**
     * 以嵌入式(本地)连接方式连接H2数据库
     */
    private static final String JDBC_URL = "jdbc:h2:mem:h2DB";
    private static final String DRIVER_CLASS = "org.h2.Driver";
    private static final String USER = "root";
    private static final String PASSWORD = "root";
    public static void main(String[] args) throws Exception {
        //与数据库建立连接
        Class.forName(DRIVER_CLASS);
        Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
        Statement statement = conn.createStatement();
        //删除表
        statement.execute("DROP TABLE IF EXISTS USER_INF");
        //创建表
        statement.execute("CREATE TABLE USER_INF(id VARCHAR(50) PRIMARY KEY, name VARCHAR(50) NOT NULL, sex VARCHAR(50) NOT NULL)");
        //插入数据
        statement.executeUpdate("INSERT INTO USER_INF VALUES('1', '程咬金', '男') ");
        statement.executeUpdate("INSERT INTO USER_INF VALUES('2', '孙尚香', '女') ");
        statement.executeUpdate("INSERT INTO USER_INF VALUES('3', '猴子', '男') ");
        //查询数据
        ResultSet resultSet = statement.executeQuery("select * from USER_INF");
        while (resultSet.next()) {
            System.out.println(resultSet.getInt("id") + ", " + resultSet.getString("name") + ", " + resultSet.getString("sex"));
        }
        //关闭连接
        statement.close();
        conn.close();
    }
}

输出结果:

1, 程咬金, 男
2, 孙尚香, 女
3, 猴子, 男

h2 作为嵌入式数据库应用可以选择两种类型的url,第一种是内存模式运行,这种模式将数据临时放到内存中,程序结束后数据表和数据立即被销毁,就不存在了;第二种是使用本地文件方式,将数据持久化到文件中,当再次连接数据库时,可以获取历史数据。

#第一种,内存模式运行
jdbc:h2:mem:testDB
#第二种,使用本地文件方式
jdbc:h2:file:./target/testDB

h2 还可以作为数据库服务器使用,单独部署在服务器上,应用程序通过远程连接进行操作,连接方式如下:

#连接语法
jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
#范例:
jdbc:h2:tcp://localhost:8080/~/test

如果想使用可视化客户端工具来访问和管理h2,可以通过它自带的 web 页面进行管理。

下面我们以springboot项目为例,通过配置使用h2自带的管理页面来维护。

新建一个WebConfig类,配置h2的 web 控制台,如下:

@Configuration
public class WebConfig {
    /**
     * 添加h2控制台的映射地址
     * @return
     */
    @Bean
    ServletRegistrationBean h2servletRegistration(){
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new WebServlet());
        registrationBean.addUrlMappings("/h2-console/*");
        return registrationBean;
    }
}

启动springboot项目,打开浏览器,输入http://127.0.0.1:8080/h2-console访问管理页面!

24.jpg

填写连接地址、账号、密码之后,进行连接!

25.jpg

可以在工作台,编写 sql 语句进行查询,同时对查询结果还可以进行编辑操作。

五、性能测试

上文中我们介绍了三者数据库的使用,下面,我们以循环插入1000、10000、100000次操作,分别来测试三个数据库的性能,看看他们的表现如何?

26.jpg

从结果上看:

  • derby 与 sqlite 性能方面相差不大,但是随着插入数量越多,derby 比 sqlite 稍逊一些。
  • 三者相比,h2 性能最好,无论是将数据写入内存,还是写入到数据库,性能都是最好的。

六、总结

  • derby 作为嵌入式数据库,在性能和易用性都不错,数据库是以一个目录存储的,但只能用于Java程序中。
  • sqlite 因为支持多种语言,也提供了对 SQL92 的大多数支持,执行效率也不错,作为嵌入式数据库应用最广,但如果想查询数据只能本地连接不能远程连接。
  • h2 作为嵌入式数据库的新秀,主要优势:超轻量级,可以支持内存模式,高效高速,能支持基本的全文搜索,同时与 mysql 数据库兼容性最强,一般使用场景最多的就是在开发环境上进行回归测试使用。
相关文章
|
4天前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
27 5
|
16天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
30 3
|
16天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
33 2
|
16天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
35 2
|
18天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
25 4
|
16天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
16天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
32 1
|
16天前
|
监控 Java 数据库连接
在Java开发中,数据库连接管理是关键问题之一
在Java开发中,数据库连接管理是关键问题之一。本文介绍了连接池技术如何通过预创建和管理数据库连接,提高数据库操作的性能和稳定性,减少资源消耗,并简化连接管理。通过示例代码展示了HikariCP连接池的实际应用。
17 1
|
18天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
37 2
|
1月前
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~