java版sqlhelper(轉載)

這次做LN系統我負責的是連接數據庫部分,視頻已經錄製完成,也傳到了網上點擊打開鏈接,希望網友們能指出我的不足,拜謝。下面是這次用到的sqlhelper的代碼,權當作是留作備份了。

package sql;  
import java.sql.*;  
import java.util.logging.*;  
  
/** 
 *  SQL 基本操作 
 * 通過它,可以很輕鬆的使用 JDBC 來操縱數據庫 
 * @author 郗曉勇 
 */  
public class SQLHelper  
{  
    /** 
     * 驅動 
     */  
    public static String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";  
    /** 
     * 連接字符串 
     */  
    public static String url = "jdbc:microsoft:sqlserver://192.168.24.246:1433;DatabaseName=LiNing";  
    /** 
     * 用戶名 
     */  
    public static String user = "sa";  
    /** 
     * 密碼 
     */  
    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;  
    }  
  
     
    
   
    /** 
     * 獲取一個具有更新功能的數據模型 如果只要讀取數據,就不要用它了 
     * @param cmdText 能返回一個數據集的查詢SQL 語句 
     * @return 表格數據模型 
     *  
     *  
     * DataSet 沒有找到在哪個包中,因爲暫時用不到所以省略此方法 
      
    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);  
        }  
    }  
}  

文出處:點擊打開鏈接


發佈了28 篇原創文章 · 獲贊 49 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章