packageSql;import java.sql.*;import java.util.logging.*;/*** SQL 基本操作
* 通过它,可以很轻松的使用 JDBC 来操纵数据库*/
public classSQLHelper
{/*** 驱动*/
public static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";/*** 连接字符串*/
public static String url = "jdbc:sqlserver://192.168.1.88:1433;DatabaseName=Test";/*** 用户名*/
public static String user = "sa";/*** 密码*/
public static String password = "sa";/*** 不允许实例化该类*/
privateSQLHelper()
{
}/*** 获取一个数据库连接
* 通过设置类的 driver / url / user / password 这四个静态变量来 设置数据库连接属性
*@return数据库连接*/
public staticConnection 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{returnDriverManager.getConnection(url, user, password);
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);return null;
}
}/*** 获取一个 Statement
* 该 Statement 已经设置数据集 可以滚动,可以更新
*@return如果获取失败将返回 null,调用时记得检查返回值*/
public staticStatement getStatement()
{
Connection conn=getConnection();if (conn == null)
{return null;
}try{returnconn.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 已经设置数据集 可以滚动,可以更新
*@paramconn 数据库连接
*@return如果获取失败将返回 null,调用时记得检查返回值*/
public staticStatement getStatement(Connection conn)
{if (conn == null)
{return null;
}try{returnconn.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 已经设置数据集 可以滚动,可以更新
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return如果获取失败将返回 null,调用时记得检查返回值*/
public staticPreparedStatement 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);
}returnpstmt;
}/*** 获取一个带参数的 PreparedStatement
* 该 PreparedStatement 已经设置数据集 可以滚动,可以更新
*@paramconn 数据库连接
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return如果获取失败将返回 null,调用时记得检查返回值*/
public staticPreparedStatement 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);
}returnpstmt;
}/*** 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
*@paramcmdText SQL 语句
*@return非负数:正常执行; -1:执行错误; -2:连接错误*/
public static intExecSql(String cmdText)
{
Statement stmt=getStatement();if (stmt == null)
{return -2;
}inti;try{
i=stmt.executeUpdate(cmdText);
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,
ex);
i= -1;
}
closeConnection(stmt);returni;
}/*** 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
*@paramcmdText SQL 语句
*@return非负数:正常执行; -1:执行错误; -2:连接错误*/
public static intExecSql(Connection conn, String cmdText)
{
Statement stmt=getStatement(conn);if (stmt == null)
{return -2;
}inti;try{
i=stmt.executeUpdate(cmdText);
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,
ex);
i= -1;
}
close(stmt);returni;
}/*** 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return非负数:正常执行; -1:执行错误; -2:连接错误*/
public static intExecSql(String cmdText, Object... cmdParams)
{
PreparedStatement pstmt=getPreparedStatement(cmdText, cmdParams);if (pstmt == null)
{return -2;
}inti;try{
i=pstmt.executeUpdate();
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null,
ex);
i= -1;
}
closeConnection(pstmt);returni;
}/*** 执行 SQL 语句,返回结果为整型
* 主要用于执行非查询语句
*@paramconn 数据库连接
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return非负数:正常执行; -1:执行错误; -2:连接错误*/
public static intExecSql(Connection conn, String cmdText, Object... cmdParams)
{
PreparedStatement pstmt=getPreparedStatement(conn, cmdText, cmdParams);if (pstmt == null)
{return -2;
}inti;try{
i=pstmt.executeUpdate();
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
i= -1;
}
close(pstmt);returni;
}/*** 返回结果集的第一行的一列的值,其他忽略
*@paramcmdText SQL 语句
*@return
*/
public staticObject ExecScalar(String cmdText)
{
ResultSet rs=getResultSet(cmdText);
Object obj=buildScalar(rs);
closeConnection(rs);returnobj;
}/*** 返回结果集的第一行的一列的值,其他忽略
*@paramconn 数据库连接
*@paramcmdText SQL 语句
*@return
*/
public staticObject ExecScalar(Connection conn, String cmdText)
{
ResultSet rs=getResultSet(conn, cmdText);
Object obj=buildScalar(rs);
closeEx(rs);returnobj;
}/*** 返回结果集的第一行的一列的值,其他忽略
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return
*/
public staticObject ExecScalar(String cmdText, Object... cmdParams)
{
ResultSet rs=getResultSet(cmdText, cmdParams);
Object obj=buildScalar(rs);
closeConnection(rs);returnobj;
}/*** 返回结果集的第一行的一列的值,其他忽略
*@paramconn 数据库连接
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return
*/
public staticObject ExecScalar(Connection conn, String cmdText, Object... cmdParams)
{
ResultSet rs=getResultSet(conn, cmdText, cmdParams);
Object obj=buildScalar(rs);
closeEx(rs);returnobj;
}/*** 返回一个 ResultSet
*@paramcmdText SQL 语句
*@return
*/
public staticResultSet getResultSet(String cmdText)
{
Statement stmt=getStatement();if (stmt == null)
{return null;
}try{returnstmt.executeQuery(cmdText);
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
closeConnection(stmt);
}return null;
}/*** 返回一个 ResultSet
*@paramconn
*@paramcmdText SQL 语句
*@return
*/
public staticResultSet getResultSet(Connection conn, String cmdText)
{
Statement stmt=getStatement(conn);if (stmt == null)
{return null;
}try{returnstmt.executeQuery(cmdText);
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
close(stmt);
}return null;
}/*** 返回一个 ResultSet
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return
*/
public staticResultSet getResultSet(String cmdText, Object... cmdParams)
{
PreparedStatement pstmt=getPreparedStatement(cmdText, cmdParams);if (pstmt == null)
{return null;
}try{returnpstmt.executeQuery();
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
closeConnection(pstmt);
}return null;
}/*** 返回一个 ResultSet
*@paramconn 数据库连接
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams SQL 语句的参数表
*@return
*/
public staticResultSet getResultSet(Connection conn, String cmdText, Object... cmdParams)
{
PreparedStatement pstmt=getPreparedStatement(conn, cmdText, cmdParams);if (pstmt == null)
{return null;
}try{returnpstmt.executeQuery();
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
close(pstmt);
}return null;
}public staticObject 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);
}returnobj;
}/*** 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了
*@paramcmdText 能返回一个数据集的查询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;
}*/
/*** 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了
*@paramconn 数据库连接
*@paramcmdText 能返回一个数据集的查询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;
}*/
/*** 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams 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;
}*/
/*** 获取一个具有更新功能的数据模型 如果只要读取数据,就不要用它了
*@paramconn 数据库连接
*@paramcmdText 需要 ? 参数的 SQL 语句
*@paramcmdParams 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 voidclose(Object obj)
{if (obj == null)
{return;
}try{if (obj instanceofStatement)
{
((Statement) obj).close();
}else if (obj instanceofPreparedStatement)
{
((PreparedStatement) obj).close();
}else if (obj instanceofResultSet)
{
((ResultSet) obj).close();
}else if (obj instanceofConnection)
{
((Connection) obj).close();
}
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
}
}private static voidcloseEx(Object obj)
{if (obj == null)
{return;
}try{if (obj instanceofStatement)
{
((Statement) obj).close();
}else if (obj instanceofPreparedStatement)
{
((PreparedStatement) obj).close();
}else if (obj instanceofResultSet)
{
((ResultSet) obj).getStatement().close();
}else if (obj instanceofConnection)
{
((Connection) obj).close();
}
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
}
}private static voidcloseConnection(Object obj)
{if (obj == null)
{return;
}try{if (obj instanceofStatement)
{
((Statement) obj).getConnection().close();
}else if (obj instanceofPreparedStatement)
{
((PreparedStatement) obj).getConnection().close();
}else if (obj instanceofResultSet)
{
((ResultSet) obj).getStatement().getConnection().close();
}else if (obj instanceofConnection)
{
((Connection) obj).close();
}
}catch(SQLException ex)
{
Logger.getLogger(SQLHelper.class.getName()).log(Level.SEVERE, null, ex);
}
}
}