1. 程式人生 > >貢獻一個連結資料庫的jdbc封裝:可意會,亦可言傳

貢獻一個連結資料庫的jdbc封裝:可意會,亦可言傳

     import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List; import java.util.Properties; import javax.swing.JTabbedPane; /** * jdbc 的連結資料庫 通用類 * * @author zhangheng * */ public class JDBCTemplate { //mysql driver = "com.mysql.jdbc.Driver"; //sqlserver driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
private static String driver = "org.apache.hadoop.hive.jdbc.HiveDriver"; private String url = "jdbc:hive://ip:port/default?useUnicode=true&characterEncoding=utf-8&useSSL=false"; /*private String username = "user"; private String password = "password";*/ // 宣告連結資料物件變數
Connection conn; Statement st; PreparedStatement ps; ResultSet rs; // 註冊驅動 static { try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 獲得連結 private void getConnection() { try { conn = DriverManager.getConnection(url, null, null); //conn.setAutoCommit(false); } catch (SQLException e) { e.printStackTrace(); System.out.println("獲得連結失敗!"); } } /** * 提交 * @throws Exception */ public void myCommit() throws Exception{ try{ if(conn != null){ conn.commit(); } }catch(Exception e){ throw e; } } /** * 回滾 */ public void rollBack(){ try{ if(conn != null){ conn.rollback(); } }catch(Exception e){ e.printStackTrace(); } } /** * 建立狀態通道 */ public void getstatment(){ this.getConnection(); try { st = conn.createStatement(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("建立狀態通道失敗!"); } } /** * 基於狀態通道執行操作 * @param sql * @return */ public ResultSet getData(String sql){ this.getstatment(); try { rs = st.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("在狀態通道下執行資料查詢失敗!"); } return rs; } /** * 建立預備狀態通道 */ private void preStatment(String sql) { this.getConnection(); try { ps = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); System.out.println("建立預備狀態通道失敗!"); } } /** * 基於預狀態進行資料操作 * * @param sql * update ?? insert into ?? delete ?? */ public boolean updateData(String sql, String[] params) { this.preStatment(sql); boolean isok = false; try { this.bandle(params); // 執行完整sql 語句 int result = ps.executeUpdate(); if (result > 0) { isok = true; } closeRes(); } catch (SQLException e) { e.printStackTrace(); System.out.println("在預備狀態通道下執行資料操作失敗!"); } return isok; } /** * 基於預狀態通道下的批處理操作 * @param sql insert int user_tb values(?,?,?,?) * @param params String params = {{"23","23","23",23"},{"12","12","12","12"},{"44","44","44","44"}}; */ public void executeBatch(String sql,String params[][]){ try { this.preStatment(sql); if(params != null){ for (int i = 0; i < params.length; i++) { // 記憶體迴圈就是給 一條sql 的問號 賦值 //System.out.println(params[i].length); for (int j = 0; j < params[i].length; j++) { ps.setString(j+1, params[i][j]); } // 把補全的sql 語句拿到 批處理快取中 ps.addBatch(); // System.out.println("正在插入"); } // ps.executeBatch(); //myCommit(); closeRes(); } } catch (Exception e) { e.printStackTrace(); System.out.println("批處理丟失資料"); //rollBack(); } System.out.println("插入完成!"); } /** * 繫結引數 * @param params * @throws SQLException */ private void bandle(String [] params) throws SQLException{ // 繫結引數 if (params != null && params.length > 0) { for (int i = 0; i < params.length; i++) { ps.setString(i + 1, params[i]); } } } /** * 查詢 基於預備狀態 通道 * @param //select ???? */ public ResultSet query(String sql,String []params){ this.preStatment(sql); // 繫結引數 try { this.bandle(params); // 執行 rs = ps.executeQuery(); closeRes(); } catch (SQLException e) { e.printStackTrace(); System.out.println("在預備狀態通道下執行查詢失敗!"); } return rs; } /** * 關閉資源 */ public void closeRes(){ try { if(rs != null){ rs.close(); } if(ps != null){ ps.close(); } if(st != null){ st.close(); } if(conn != null){ conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
此為吾嘔心瀝血之從吾之程式碼中copy來,忘君不思量,自難忘!