DBUtil連接數據庫


1、 SQL server連接:

數據庫不同架包就不同

SQL server 使用的架包是(sqljdbc4.jar)

2、 Mysql (MariaDB同理)

SQL server 使用的架包是(mysql-connector-java-5.1.17-bin.jar)

      DBDRIVER = "com.mysql.jdbc.Driver";
        DBURL = "jdbc:mysql://localhost:3306/mobilephonedb";
        DBUID = "root";
        DBPWD = "";

 關於mysql后台寫入數據亂碼問題解決方式:

DBURL = "jdbc:mysql://localhost:3306/bookdb?useUnicode=true&characterEncoding=utf-8&";

因為java沒有告訴mysql傳過來的是什么類型的數據。

3、sqlite

SQL server 使用的架包是(sqlite-jdbc-3.21.0.jar)

DBDRIVER = "org.sqlite.JDBC";
//這里使用的是絕對路徑
DBURL = "jdbc:sqlite:D:\\myphone.db";

 

下面是工具類

package com.dz.product.dao;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
public class DBUtil {
    //連接對象
    //Statement 命令對象
    //打開連接
    //關閉連接
    //得到一個連接對象
    //查詢(有參,無參)
    //修改(有參,無參)
    
    static Connection conn = null;
    static Statement stmt = null;
    static PreparedStatement pstmt=null;
    
    //驅動,服務器地址,登錄用戶名,密碼    
    static String DBDRIVER;
    static String DBURL;
    static String DBUID;
    static String DBPWD;
    
    static {
        DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; DBURL = "jdbc:sqlserver://localhost:1433;databasename=YerGoMallPro";
        DBUID = "sa";
        //DBPWD = "@zdm168168...";
        DBPWD = "123456";//打開連接
}
public static void open() { //加載驅動 try { Class.forName(DBDRIVER); conn=DriverManager.getConnection(DBURL,DBUID,DBPWD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } //關閉連接 public static void close() { try { if(stmt!=null) stmt.close(); if(conn!=null && !conn.isClosed()) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //得到一個連接對象,當用戶使用DBUtil無法解決個性問題時 //可以通過本方法獲得連接對象 public static Connection getConnection() { try { if(conn==null ||conn.isClosed()) open(); } catch (SQLException e) { e.printStackTrace(); } return conn; } //executeQuery //executeUpdate //execute //獲得查詢的數據集 //select * from student where name='' and sex='' public static ResultSet executeQuery(String sql) { try { open();//保證連接是成功的 stmt = conn.createStatement(); return stmt.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //修改表格內容 public static int executeUpdate(String sql) { int result = 0; try { open();//保證連接是成功的 stmt = conn.createStatement(); result = stmt.executeUpdate(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { close(); } return result; } //如果執行的查詢或存儲過程,會返回多個數據集,或多個執行成功記錄數 //可以調用本方法,返回的結果, //是一個List<ResultSet>或List<Integer>集合 public static Object execute(String sql) { boolean b=false; try { open();//保證連接是成功的 stmt = conn.createStatement(); b = stmt.execute(sql); //true,執行的是一個查詢語句,我們可以得到一個數據集 //false,執行的是一個修改語句,我們可以得到一個執行成功的記錄數 if(b){ return stmt.getResultSet(); } else { return stmt.getUpdateCount(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(!b) { close(); } } return null; } // //select * from student where name=? and sex=? public static ResultSet executeQuery(String sql,Object[] in) { try { open();//保證連接是成功的 PreparedStatement pst = conn.prepareStatement(sql); for(int i=0;i<in.length;i++) pst.setObject(i+1, in[i]); stmt = pst;//只是為了關閉命令對象pst return pst.executeQuery(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static int executeUpdate(String sql,Object[] in) { try { open();//保證連接是成功的 PreparedStatement pst = conn.prepareStatement(sql); for(int i=0;i<in.length;i++) pst.setObject(i+1, in[i]); stmt = pst;//只是為了關閉命令對象pst return pst.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { close(); } return 0; } public static PreparedStatement pstmt(String sql){ open(); try { return pstmt = conn.prepareStatement(sql); } catch (SQLException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } return null; } public static Object execute(String sql,Object[] in) { boolean b=false; try { open();//保證連接是成功的 PreparedStatement pst = conn.prepareStatement(sql); for(int i=0;i<in.length;i++) pst.setObject(i+1, in[i]); b = pst.execute(); //true,執行的是一個查詢語句,我們可以得到一個數據集 //false,執行的是一個修改語句,我們可以得到一個執行成功的記錄數 if(b){ System.out.println("----"); /*List<ResultSet> list = new ArrayList<ResultSet>(); list.add(pst.getResultSet()); while(pst.getMoreResults()) { list.add(pst.getResultSet()); }*/ return pst.getResultSet(); } else { System.out.println("****"); List<Integer> list = new ArrayList<Integer>(); list.add(pst.getUpdateCount()); while(pst.getMoreResults()) { list.add(pst.getUpdateCount()); } return list; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(!b) { System.out.println("===="); close(); } } return null; } //調用存儲過程 proc_Insert(?,?,?) public static Object executeProcedure(String procName,Object[] in) { open(); try { procName = "{call "+procName+"("; String link=""; for(int i=0;i<in.length;i++) { procName+=link+"?"; link=","; } procName+=")}"; CallableStatement cstmt = conn.prepareCall(procName); for(int i=0;i<in.length;i++) { cstmt.setObject(i+1, in[i]); } if(cstmt.execute()) { return cstmt.getResultSet(); } else { return cstmt.getUpdateCount(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /* * 調用存儲過程,並有輸出參數 * @procName ,存儲過程名稱:proc_Insert(?,?) * @in ,輸入參數集合 * @output,輸出參數集合 * @type,輸出參數類型集合 * */ public static Object executeOutputProcedure(String procName, Object[] in,Object[] output,int[] type){ Object result = null; try { CallableStatement cstmt = conn.prepareCall("{call "+procName+"}"); //設置存儲過程的參數值 int i=0; for(;i<in.length;i++){//設置輸入參數 cstmt.setObject(i+1, in[i]); //print(i+1); } int len = output.length+i; for(;i<len;i++){//設置輸出參數 cstmt.registerOutParameter(i+1,type[i-in.length]); //print(i+1); } boolean b = cstmt.execute(); //獲取輸出參數的值 for(i=in.length;i<output.length+in.length;i++) output[i-in.length] = cstmt.getObject(i+1); if(b) { result = cstmt.getResultSet(); } else { result = cstmt.getUpdateCount(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; } //時間轉換 public static Date date(String date_str) { try { Calendar cal = Calendar.getInstance();//日期類 Timestamp timestampnow = new Timestamp(cal.getTimeInMillis());//轉換成正常的日期格式 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");//改為需要的東西 ParsePosition pos = new ParsePosition(0); java.util.Date current = formatter.parse(date_str, pos); timestampnow = new Timestamp(current.getTime()); return timestampnow; } catch (NullPointerException e) { return null; } }; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM