java 版本SQLHelper
生活随笔
收集整理的這篇文章主要介紹了
java 版本SQLHelper
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package com.jack.SQLHelper;import java.sql.*;
import java.util.logging.*;
import javax.swing.table.*;/*** SQL 基本操作* 通過它,可以很輕松的使用 JDBC 來操縱數據庫* @author Null*/
public class SQLHelper
{/*** 驅動*/public static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";/*** 連接字符串*/public static String url = "jdbc:sqlserver://localhost:1433;databaseName=J2ee;";/*** 用戶名*/public static String user = "null";/*** 密碼*/public static String password = "123456";/*** 不允許實例化該類*/private SQLHelper(){}/*** 獲取一個數據庫連接* 通過設置類的 driver / url / user / password 這四個靜態變量來 設置數據庫連接屬性* @return 數據庫連接*/public static Connection getConnection(){try{// 獲取驅動,這里使用的是 sqljdbc_1.2.2828.100_chs.exe,不同版本的驅動,語句有所不同Class.forName(driver);} catch (ClassNotFoundException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);}try{return DriverManager.getConnection(url, user, password);} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);return null;}}/*** 獲取一個 Statement* 該 Statement 已經設置數據集 可以滾動,可以更新* @return 如果獲取失敗將返回 null,調用時記得檢查返回值*/public static Statement getStatement(){Connection conn = getConnection();if (conn == null){return null;}try{return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);// 設置數據集可以滾動,可以更新} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);close(conn);}return null;}/*** 獲取一個 Statement* 該 Statement 已經設置數據集 可以滾動,可以更新* @param conn 數據庫連接* @return 如果獲取失敗將返回 null,調用時記得檢查返回值*/public static Statement getStatement(Connection conn){if (conn == null){return null;}try{return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);// 設置數據集可以滾動,可以更新} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);return null;}}/*** 獲取一個帶參數的 PreparedStatement* 該 PreparedStatement 已經設置數據集 可以滾動,可以更新* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 如果獲取失敗將返回 null,調用時記得檢查返回值*/public static PreparedStatement getPreparedStatement(String cmdText, Object... cmdParams){Connection conn = getConnection();if (conn == null){return null;}PreparedStatement pstmt = null;try{pstmt = conn.prepareStatement(cmdText, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);int i = 1;for (Object item : cmdParams){pstmt.setObject(i, item);i++;}} catch (SQLException e){e.printStackTrace();close(conn);}return pstmt;}/*** 獲取一個帶參數的 PreparedStatement* 該 PreparedStatement 已經設置數據集 可以滾動,可以更新* @param conn 數據庫連接* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 如果獲取失敗將返回 null,調用時記得檢查返回值*/public static PreparedStatement getPreparedStatement(Connection conn, String cmdText, Object... cmdParams){if (conn == null){return null;}PreparedStatement pstmt = null;try{pstmt = conn.prepareStatement(cmdText, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);int i = 1;for (Object item : cmdParams){pstmt.setObject(i, item);i++;}} catch (SQLException e){e.printStackTrace();close(pstmt);}return pstmt;}/*** 執行 SQL 語句,返回結果為整型* 主要用于執行非查詢語句* @param cmdText SQL 語句* @return 非負數:正常執行; -1:執行錯誤; -2:連接錯誤*/public static int ExecSql(String cmdText){Statement stmt = getStatement();if (stmt == null){return -2;}int i;try{i = stmt.executeUpdate(cmdText);} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,ex);i = -1;}closeConnection(stmt);return i;}/*** 執行 SQL 語句,返回結果為整型* 主要用于執行非查詢語句* @param cmdText SQL 語句* @return 非負數:正常執行; -1:執行錯誤; -2:連接錯誤*/public static int ExecSql(Connection conn, String cmdText){Statement stmt = getStatement(conn);if (stmt == null){return -2;}int i;try{i = stmt.executeUpdate(cmdText);} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,ex);i = -1;}close(stmt);return i;}/*** 執行 SQL 語句,返回結果為整型* 主要用于執行非查詢語句* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 非負數:正常執行; -1:執行錯誤; -2:連接錯誤*/public static int ExecSql(String cmdText, Object... cmdParams){PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);if (pstmt == null){return -2;}int i;try{i = pstmt.executeUpdate();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,ex);i = -1;}closeConnection(pstmt);return i;}/*** 執行 SQL 語句,返回結果為整型* 主要用于執行非查詢語句* @param conn 數據庫連接* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 非負數:正常執行; -1:執行錯誤; -2:連接錯誤*/public static int ExecSql(Connection conn, String cmdText, Object... cmdParams){PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);if (pstmt == null){return -2;}int i;try{i = pstmt.executeUpdate();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);i = -1;}close(pstmt);return i;}/*** 返回結果集的第一行的一列的值,其他忽略* @param cmdText SQL 語句* @return*/public static Object ExecScalar(String cmdText){ResultSet rs = getResultSet(cmdText);Object obj = buildScalar(rs);closeConnection(rs);return obj;}/*** 返回結果集的第一行的一列的值,其他忽略* @param conn 數據庫連接* @param cmdText SQL 語句* @return*/public static Object ExecScalar(Connection conn, String cmdText){ResultSet rs = getResultSet(conn, cmdText);Object obj = buildScalar(rs);closeEx(rs);return obj;}/*** 返回結果集的第一行的一列的值,其他忽略* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return*/public static Object ExecScalar(String cmdText, Object... cmdParams){ResultSet rs = getResultSet(cmdText, cmdParams);Object obj = buildScalar(rs);closeConnection(rs);return obj;}/*** 返回結果集的第一行的一列的值,其他忽略* @param conn 數據庫連接* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return*/public static Object ExecScalar(Connection conn, String cmdText, Object... cmdParams){ResultSet rs = getResultSet(conn, cmdText, cmdParams);Object obj = buildScalar(rs);closeEx(rs);return obj;}/*** 返回一個 ResultSet* @param cmdText SQL 語句* @return*/public static ResultSet getResultSet(String cmdText){Statement stmt = getStatement();if (stmt == null){return null;}try{return stmt.executeQuery(cmdText);} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);closeConnection(stmt);}return null;}/*** 返回一個 ResultSet* @param conn* @param cmdText SQL 語句* @return*/public static ResultSet getResultSet(Connection conn, String cmdText){Statement stmt = getStatement(conn);if (stmt == null){return null;}try{return stmt.executeQuery(cmdText);} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);close(stmt);}return null;}/*** 返回一個 ResultSet* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return*/public static ResultSet getResultSet(String cmdText, Object... cmdParams){PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);if (pstmt == null){return null;}try{return pstmt.executeQuery();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);closeConnection(pstmt);}return null;}/*** 返回一個 ResultSet* @param conn 數據庫連接* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return*/public static ResultSet getResultSet(Connection conn, String cmdText, Object... cmdParams){PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);if (pstmt == null){return null;}try{return pstmt.executeQuery();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);close(pstmt);}return null;}public static Object buildScalar(ResultSet rs){if (rs == null){return null;}Object obj = null;try{if (rs.next()){obj = rs.getObject(1);}} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);}return obj;}/*** 從 ResultSet 中構建 DefaultTableModel* @param rs ResultSet* @return*/public static DefaultTableModel buildTableModel(ResultSet rs){if (rs == null){return null;}ResultSetMetaData rsm;String[] columnNames = null; // 列標題Object[][] data = null; // 數據項DefaultTableModel model; // 表格模型try{// 查詢語句rsm = rs.getMetaData();// 判斷時候可以實現對數據庫的更新if (rs.getConcurrency() == ResultSet.CONCUR_UPDATABLE){System.out.println("Can UPDATABLE");} else{System.out.println("Only Ready");}// 獲取列標題columnNames = new String[rsm.getColumnCount()];for (int i = 0; i < rsm.getColumnCount(); i++){columnNames[i] = rsm.getColumnName(i + 1);}int row = 0;int colum = 0;int columCount = rsm.getColumnCount();// 獲取行數,沒有直接的方法,這里先移動到紀錄結尾,獲取行號,即為行數,然后再移回來rs.last();int rowCount = rs.getRow();rs.beforeFirst();System.out.println("rowCount:" + rowCount);// 讀取數據到數據項變量data = new Object[rowCount][columCount];while (rs.next()){for (colum = 0; colum < rsm.getColumnCount(); colum++){data[row][colum] = rs.getObject(colum + 1);}row++;}} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,ex);return null;}// 初始化數據模型model = new DefaultTableModel(data, columnNames){/*** 重寫 getColumnClass 可以使表格自動識別數據類型*/@SuppressWarnings("unchecked")@Overridepublic Class getColumnClass(int c){// 這里要對空數據集進行檢驗if (dataVector.isEmpty() == false && getValueAt(0, c) != null){return getValueAt(0, c).getClass();} else{return Object.class;}}};return model;}/*** 獲取一個數據模型 該表格模型只能用來顯示數據,如果需要更新數據,請使用 DataSet getDataSet(String cmdText)** @param conn 數據庫連接* @param cmdText* 能返回一個數據集的查詢SQL 語句* @return 表格數據模型*/public static DefaultTableModel getTableModel(Connection conn, String cmdText){ResultSet rs = getResultSet(conn, cmdText);DefaultTableModel tm = buildTableModel(rs);closeEx(rs);return tm;}/*** 獲取一個數據模型 該表格模型只能用來顯示數據,如果需要更新數據,請使用 DataSet getDataSet(String cmdText)** @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 表格數據模型*/public static DefaultTableModel getTableModel(String cmdText, Object... cmdParams){// 查詢語句ResultSet rs = getResultSet(cmdText, cmdParams);DefaultTableModel tm = buildTableModel(rs);closeConnection(rs);return tm;}/*** 獲取一個數據模型 該表格模型只能用來顯示數據,如果需要更新數據,請使用 DataSet getDataSet(String cmdText)* * @param cmdText* 能返回一個數據集的查詢SQL 語句* @return 表格數據模型*/public static DefaultTableModel getTableModel(String cmdText){// 查詢語句ResultSet rs = getResultSet(cmdText);DefaultTableModel tm = buildTableModel(rs);closeConnection(rs);return tm;}/*** 獲取一個數據模型 該表格模型只能用來顯示數據,如果需要更新數據,請使用 DataSet getDataSet(String cmdText)* @param conn 數據庫連接* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 表格數據模型*/public static DefaultTableModel getTableModel(Connection conn, String cmdText, Object... cmdParams){ResultSet rs = getResultSet(conn, cmdText, cmdParams);DefaultTableModel tm = buildTableModel(rs);closeEx(rs);return tm;}/*** 獲取一個具有更新功能的數據模型 如果只要讀取數據,就不要用它了* @param cmdText 能返回一個數據集的查詢SQL 語句* @return 表格數據模型*/public static DataSet getDataSet(String cmdText){Statement stmt = getStatement();DataSet dbc = new DataSet();if (stmt == null){dbc.code = -2;return dbc;}try{// 查詢語句dbc.rs = stmt.executeQuery(cmdText);dbc.model = buildTableModel(dbc.rs);dbc.code = dbc.model.getRowCount();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);dbc.code = -1;}return dbc;}/*** 獲取一個具有更新功能的數據模型 如果只要讀取數據,就不要用它了* @param conn 數據庫連接* @param cmdText 能返回一個數據集的查詢SQL 語句* @return 表格數據模型*/public static DataSet getDataSet(Connection conn, String cmdText){Statement stmt = getStatement(conn);DataSet dbc = new DataSet();if (stmt == null){dbc.code = -2;return dbc;}try{// 查詢語句dbc.rs = stmt.executeQuery(cmdText);dbc.model = buildTableModel(dbc.rs);dbc.code = dbc.model.getRowCount();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);dbc.code = -1;}return dbc;}/*** 獲取一個具有更新功能的數據模型 如果只要讀取數據,就不要用它了* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 表格數據模型*/public static DataSet getDataSet(String cmdText, Object... cmdParams){PreparedStatement pstmt = getPreparedStatement(cmdText, cmdParams);DataSet dbc = new DataSet();if (pstmt == null){dbc.code = -2;return dbc;}try{// 查詢語句dbc.rs = pstmt.executeQuery();dbc.model = buildTableModel(dbc.rs);dbc.code = dbc.model.getRowCount();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);dbc.code = -1;}return dbc;}/*** 獲取一個具有更新功能的數據模型 如果只要讀取數據,就不要用它了* @param conn 數據庫連接* @param cmdText 需要 ? 參數的 SQL 語句* @param cmdParams SQL 語句的參數表* @return 表格數據模型*/public static DataSet getDataSet(Connection conn, String cmdText, Object... cmdParams){PreparedStatement pstmt = getPreparedStatement(conn, cmdText, cmdParams);DataSet dbc = new DataSet();if (pstmt == null){dbc.code = -2;return dbc;}try{// 查詢語句dbc.rs = pstmt.executeQuery();dbc.model = buildTableModel(dbc.rs);dbc.code = dbc.model.getRowCount();} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);dbc.code = -1;}return dbc;}private static void close(Object obj){if (obj == null){return;}try{if (obj instanceof Statement){((Statement) obj).close();} else if (obj instanceof PreparedStatement){((PreparedStatement) obj).close();} else if (obj instanceof ResultSet){((ResultSet) obj).close();} else if (obj instanceof Connection){((Connection) obj).close();}} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);}}private static void closeEx(Object obj){if (obj == null){return;}try{if (obj instanceof Statement){((Statement) obj).close();} else if (obj instanceof PreparedStatement){((PreparedStatement) obj).close();} else if (obj instanceof ResultSet){((ResultSet) obj).getStatement().close();} else if (obj instanceof Connection){((Connection) obj).close();}} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);}}private static void closeConnection(Object obj){if (obj == null){return;}try{if (obj instanceof Statement){((Statement) obj).getConnection().close();} else if (obj instanceof PreparedStatement){((PreparedStatement) obj).getConnection().close();} else if (obj instanceof ResultSet){((ResultSet) obj).getStatement().getConnection().close();} else if (obj instanceof Connection){((Connection) obj).close();}} catch (SQLException ex){Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);}}
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的java 版本SQLHelper的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最新的SqlHelper 类
- 下一篇: Firebug入门指南