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 数据库兼容性最强,一般使用场景最多的就是在开发环境上进行回归测试使用。
相关文章
|
29天前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——TestStu.java
hibernate正向生成数据库表以及配置——TestStu.java
16 1
|
29天前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Teacher.java
hibernate正向生成数据库表以及配置——Teacher.java
11 0
|
29天前
|
Java 数据库连接 数据库
hibernate正向生成数据库表以及配置——Student.java
hibernate正向生成数据库表以及配置——Student.java
10 0
|
21天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
7天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
1月前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
11 1
|
1月前
|
SQL Java 关系型数据库
在Python中编写Java数据库驱动是不可能的
在Python中编写Java数据库驱动是不可能的
|
1月前
|
SQL Java 关系型数据库
Java数据库访问
Java数据库访问
|
1月前
|
前端开发 Java 数据库
HTML、sqlserver数据库和java前七章节的复习(一)
HTML、sqlserver数据库和java前七章节的复习(一)
8 0
|
1月前
|
Oracle Java 关系型数据库
java实现遍历树形菜单方法——数据库表的创建
java实现遍历树形菜单方法——数据库表的创建
11 0