java sqlite 工具类_Java 工具类 - JDBC通用操作基类 BaseDao

封装了增删改查功能

适用于MySQL、Oracle、SQLServer、DB2、Sybase、JTDS、PostgreSql、SQLite、Derby、H2、HSQLDB、ODBC 等等数据库,有需要的还可以自己增加。

package com.tgb.hz.jdbc;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

import java.io.IOException;

import java.sql.*;

import java.util.Properties;

/**

* 数据访问基类

* 支持 MySQL、Oracle、SQLServer、DB2、Sybase、PostgreSql、SQLite、Derby、H2、HSQLDB、ODBC、SQLServer_JTDS、Sybase_JTDS

*
切换数据库时,需要指定相关参数

*

* @author hezhao

* @Time 2017年7月27日 下午4:22:23

* @Description 无

* @Version V 1.0

*/

public class BaseDao {

private final Logger logger = LoggerFactory.getLogger(BaseDao.class);

private final boolean isLog = false;//是否记录SQL日志

private final boolean isConfig = false;//是否需要配置文件

private final boolean isDataSource = false;//是否从连接池取连接

private final String datasource = "";//如果是从连接池取连接,那么给出连接名称

private final DBType type = DBType.MySQL;//数据库类型

// 数据库名

private final String db = "dbname";

private final String ip = "127.0.0.1";

private String name = "root";

private String pwd = "root";

private String driver;

private String url;

private Connection conn = null;

private PreparedStatement pstmt = null;

protected ResultSet rs = null;

{

//把JDBC配置信息放在配置文件中

if(isConfig){

final Properties properties = new Properties();

try {

properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"));

} catch (final IOException e) {

logger.error("加载JDBC配置信息失败...");

logger.error(e.toString(),e);

}

driver = properties.getProperty("jdbc.driver");

url = properties.getProperty("jdbc.url");

name = properties.getProperty("jdbc.username");

pwd = properties.getProperty("jdbc.password");

}else{

if(type == DBType.MySQL){

driver = "com.mysql.jdbc.Driver";

url = "jdbc:mysql://"+ip+":3306/"+db+"?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull";

}else if(type == DBType.SQLServer){

//1、使用sqljdbc

driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

url = "jdbc:sqlserver://"+ip+":1433;DatabaseName="+db;

}else if(type == DBType.SQLServer_JTDS){

//2、使用jtds

driver = "net.sourceforge.jtds.jdbc.Driver";

url = "jdbc:jtds:sqlserver://"+ip+":1433;DatabaseName="+db;

}else if(type == DBType.Oracle){

driver = "oracle.jdbc.driver.OracleDriver";

url = "jdbc:oracle:thin:@"+ip+":1521:"+db;

}else if(type == DBType.DB2){

driver = "com.ibm.db2.jcc.DB2Driver";

url = "jdbc:db2://"+ip+":50000/"+db;

}else if(type == DBType.Sybase){

driver = "com.sybase.jdbc.SybDriver";

url = "jdbc:sybase:Tds:"+ip+":5007/"+db;

}else if(type == DBType.Sybase_JTDS){

driver = "net.sourceforge.jtds.jdbc.Driver";

url = "jdbc:jtds:sybase://"+ip+":5007/"+db;

}else if(type == DBType.PostgreSql){

driver = "org.postgresql.Driver";

url = "jdbc:postgresql://"+ip+"/"+db;

}else if(type == DBType.SQLite){

driver = "org.sqlite.JDBC";

url = "jdbc:sqlite:"+db;//jdbc:sqlite:person.db

}else if(type == DBType.H2){

driver = "org.h2.Driver";

url = "jdbc:h2:tcp://"+ip+"/~/"+db;

}else if(type == DBType.HSQLDB){

driver = "org.hsqldb.jdbcDriver";

url = "jdbc:hsqldb:hsql://"+ip+":9001/"+db;

}else if(type == DBType.Derby){

driver = "org.apache.derby.jdbc.ClientDriver";

url = "jdbc:derby://"+ip+":1527/"+db+";";

}else if(type == DBType.ODBC){

driver = "sun.jdbc.odbc.JdbcOdbcDriver";

url = "jdbc:odbc:"+db;

}

}

}

private void getConnection() {

if(!isDataSource){

//1、通过JDBC获得链接

try {

Class.forName(driver);

conn = DriverManager.getConnection(url, name, pwd);

} catch (Exception e) {

logger.error(e.toString(),e);

}

}else{

//2、通过数据连接池获得链接

try {

Context ctx = new InitialContext();

DataSource ds = (DataSource)ctx.lookup(datasource);

this.conn = ds.getConnection();

} catch (NamingException e) {

logger.error(e.toString(),e);

} catch (SQLException e) {

logger.error(e.toString(),e);

}

}

}

/**

* 关闭资源

*/

protected void closeAll() {

try {

if (this.rs != null) {

rs.close();

}

if (this.pstmt != null) {

pstmt.close();

}

if (this.conn != null) {

conn.close();

}

} catch (SQLException e) {

logger.error(e.toString(),e);

}

}

/**

* 增删改通用

* @author hezhao

* @Time 2017年7月27日 下午4:22:09

* @Description 无

* @Version V 1.0

* @param sql

* @param prams

* @return

*/

protected int executeUpdate(String sql, Object... prams) {

try {

this.getConnection();

this.pstmt = conn.prepareStatement(sql);

if (prams != null) {

for (int i = 0; i < prams.length; i++) {

this.pstmt.setObject(i + 1, prams[i]);

}

}

log(sql, prams);

return this.pstmt.executeUpdate();

} catch (SQLException e) {

logger.error(e.toString(),e);

} finally {

closeAll();

}

return 0;

}

/**

* 新增,返回主键

* @author hezhao

* @Time 2017年1月18日 下午2:23:07

* @param sql

* @param prams

* @return

*/

protected int executeInsert(String sql, Object... prams) {

try {

this.getConnection();

//传入参数:STATEMENT.RETURN_GENERATED_KEYS,指定返回生成的主键

this.pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

if (prams != null) {

for (int i = 0; i < prams.length; i++) {

this.pstmt.setObject(i + 1, prams[i]);

}

}

log(sql, prams);

//执行sql

int count = this.pstmt.executeUpdate();

//返回的主键

int autoIncKey = 0;

if(count > 0){

ResultSet rs = pstmt.getGeneratedKeys(); //获取结果

if (rs.next()) {

autoIncKey = rs.getInt(1);//取得ID

} else {

// throw an exception from here

logger.error("插入语句出错,没有获取到新增的ID!");

}

}

return autoIncKey;

} catch (SQLException e) {

logger.error(e.toString(),e);

} finally {

closeAll();

}

return 0;

}

/**

* 查询通用

* @author hezhao

* @Time 2017年7月27日 下午4:22:45

* @Description 无

* @Version V 1.0

* @param sql

* @param prams

*/

protected void executeQuery(String sql, Object... prams) {

try {

this.getConnection();

this.pstmt = conn.prepareStatement(sql);

if (prams != null) {

for (int i = 0; i < prams.length; i++) {

this.pstmt.setObject(i + 1, prams[i]);

}

}

log(sql, prams);

this.rs = this.pstmt.executeQuery();

} catch (SQLException e) {

logger.error(e.toString(),e);

}

}

/**

* 打印日志

* @author hezhao

* @Time 2017年7月27日 下午4:22:56

* @Description 无

* @Version V 1.0

* @param sql

* @param prams

*/

private void log(String sql, Object[] prams) {

if(isLog) {

System.out.println("===========" + sql);

if (prams != null && prams.length > 0) {

System.out.println("参数:");

for (int i = 0; i < prams.length; i++) {

if (i == prams.length - 1) {

System.out.print(prams[i] + "\n");

} else {

System.out.print(prams[i] + ",");

}

}

}

}

}

/**

* 数据库类型

* @author hezhao on 2017年7月27日 上午11:26:08

*

*/

static enum DBType{

MySQL,

Oracle,

SQLServer,//SQLServer2005

SQLServer_JTDS,//使用jtds连接SQLServer

DB2,

Sybase,

Sybase_JTDS,//使用jtds连接Sybase

PostgreSql,

SQLite,

Derby,

H2,

HSQLDB,

ODBC;//桥连接

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 跨域 下载文件_文件下载重命名(可跨域)

一、正常情况下&#xff0c;我们都如此下载文件并修改文件名&#xff0c;在a标签上面添加download属性var link document.createElement(a);link.href file.url;link.download file.name;link.target"_blank";link.click();由于a.download跨域会失效&#xff0c;上…

java hibernate 插入数据_[Java教程]hibernate 返回新插入数据的Id

[Java教程]hibernate 返回新插入数据的Id0 2015-08-28 10:00:11例如 表明 studentInfoString sql"set set nocount on studentInfo(列名,列名) values(值,值);select identity as inserId";java代码&#xff1a;public int executeCount(String sql, Map paramMap) {…

java输入行数打印菱形_JAVA题,输入行数,输入列数,输出一个菱形

展开全部1,冒泡排序1. /**2. * JAVA排序算法实现代码-冒泡(Bubble Sort)排序。3. *4. *5. *6. */7. public class Test {8. public static void main(String[] args) {9. int[] a ;10.11. System.out.print("排序前: ");12.13. for (int i 0; i < a.length; i)1…

mysql 密码大小写_MySQL数据库加密和解密~认证登陆密码(mysql.user)和MySQL不区分大小写...

MySQL数据库认证密码有两种方式:1&#xff1a;MySQL 4.1版本之前是MySQL323加密2&#xff1a;MySQL 4.1和之后的版本都是MySQLSHA1加密还有函数:AES_ENCRYPT()加密函数和AES_DECRYPT()解密函数和MD5()加密。MySQL数据库中自带old_password(str)和password(str)函数,前者是MySQL…

三星手机 java_如何在三星手机上安装Java ME应用程序?

我的手机应该可以运行&#xff1a;JavaTM&#xff1a;MIDP 2.0,基于CLDC 1.1的应用程序.但是,无论我尝试在其上安装哪个应用程序,我都会收到错误&#xff1a;已下载的JAR无效我已经尝试在Netbeans上构建Java ME项目,使用指定的MIDP 2.0和CLDC 1.1.这些应用程序很简单,使用Netbe…

openshift 3 mysql_最新OpenShift免费空间申请与使用教程-1G内存1G空间支持PHP和MysqL

一、OpenShift空间申请使用前必备工具1、OpenShift官网&#xff1a;1、官方网站&#xff1a;https://www.openshift.com/2、OpenShift V3&#xff1a;https://manage.openshift.com/2、Github账号(或者其他的git仓库也可以..)。注册git仓库是为了方便的实现代码的同步&#xff…

python 简单web音频_Python Twisted web服务器音频fi

我尝试用python中的twisted创建一个简单的web服务器。不过&#xff0c;我无法提供m4a音频文件。在在当前程序中&#xff0c;当我加载http://localhost:8880/mp3.html时&#xff0c;它可以正常工作。它显示音频播放器和mp3播放。此外&#xff0c;程序同时打印“/mp3.html”和/测…

cpython教程_python高性能扩展工具-cython教程1快速入门

Cython不仅仅是一种编程语言。它的起源可以追溯到SAGE数学软件包&#xff0c;它用于提高数学计算性能&#xff0c;例如涉及矩阵的计算。更一般地说&#xff0c;我倾向于将Cython视为SWIG的替代品&#xff0c;为本机代码生成非常好的Python绑定。SWIG是最早和最好之一&#xff0…

golang mysql封装_golang如何封装路由

封装方式一、路由写在 main函数中&#xff0c;数据库初始连接放在 init() 函数中。、首先看 main.go一个初始化函数&#xff0c;初始化 dbfunc init() {db.Connect()}第二&#xff0c;路由func main() {// Configurerouter : gin.Default()// Set html render optionshtmlRende…

在java继承机制中 父类中的私有_Java中子类能继承父类的私有属性吗?

前段时间去听老师讲课的时候&#xff0c;老师告诉我子类是可以继承父类所有的属性和方法的。当时我是极其疑惑的&#xff0c;因为之前学校考试时这个考点我记得很清楚&#xff1a;子类只能继承父类的非私有属性和方法。老师给我的解释是这样的——先看下面一段代码/*** 定义父类…

堆栈关系java_从关键字说Java对象、引用、指针、堆栈的关系

前言&#xff1a;上一篇中我们介绍了new关键字 点击打开链接&#xff0c;new一个类&#xff0c;实际上就是调用该类的构造函数&#xff0c;返回该类的对象。如a new Animal();返回的对象赋给变量a。我们来分析一下内存分配的步骤&#xff0c;new一个类&#xff0c;实际上就创造…

java socket编程客户端_Java Socket编程 - 基于Socket实现HTTP下载客户端

没有借助任何第三方库&#xff0c;完全基于JAVA Socket实现一个最小化的HTTP文件下载客户端。完整的演示如何通过Socket实现下载文件的HTTP请求(request header)发送如何从Socket中接受HTTP响应(Response header, Response body)报文并解析与保存文件内容。如何通过SwingWork实…

java读c二进制文件_如何使用JAVA读取C / Matlab创建的二进制文件

小编典典正如我所猜测的那样&#xff0c;这是一个字节序问题&#xff0c;即您的二进制文件被写为低字节序的整数(可能是因为您使用的是Intel或类似的CPU)。但是&#xff0c;无论Java代码运行在哪个CPU上&#xff0c;它都在读取大端整数。为了显示该问题&#xff0c;以下代码将读…

java 通联支付接口_allinpay 通联支付接口实例

【实例简介】allinpay 支付的实例代码&#xff0c;这只是部分&#xff0c;需要其它的请联系我。 帮忙找【实例截图】【核心代码】201708081652114811└── unionorder_demo├── java│ └── uniondemo│ ├── WebContent│ │ ├── META-INF│ │ │ └…

java web tcp长连接超时时间_常用java web容器http长连接超时设置

1.http长连接相关知识http长连接对我们来说并不陌生&#xff0c;但长连接并不是永远不会关闭。对于HTTP长连接需要注意下面几点&#xff1a;keepalive_timeout指的是web服务器发送完最后一个响应报文后&#xff0c;开始计时&#xff0c;如果在keepalive_timeout指定的时间内还没…

java相遇问题_行程问题

行程问题 《行程问题》说课设计——现代教育信息技术与数学学科的整合福建省闽侯县尚干中心小学 林惠贞 邮编&#xff1a;350112 邮箱:zhenzi2277163.com众所周知,未来的教育&#xff0c;倡导开放式学习&#xff0c;把学习的地点扩展到社会、网络&…

jbutton 数组创建 java_java-将JButton数组添加到JPanel(按钮不可见)

我正在尝试使用Java创建一个简单的计算器.为此,我创建了一个JButton数组并将其添加到JPanel中.问题&#xff1a;按钮不可见.我还添加了一个JLabel和一个JButton进行测试,它们可以正确显示.编码&#xff1a;package test;import java.awt.BorderLayout;import javax.swing.*;pub…

jwt java 项目实例_JWT(JsonWebToken)+SpringMVC项目demo

【实例简介】JSON Web Token(JWT)是一个非常轻巧的规范。现在免费给大家分享一个JWT(JsonWebToken)SpringMVC项目的demo!【实例截图】【核心代码】jwt-demo└── jwt-demo├── pom.xml├── src│ └── main│ ├── java│ │ └── com│ │ └── hthl…

java写一个99到0_Java中一个普通的循环为何从10开始到99连续相乘会得到0?

【套装4本】java编程思想4第4版402.5元包邮(需用券)去购买 >这是一块非常简单的Java代码片段&#xff1a;public class HelloWorld{public static void main(String []args){int product 1;for (int i 10; i < 99; i) {product * i;}System.out.println(product);}}为什…

neo4j java查找_Spring-Boot使用neo4j-java-driver-- 查找两个节点之间关系的最短路径

一、Cypher数据create (小北:朋友圈{姓名:"小北", 喜欢的书类:"Poetry"}),(小菲:朋友圈{姓名:"小菲", 喜欢的书类:"Science Fiction"}),(小鹏:朋友圈{姓名:"小鹏", 喜欢的书类:"Music"}),(小颖:朋友圈{姓名:"…