JAVA内嵌数据库H2的使用入门

简介: JAVA内嵌数据库H2的使用入门

H2数据库是开源的,非常适合做嵌入式数据库使用,尤其用java编码的时候。

H2的优势:
    1、h2采用纯Java编写,因此不受平台的限制。
    2、h2只有一个jar文件,十分适合作为嵌入式数据库试用。
    3、h2提供了一个十分方便的web控制台用于操作和管理数据库内容。

一、所需工具:

  JDK

  h2-1.4.x.jar

二、写代码如下:
···
package com.my.enter;

import java.sql.Connection;
import java.sql.SQLException;

import org.h2.jdbcx.JdbcConnectionPool;

public class ConnectionPool {

private static ConnectionPool cp = null;
private JdbcConnectionPool jdbcCP = null;

private ConnectionPool() {
    String dbPath ="./config/test";
    jdbcCP = JdbcConnectionPool.create("jdbc:h2:" + dbPath, "sa", "");
    jdbcCP.setMaxConnections(50);
}

public static ConnectionPool getInstance() {
    if (cp == null) {
        cp = new ConnectionPool();
    }
    return cp;
}

public Connection getConnection() throws SQLException {
    return jdbcCP.getConnection();
}
AI 代码解读

}

···
实例化时若数据库test.mv.db不存在,则会创建,路径是src的同级目录config/test.mv.db;

三、使用数据库:
···
package com.my.enter;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CommonDao {

public static void crateTable() throws SQLException {
    Connection conn = null;
    Statement stmt = null;
    try {
        conn = ConnectionPool.getInstance().getConnection();
        DatabaseMetaData meta = conn.getMetaData();

        ResultSet rsTables = meta.getTables(null, null, "WEATHERINFO",
                new String[] { "TABLE" });
        if (!rsTables.next()) {
            stmt = conn.createStatement();
            stmt.execute("CREATE TABLE WEATHERINFO(WEATHERSTR VARCHAR(1024),LASTMODIFYTIME VARCHAR(1024),STATUS VARCHAR(1024),PRIMARY KEY(WEATHERSTR,LASTMODIFYTIME))");
        }
        rsTables.close();
    } finally {
        releaseConnection(conn, stmt, null);
    }
}

public static void addInfo(String str, long lastModifyTime,
        String status) throws SQLException {
    Connection conn = null;
    PreparedStatement stmt = null;
    try {
        conn = ConnectionPool.getInstance().getConnection();

        stmt = conn
                .prepareStatement("INSERT INTO WEATHERINFO VALUES(?,?,?)");
        stmt.setString(1, str);
        stmt.setString(2, String.valueOf(lastModifyTime));
        stmt.setString(3, status);
        stmt.execute();

    } finally {
        releaseConnection(conn, stmt, null);
    }
}

public static boolean isInfoExits(String filePath, long lastModifyTime)
        throws SQLException {
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    try {
        conn = ConnectionPool.getInstance().getConnection();
        stmt = conn
                .prepareStatement("SELECT WEATHERSTR FROM WEATHERINFO WHERE STATUS=? AND LASTMODIFYTIME=?");
        stmt.setString(1, filePath);
        stmt.setString(2, String.valueOf(lastModifyTime));
        rs = stmt.executeQuery();
        return rs.next();
    } finally {
        releaseConnection(conn, stmt, rs);
    }
}

private static void releaseConnection(Connection conn, Statement stmt,
        ResultSet rs) throws SQLException {
    if (rs != null) {
        rs.close();
    }
    if (stmt != null) {
        stmt.close();
    }
    if (conn != null) {
        conn.close();
    }
}
AI 代码解读

}

···
实现对数据库的操作 包括建表,新增数据,查询等操作;

以上,应该是入门了!

目录
打赏
0
0
0
0
1634
分享
相关文章
|
3天前
|
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
78 37
|
2天前
|
【源码】【Java并发】【LinkedBlockingQueue】适合中学体质的LinkedBlockingQueue入门
前言 有了前文对简单实用的学习 【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门 聪明的你,一定会想知道更多。哈哈哈哈哈,下面主播就...
26 6
【源码】【Java并发】【LinkedBlockingQueue】适合中学体质的LinkedBlockingQueue入门
|
2天前
|
【Java并发】【ArrayBlockingQueue】适合初学体质的ArrayBlockingQueue入门
什么是ArrayBlockingQueue ArrayBlockingQueue是 Java 并发编程中一个基于数组实现的有界阻塞队列,属于 java.util.concurrent 包,实现了 Bl...
39 6
【Java并发】【ArrayBlockingQueue】适合初学体质的ArrayBlockingQueue入门
|
9天前
|
【Java并发】【ReentrantLock】适合初学体质的ReentrantLock入门
前言 什么是ReentrantLock? ReentrantLock 是 Java 并发包 (java.util.concurrent.locks) 中的一个类,它实现了 Lock 接口,提供了与
54 10
【Java并发】【ReentrantLock】适合初学体质的ReentrantLock入门
|
2天前
|
【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门
前言 你是否在线程池工具类里看到过它的身影? 你是否会好奇LinkedBlockingQueue是啥呢? 没有关系,小手手点上关注,跟上主播的节奏。 什么是LinkedBlockingQueue? ...
22 1
【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门
|
1天前
|
【Java并发】【原子类】适合初学体质的原子类入门
什么是CAS? 说到原子类,首先就要说到CAS: CAS(Compare and Swap) 是一种无锁的原子操作,用于实现多线程环境下的安全数据更新。 CAS(Compare and Swap) 的
33 15
【Java并发】【AQS】适合初学者体质的AQS入门
AQS这是灰常重要的哈,很多JUC下的框架的核心,那都是我们的AQS,所以这里,我们直接开始先研究AQS。 那说到研究AQS,那我们应该,使用开始说起🤓 入门 什么是AQS? AQS(Abst
58 8
【Java并发】【AQS】适合初学者体质的AQS入门
|
1月前
|
【Java并发】【synchronized】适合初学者体质入门的synchronized
欢迎来到我的Java线程同步入门指南!我不是外包员工,梦想是写高端CRUD。2025年我正在沉淀中,博客更新速度加快,欢迎点赞、收藏、关注。 本文介绍Java中的`synchronized`关键字,适合初学者。`synchronized`用于确保多个线程访问共享资源时不会发生冲突,避免竞态条件、保证内存可见性、防止原子性破坏及协调多线程有序访问。
60 8
【Java并发】【synchronized】适合初学者体质入门的synchronized
|
1月前
|
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
66 23
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
92 17

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等