H2内嵌数据库的使用
H2內嵌數據庫的使用
?
H2是一個開源的嵌入式數據庫引擎,采用java語言編寫,不受平臺的限制。
同時H2提供了一個十分方便的web控制臺用于操作和管理數據庫內容。
H2還提供兼容模式,可以兼容一些主流的數據庫,因此采用H2作為開發期的數據庫非常方便。
H2作為一個嵌入型的數據庫,它最大的好處就是可以嵌入到我們的Web應用中,和我們的Web應用綁定在一起,成為我們Web應用的一部分。
?
運行方式
H2數據庫有三種運行方式實現:
嵌入式(embedded):可以同應用程序打包在一起發布,這樣可以非常方便地存儲少量結構化數據
服務模式:
TCP/IP server:支持客戶端/服務器端的連接方式
web server:此種運行方式支持使用瀏覽器訪問H2 Console
PG server:支持PostgreSQL客戶端
內存方式:可以作為緩存,作為NoSQL的一個補充。當某些場景下數據模型必須為關系型,可以拿它當Memcached使,作為后端MySQL/Oracle的一個緩沖層,緩存一些不經常變化但需要頻繁訪問的數據,比如字典表、權限表。
?
JDBC URL
?
1、內嵌模式不用啟動服務,已內嵌,不用顯示啟動服務
String jdbcURL = "jdbc:h2:~/h2/db";?
2、TCP/IP server 服務器模式,必須要顯示啟動服務
String jdbcURL = "jdbc:h2:tcp://localhost/~/h2/db";?
3、內存模式
String jdbcURL = "jdbc:h2:mem:h2db"; ? // 或者 ? String jdbcURL = "jdbc:h2:tcp://localhost/mem:h2db";?
?
?
Java應用中的使用
?
操作實例
H2數據庫基本操作:
// ~ 用戶目錄C:\Users\用戶名\ String jdbcURL = "不同模式下,不同的jdbcURL,其他操作一樣"; ? //連接數據庫時使用的用戶名 final String user = "tianya"; ? //連接數據庫時使用的密碼 String password = "123456"; ? //連接H2數據庫時使用的驅動類 //org.h2.Driver String driverClass="org.h2.Driver"; ? try {// 1、加載驅動 Class.forName(driverClass);// 2、獲取連接Connection connection = DriverManager.getConnection(jdbcURL, user, password);Statement statement = connection.createStatement();// 3、執行操作// 3.1、先刪除表,若存在statement.execute("drop table user_info if exists ");// 3.2、創建表statement.execute("create table user_info(id int primary key, name varchar(10), age int , sex varchar(2) )");// 4、新增statement.executeUpdate("insert into user_info(id,name,age,sex) values(1,'張三',23,'男' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(2,'李四',25,'男' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(3,'王五',33,'男' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(4,'珠簾',23,'女' )");statement.executeUpdate("insert into user_info(id,name,age,sex) values(5,'鯉魚',20,'女' )");// 5、查詢ResultSet rs = statement.executeQuery("select * from user_info");while (rs.next()) {System.out.println(rs.getInt(1) + " - " + rs.getString(2) + " - " + rs.getInt(3)+ " - " + rs.getString(4) );}// 釋放資源 statement.close();connection.close();} catch (Exception e) {e.printStackTrace(); }?
?
?
?
Java web 應用中的使用
?
H2服務的啟動
?
1.命令行啟動服務
java -cp h2*.jar org.h2.tools.Server -? ? 常見的選項如下: ? -web:啟動支持H2 Console的服務 -webPort <port>:服務啟動端口,默認為8082 -browser:啟動H2 Console web管理頁面 -tcp:使用TCP server模式啟動 -pg:使用PG server模式啟動 ??
如:
## 瀏覽器web服務方式java -jar h2*.jar org.h2.tools.Server -web -webPort 8082 -browser
?
?
## TCP服務方式
java -jar h2*.jar org.h2.tools.Server -tcp -tcpPort 9092 -tcpSSL
?
??
?
?
?
2.Servlet的方式
?
注解的方式
package com.tianya.mw.web; ? import java.sql.SQLException; import java.util.HashMap; import java.util.Map; ? import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.ServletRegistration.Dynamic; import javax.servlet.annotation.WebListener; ? import org.apache.log4j.Logger; import org.h2.server.web.WebServlet; import org.h2.tools.Server; ? /*** Copyright: Copyright (c) 2019 tianwyam* * @ClassName: H2DBServerListener.java* @Description: 在WEB應用中啟動H2數據庫服務的監聽器* @version: v1.0.0* @author: tianwyam* @date: 2019年3月18日 上午9:56:21*/ @WebListener public class H2DBServerListener implements ServletContextListener { ?private transient static final Logger log = Logger.getLogger(H2DBServerListener.class);// H2 DB 服務private Server server;// H2 tcp訪問的端口public static final int H2_DB_SERVER_PORT = 8082 ; ?@Overridepublic void contextInitialized(ServletContextEvent event) {try {// 啟動H2數據庫服務log.info("啟動H2數據庫...");log.info(String.format("TCP客戶端訪問端口:%s", H2_DB_SERVER_PORT));// 默認端口為8082server = Server.createTcpServer("-tcpPort", String.valueOf(H2_DB_SERVER_PORT), "-tcpAllowOthers").start();log.info("H2數據庫啟動成功...");?// 注解方式 添加 H2 DB console 訪問 WebServlet// 注冊 H2數據庫 web 控制臺 // 添加 org.h2.server.web.WebServletServletContext servletContext = event.getServletContext();Dynamic webServlet = servletContext.addServlet("H2Console", WebServlet.class);// 控制臺 訪問路徑webServlet.addMapping("/console/*");webServlet.setLoadOnStartup(1);// 設置配置Map<String, String> initParameters = new HashMap<>();initParameters.put("allowOthers", "true");initParameters.put("trace", "true");webServlet.setInitParameters(initParameters);log.info("H2 CONSOLE 默認訪問URL:http://localhost:8080/[project_name]/console/");} catch (SQLException e) {log.error("H2數據庫啟動失敗!", e);} ?} ?@Overridepublic void contextDestroyed(ServletContextEvent event) { ?// 停止服務if (server != null) {log.info("關閉H2數據庫...");server.shutdown();log.info("關閉H2數據庫成功...");}} ? }?
轉載于:https://www.cnblogs.com/tianwyam/p/h2db.html
總結
以上是生活随笔為你收集整理的H2内嵌数据库的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作餐怎样吃最省钱?
- 下一篇: JDBC-Mysql-编译预处理(占位符