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);}}
}

java 版本SQLHelper相关推荐

  1. 下载最新版本Maven 3.3.9 ,检测安装是否成功时发现Java版本JDK却低于1.7时报错

    下线最新版本Maven 3.3.9 ,检测安装是否成功时发现Java版本JDK却低于1.7时报错 cmd: mvn -v Exception in thread "main" ja ...

  2. linux 修改java版本_Linux 有问必答:如何在 Linux 中改变默认的 Java 版本

    提问:当我尝试在Linux中运行一个Java程序时,我遇到了一个错误.看上去像程序编译所使用的Java版本与我本地的不同.我该如何在Linux上切换默认的Java版本? 当Java程序编译时,编译环境 ...

  3. java jnlp被阻止_JNLP应使用特定的Java版本,但会出现错误结果

    我在这里面临一个问题.我想使用特殊版本来运行我们的 java webstart应用程序,但只需要一个jnlp. ("经过测试,- blabla我们不能使用新版本- blabla"随 ...

  4. Ubuntu/Debian 系统切换Java(JVM),修改Java版本,JAVA_HOME

    http://blog.mypapit.net/2007/10/how-to-switch-between-different-java-jvm-in-ubuntu-and-debian-gnu-li ...

  5. mac os x java_Mac OS X和多个Java版本

    守着一只汪 在Mac上管理多个Java版本的最简洁方法是使用Homebrew.在内Homebrew,使用:homebrew-cask 安装java的版本jenv 管理已安装的java版本如http:/ ...

  6. centos 更换java版本_centos7 更换jdk版本

    查看java版本   java -version 如果有java版本(如果没有直接看红色虚线以下的) 输入 rpm -qa | grep java会显示以下几条内容: ******* ******** ...

  7. 【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )

    文章目录 一.报错信息 二.问题分析 三.解决方案 一.报错信息 在使用 Android 编译时技术 , 涉及 编译时注解 , 注解处理器 ; 开发注解处理器后 , 编译报如下警告 ; 该警告不会影响 ...

  8. 【Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 )

    文章目录 一.注解处理器 依赖 编译时注解 二.设置 注解处理器 支持的注解类型 三.设置 注解处理器 支持的 Java 版本 四.博客资源 Android APT 学习进阶路径 : 推荐按照顺序阅读 ...

  9. 【SmartJob】【隔离装置】WEB/统计程序和隔离程序共享服务器时的JAVA版本冲突问题

    SmartJob.DmsWeb与SmartSys共享服务器容易引发Java版本冲突问题: Java版本不正确 UnsupportedClassVersionError Exception in thr ...

最新文章

  1. 分享一个帮助你自定义标签并且兼容现代浏览器的javascript类库 : X-tag
  2. 员外陪你读论文:DeepWalk: Online learning of Social Representations
  3. Linux学习:gcc 编译工作流程
  4. 展示 测速_科技产品 | 人工智能amp;科技展示厅——助力高校人工智能学科建设及产业人才培养...
  5. 头像裁剪上传插件php,PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
  6. d3js mysql_D3.js入门指南
  7. Android开发删除短信
  8. JS实现Ajax异步刷新
  9. java axis2 开发webservice_利用Axis2开发WebService(3)—用Java实现调用WebService的客户端程序 | 学步园...
  10. TCP/IP协议栈:TCP超时重传机制
  11. 【初赛】「阅读程序」题答v1.0
  12. HDU 2256(矩阵快速幂)
  13. figure函数--Matplotlib
  14. 计算机网络信息安全参考文献,最新网络信息安全参考文献 网络信息安全参考文献有哪些...
  15. DM8达梦数据库:sql查询达梦数据库实例的详情
  16. 开发商给埋的五类网线,家中想改为千兆网络怎么办好?
  17. 卡耐基梅隆大学计算机科学课本,美国卡耐基梅隆大学计算机科学硕士.pdf
  18. 使用Windows批处理+ImageMagick 实现批量处理图片
  19. windows操作系统深度清理垃圾脚本
  20. 软件测试工程师应该学Python还是学Java?

热门文章

  1. 【Groovy】集合遍历 ( 使用集合的 collect 循环遍历集合并根据指定闭包规则生成新集合 | 代码示例 )
  2. 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )
  3. 【Android 启动过程】Activity 启动源码分析 ( AMS -> ActivityThread、AMS 线程阶段 二 )
  4. 【计算机网络】数据链路层 : IEEE 802.11 无线局域网 ( 802.11 MAC 帧头格式 | 无线局域网分类 )
  5. 【Android应用开发】EasyDialog 源码解析
  6. 2018-2019-1 20165236 《信息安全系统设计基础》第4周学习总结
  7. Notepadd ++ PluginManager安装
  8. Agent Job相关的系统表
  9. 通过分析 JDK 源代码研究 Hash 存储机制
  10. 你真的了解try{ return }finally{}中的return?