java 版本SQLHelper   
               添加时间:2013-7-1 点击量: 
 
              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 Sql(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 Sql(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 Sql(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 Sql(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 Scalar(String cmdText)
    {
        ResultSet rs = getResultSet(cmdText);
        Object obj = buildScalar(rs);
        closeConnection(rs);
        return obj;
    }
    /
      返回成果集的第一行的一列的值,其他忽视
      @param conn 数据库连接
      @param cmdText SQL 语句
      @return
     /
    public static Object Scalar(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 Scalar(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 Scalar(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)
            @Override
            public 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);
        }
    }
}
我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》
                     
                  
     
  
 
    
    
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 Sql(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 Sql(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 Sql(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 Sql(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 Scalar(String cmdText)
    {
        ResultSet rs = getResultSet(cmdText);
        Object obj = buildScalar(rs);
        closeConnection(rs);
        return obj;
    }
    /
      返回成果集的第一行的一列的值,其他忽视
      @param conn 数据库连接
      @param cmdText SQL 语句
      @return
     /
    public static Object Scalar(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 Scalar(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 Scalar(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)
            @Override
            public 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);
        }
    }
}




