嵌入式数据库 sqllite & h2 utils
使用场景:
简单脚本,但是有需要数据记录. (使用前升级下版本)
我的使用: 老机器,老项目,jkd6, 需要记录
SqlLiteUtils
package com.sea.edi.listener; import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /***************************
*<pre>
* @Project Name : edi-kafka-service
* @Package : com.icil.edi.listener
* @File Name : SqlLiteUtils
* @Author : Sea
* @Date : 12/14/22 3:53 PM
* @Purpose :
* @History :
*</pre>
* <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
* <dependency>
* <groupId>org.xerial</groupId>
* <artifactId>sqlite-jdbc</artifactId>
* <version>3.21.0</version>
* </dependency>
***************************/
public class SqlLiteUtils { static Connection connection = null; public static Connection getConnection() throws Exception {
if(connection==null||connection.isValid(15)){
synchronized (SqlLiteUtils.class){
if(connection==null||connection.isValid(15)){
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:FileCopy.db");
// connection = DriverManager.getConnection("jdbc:sqlite:/home/sealiu/FileCopy.db");
connection.setAutoCommit(true);}
}
}
return connection;
} /**
* insert update delete
* table tb_file_name : id fileName createTs
* @param sql
* @throws Exception
*/
public static void doUpdate(String sql){
try
{
Connection connection = getConnection();
Statement statement = connection.createStatement();
// statement.executeUpdate("CREATE TABLE IF NOT EXISTS tb_file_name (createTs integer, name string)");
// statement.executeUpdate("insert into tb_file_name values(System.currentTimeMillis(), 'Sea')");
statement.executeUpdate(sql);
}catch (Exception e)
{
e.printStackTrace();
System.err.println("exec sql "+ sql + "exp and exception: " + e);
} } public static List<Map> doQuery(String sql){
try
{
Connection connection = getConnection();
Statement statement = connection.createStatement();
statement.setQueryTimeout(30); // set timeout to 30 sec.
// ResultSet rs = statement.executeQuery("select * from person");
ResultSet rs = statement.executeQuery(sql);
List<Map> maps = convertList(rs);
return maps;
}catch (Exception e)
{
e.printStackTrace();
System.err.println("exec sql "+ sql + "exp and exception: " + e);
}
return null;
} // 将查询结果resultset转换为List<Map>
private static List<Map> convertList(ResultSet rs) throws SQLException{
List<Map> list = new ArrayList<Map>();
ResultSetMetaData md = rs.getMetaData();//获取键名
int columnCount = md.getColumnCount();//获取列的数量
while (rs.next()) {
Map<String,Object> rowData = new HashMap<String,Object>();//声明Map
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));//获取键名及值
}
list.add(rowData);
}
return list;
} // @Test
public static void main(String[] args) throws Exception
{ // String schema= "CREATE TABLE IF NOT EXISTS tb_file_name (createTs Long, name string ,primary key(name))";
String schema= "CREATE TABLE IF NOT EXISTS tb_file_name (createTs Long, name string )";
String insertSql= "insert into tb_file_name values(3, 'Sea')";
String query= "select * from tb_file_name where createTs>2";
String delete= "DELETE FROM tb_file_name WHERE createTs=2 "; doUpdate(schema);
doUpdate(insertSql);
// doUpdate(delete);
List<Map> maps = doQuery(query);
System.err.println(maps);
} }
H2DbUtils:
package com.sea.edi.listener; import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /***************************
*<pre>
* @Project Name : edi-kafka-service
* @Package : com.sea.edi.listener
* @File Name : H2BDUtils
* @Author : Sea
* @Date : 12/15/22 3:31 PM
* @Purpose :
* @History :
* <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
* <dependency>
* <groupId>com.h2database</groupId>
* <artifactId>h2</artifactId>
* <version>1.4.187</version>
* </dependency>
*</pre>
***************************/
public class H2DBUtil { public static String DB_DIR = null;
static Connection connection = null;
public static Connection getConnection() throws Exception {
if(connection==null||connection.isValid(15)){
synchronized (H2DBUtil.class){
if(connection==null||connection.isValid(15)){
// 加载H2数据库驱动
Class.forName("org.h2.Driver");
//jdbc:h2:/tmp/tmp/h2DB
String JDBC_URL = DB_DIR!=null?("jdbc:h2:"+DB_DIR):"jdbc:h2:/tmp/h2DB";
// 根据连接URL,用户名,密码获取数据库连接
connection = DriverManager.getConnection(JDBC_URL, "root", "root");
connection.setAutoCommit(true);}
}
}
return connection;
} /**
* insert update delete
* @param sql
* @throws Exception
*/
public static void doUpdate(String sql){
try
{
Connection connection = getConnection();
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
}catch (Exception e)
{
e.printStackTrace();
System.err.println("exec sql "+ sql + "exp and exception: " + e);
} } public static List<Map> doQuery(String sql){
try
{
Connection connection = getConnection();
Statement statement = connection.createStatement();
statement.setQueryTimeout(30); // set timeout to 30 sec.
// ResultSet rs = statement.executeQuery("select * from person");
ResultSet rs = statement.executeQuery(sql);
List<Map> maps = convertList(rs);
return maps;
}catch (Exception e)
{
e.printStackTrace();
System.err.println("exec sql "+ sql + "exp and exception: " + e);
}
return null;
} // 将查询结果resultset转换为List<Map>
private static List<Map> convertList(ResultSet rs) throws SQLException{
List<Map> list = new ArrayList<Map>();
ResultSetMetaData md = rs.getMetaData();//获取键名
int columnCount = md.getColumnCount();//获取列的数量
while (rs.next()) {
Map<String,Object> rowData = new HashMap<String,Object>();//声明Map
for (int i = 1; i <= columnCount; i++) {
rowData.put((""+md.getColumnName(i)).toLowerCase(), rs.getObject(i));//获取键名及值
}
list.add(rowData);
}
return list;
} // @Test
public static void main(String[] args) throws Exception
{
// String schema="CREATE TABLE IF NOT EXISTS tb_file_name(name VARCHAR(70) PRIMARY KEY,name VARCHAR(100),sex VARCHAR(4))";
String schema="CREATE TABLE IF NOT EXISTS tb_file_name(name VARCHAR(70),cts BIGINT,times INT)";
String insertSql= "insert into tb_file_name values('Sea',312421412,3)";
String query= "select * from tb_file_name";
String delete= "DELETE FROM tb_file_name WHERE times=2 "; doUpdate(schema);
doUpdate(insertSql);
doUpdate(delete);
List<Map> maps = doQuery(query);
System.err.println(maps);
} }
嵌入式数据库 sqllite & h2 utils的更多相关文章
- Java嵌入式数据库H2学习总结(一)——H2数据库入门
一.H2数据库介绍 常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL.其中H2和HSQLDB类似,十分适合作为嵌入式数据库使用,而其它的数据库大部分都需要安装独立的 ...
- 在Spring中使用嵌入式数据库-H2
Spring3以后开始支持嵌入式数据库,嵌入式数据库目前在市面上有好多种,HSQL,DERBY,H2...今天就主要讲一下h2的使用 对于一个数据库产品来说,主要就是如何存储数据和读取数据了.所谓嵌入 ...
- sqlite嵌入式数据库C语言基本操作(1)
sqlite嵌入式数据库C语言基本操作(1) :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0, ...
- 无需部署的轻量级数据库—SQLLite,使用Demo
当有程序需要保存轻量数据,而又烦躁序列化到本地的不便,轻量级数据库—SQLLite是一个很好的选择,只需引用System.Data.SQLite.DLL,无需部署数据库,便可像拥有数据库一样保存数据, ...
- lmdb简介——结合MVCC的B+树嵌入式数据库
lmdb简介 lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎.其主要特性有: 基于文件映射IO(mmap) 基于B+树的key-value接口 基于MVCC(Multi ...
- Java免费开源数据库、Java嵌入式数据库、Java内存数据库
Java免费开源数据库.Java嵌入式数据库.Java内存数据库 http://blog.csdn.net/leiyinsu/article/details/8597680
- SQLite/嵌入式数据库
SQLite/嵌入式数据库 的项目要么不使用数据库(一两个文配置文件就可以搞定),要么就会有很多的数据,用到 postgresql,操练sqlite的还没有.现在我有个自己的小测试例子,写个数据库对比 ...
- Saiku数据库迁移H2迁移到Mysql(二十二)
Saiku数据库迁移H2迁移到Mysql Saiku默认使用H2数据库来存储saiku的用户与角色信息,我们可以根据角色来做saiku的权限控制,然后将角色分配给用户 ,该用户就会有对应的约束了! 由 ...
- [Sqlite]-->嵌入式数据库事务理解以及实例操作
引子: 1. Sqlite在Windows.Linux 和 Mac OS X 上的安装过程 2,嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录 SQLite 事务(Tran ...
- 数据持久化之嵌入式数据库 SQLite(三)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 SQLite 是 D. Richard Hipp 用 C 语言编写的开源 ...
随机推荐
- antd timePicker组件限制当前之前的时间不可选择
import React from 'react'; import ReactDOM from 'react-dom'; import {Input,DatePicker,Form,Col,Butto ...
- QTreeWidget CSS样式
QTreeWidget{ font: 13pt "楷体"; color: rgb(26, 202, 255); border:1px solid rgb(170, 170, 127 ...
- mac新仙剑奇侠传 2018
新仙剑奇侠传 201803重制 下载,挂载后,拖动app到applications应用程序 文件夹即可. https://590m.com/f/28636472-500476381-5c8846 (访 ...
- Vue3.0 编译做了哪些优化
a. 生成 Block tree Vue.js 2.x 的数据更新并触发重新渲染的粒度是组件级的,单个组件内部 需要遍历该组 件的整个 vnode 树.在 2.0 里,渲染效率的快慢与组件大小成正相关 ...
- 在Unity3D中开发的Toon Shader
SwordMaster Toon Shader 特点 此卡通渲染风格的Shader是顶点片元Shader,由本人手动编写完成 此卡通渲染风格的Shader已经在移动设备真机上进行过测试,可以直接应用到 ...
- 群晖Video Station不支持部分视频的解释
网络上都是替换ffmpeg插件的做法,无非就是替换了3个文件,然后再对其中一个文件进行修改. 然而在DSM7.0.1+VS3.0.2中,这个方法根本无用,最好的结果是之前无法播放的视频播放起来转圈圈而 ...
- leetcode-560-和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 . 示例 1: 输入:nums = [1,1,1], k = 2 输出:2 示例 2: 输入:num ...
- Vue3注册全局组件
1. Vue3全局组件注册 components文件夹下新建index.js文件,统一引入需要注册的组件 import CustomCheck from "./CustomCheck.vue ...
- 关于SVN状态图标不显示的解决办法
一.参考网址 地址:https://blog.csdn.net/qq_33521184/article/details/126562881 二.详情: 第一步: 通过svn的设置来解决 右键-> ...
- C# 数据结构和算法-数组队列
队列: 队列是一个有序列表,遵循先入先出原则,可以用数组或链表实现 使用场景 用于排队,按顺序执行 public static void Main(string[] args) { ArrayQueu ...