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.pswp.cn/news/530889.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530889.shtml
英文地址,請注明出處:http://en.pswp.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"}),(小穎:朋友圈{姓名:"…