SqlHelper操纵数据库工具类

该工具类是SqlHelper的基础版本,将整个类做成静态类,这样可能很难应付高并发的数据库操作,不过这个问题是能够解决的,通过创建SqlHelper对象,将成员变量,成员方法的static去掉,将获取连接这个操作分离出去,做成一个类,每次获取连接时,获取那个类的对象。这样就在一定程度上解决并发的问题。

属性文件dbInfo.properties,放在Java项目根目录下,想放在src目录下要用类加载器

#oracle 配置
url=jdbc:oracle:thin:@127.0.0.1:1521:SWITCH
user=scott
password=123456
driver=oracle.jdbc.driver.OracleDriver

1.0版 SqlHelper.java

提供以下功能:

callPro1(String sql, String[] parameters) 调用存储过程,无返回值

callPro2(String sql, String[] inParameters,Integer[] outParameters) 调用存储过程,有返回值

ResultSet executeQuery(String sql, String[] parameters) 简单的Select操作

ArrayList executeQuery2(String sql, String[] parameters) 二次封装的Select操作,稍复杂

executeUpdate(String[] sql, String[][] parameters) 考虑事务的update/delete/insert(DML)方法

executeUpdate(String sql, String[] parameters) 单次的update/delete/insert(DML)方法

package com.jdbc;
import java.sql.Statement;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;/*** * @author Switch* @function 提供数据库访问方法* */
public class SqlHelper {// 定义需要的变量private static Connection ct = null;private static PreparedStatement ps = null;private static ResultSet rs = null;private static CallableStatement cs = null;// 连接数据库参数private static String url = "";private static String user = "";private static String password = "";private static String driver = "";private static Properties pp = null;private static FileInputStream fis = null;// 静态代码块加载驱动static {try {// 从dbInfo.properties文件中读取配置信息pp = new Properties();try {fis = new FileInputStream("dbInfo.properties");} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {pp.load(fis);url = pp.getProperty("url");user = pp.getProperty("user");password = pp.getProperty("password");driver = pp.getProperty("driver");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}Class.forName(driver);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {// 关闭资源try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}fis = null;}}// 得到连接public static Connection getConnection() {try {ct = DriverManager.getConnection(url, user, password);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return ct;}// 获得PreparedStatementpublic static PreparedStatement getPreparedStatement() {return ps;}// 得到Connectionpublic static Connection getCt() {return ct;}// 得到PreparedStatementpublic static PreparedStatement getPs() {return ps;}// 得到CallableStatementpublic static CallableStatement getCs() {return cs;}// 得到ResultSetpublic static ResultSet getRs() {return rs;}// 调用存储过程,无返回值// sql {call 过程名(?,?,?)}public static void callPro1(String sql, String[] parameters) {try {ct = getConnection();cs = ct.prepareCall(sql);// ?赋值if (parameters != null && !parameters.equals("")) {for (int i = 0; i < parameters.length; i++) {cs.setObject(i + 1, parameters[i]);}}cs.execute();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();throw new RuntimeException(e.getMessage());} finally {close(rs, cs, ct);}}// 调用存储过程,有返回值public static CallableStatement callPro2(String sql, String[] inParameters,Integer[] outParameters) {try {ct = getConnection();cs = ct.prepareCall(sql);// 输入参数if (inParameters != null && !inParameters.equals("")) {for (int i = 0; i < inParameters.length; i++) {cs.setObject(i + 1, inParameters[i]);}}// 输出参数if (outParameters != null) {for (int i = 0; i < outParameters.length; i++) {cs.registerOutParameter(inParameters.length + i + 1,outParameters[i]);}}cs.execute();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();throw new RuntimeException(e.getMessage());} finally {}return cs;}// select方法public static ResultSet executeQuery(String sql, String[] parameters) {try {ct = getConnection();ps = ct.prepareStatement(sql);if (parameters != null && !parameters.equals("")) {for (int i = 0; i < parameters.length; i++) {ps.setString(i + 1, parameters[i]);}}rs = ps.executeQuery();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();throw new RuntimeException(e.getMessage());}return rs;}// select方法2(更安全)----规则:哪里使用资源,哪里关闭资源public static ArrayList executeQuery2(String sql, String[] parameters) {ArrayList result = null;try {ct = getConnection();ps = ct.prepareStatement(sql);if (parameters != null && !parameters.equals("")) {for (int i = 0; i < parameters.length; i++) {ps.setString(i + 1, parameters[i]);}}rs = ps.executeQuery();// 获取结果原始信息ResultSetMetaData resultSetMetaData = rs.getMetaData();int column = resultSetMetaData.getColumnCount();result = new ArrayList();// 一行数据while (rs.next()) {// 对象数组,表示一行数据Object[] ob = new Object[column];for (int i = 1; i <= column; i++) {// 一项数据ob[i - 1] = rs.getObject(i);}result.add(ob);}} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());} finally {SqlHelper.close(rs, ps, ct);}return result;}// 考虑事务的update/delete/insert(DML)方法public static void executeUpdate(String[] sql, String[][] parameters) {try {// 获得连接ct = getConnection();// 将自动提交设置为falsect.setAutoCommit(false);// 设置事务级别为Serializablect.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);// 用户传入的可能是多个SQL语句for (int i = 0; i < sql.length; i++) {if (parameters[i] != null && !parameters[i].equals("")) {ps = ct.prepareStatement(sql[i]);for (int j = 0; j < parameters[i].length; j++) {// 给?赋值ps.setString(j + 1, parameters[i][j]);}}// 执行操作ps.executeUpdate();}// 提交ct.commit();} catch (Exception e) {// TODO: handle exception// 回滚try {ct.rollback();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}e.printStackTrace();throw new RuntimeException(e.getMessage());} finally {close(rs, ps, ct);}}// 不考虑事务的update/delete/insert(DML)方法public static void executeUpdate(String sql, String[] parameters) {// 创建pstry {ct = getConnection();ps = ct.prepareStatement(sql);if (parameters != null && !parameters.equals("")) {// 给?赋值for (int i = 0; i < parameters.length; i++) {ps.setString(i + 1, parameters[i]);}}// 执行操作ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch block// 开发阶段使用e.printStackTrace();// 抛出运行异常,可以给调用该方法的方法一个选择// 可以处理也可以放弃处理throw new RuntimeException(e.getMessage());} finally {close(rs, ps, ct);}}// 关闭资源的方法public static void close(ResultSet rs, Statement ps, Connection ct) {// 先开后闭if (rs != null) {try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 使用垃圾回收机制回收rs = null;}if (ps != null) {try {ps.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 使用垃圾回收机制回收ps = null;}if (ct != null) {try {ct.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 使用垃圾回收机制回收ct = null;}}
}

SqlHelper操纵数据库工具类相关推荐

  1. 开发自己的框架——(二)数据库工具类的封装

    为了让框架的内容与数据分离,我们把常用的类封装到一个工具类中,当用到这些方法时,就调用这个封装好的类,能够使代码的复用性得到很大的提高. 首先,封装数据库相关操作,为了使封装规范化,我们创建一个接口让 ...

  2. 编写mysql的工具_自己编写的数据库工具类

    /** * 数据库工具类 * 1.连接数据库 * 2.执行增删改查功能功能并报错 * 3.没有参数传递是则使用默认信息连接 */ class mysql { private $link = null; ...

  3. MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

    MySQL数据库工具类之--DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...

  4. oracle数据库中is的使用说明,分享数据库工具类DatabaseUtils实现数据库登录验证isUrlValid、数据类型判断isOracle及连接关闭closeDbObject等常见操作...

    一.前言 基于dbcon-5.0.1.jar.zip开源包的数据库工具类uk.ac.sanger.cgp.dbcon.util.DatabaseUtils对数据连接有效关闭closeDbObject. ...

  5. java数据库设计工具_Java课程设计---创建数据库工具类

    1.传统的数据库操作 package com.java.mysql; import java.sql.Connection; import java.sql.DriverManager; import ...

  6. 数据库工具类DbUtil

    1.定义工具类 public Class DbUtils{//1.定义工具类需要的对象protected Connection conn=null;protected PreparedStatemen ...

  7. 一个简单的数据库工具类

    为什么80%的码农都做不了架构师?>>>    接上面一片博文,自己弄了一个简单的数据库操作工具类: /** 创建日期 2014-6-5** TODO 要更改此生成的文件的模板,请转 ...

  8. 金蝶BOS开发数据库工具类

    1.后台DbUtil用法: com.kingdee.eas.util.app.DbUtil (1)查询操作StringBuffer sql = new StringBuffer();sql.appen ...

  9. python调用mysql数据库工具类

    工具类 import MySQLdb import json import datetimeclass CJsonEncoder(json.JSONEncoder):def default(self, ...

最新文章

  1. Generative Adversarial Text to Image Synthesis --- 根据文字描述生成对应的图片
  2. 看得“深”、看得“清” —— 深度学习在图像超清化的应用
  3. 创建支持ssh的docker镜像
  4. Java 复习 —— JMM基础
  5. 【宝,我去读书了。读的什么书,给你的情书】《数据结构(c++)邓俊晖》-绪论篇
  6. Selenium IDE安装和检查获取的控件路径技巧
  7. mysql 存储引擎_MySQL存储引擎
  8. 多元统计分析及R语言建模_自定义函数: msaR.R
  9. Sugar Bytes WOW2 for Mac - 多功能滤波效果器
  10. 新中国成立60周年重要科技成果知识竞赛试题
  11. 免费下载遥感数据的网址
  12. 计算机专业教育经历怎么写,个人简历教育经历怎么写?
  13. 数据库异常:FUNCTION count does not exist.
  14. 【Python cursor指针】——Python Tkinter Cursor鼠标指针属性值
  15. Binarized Neural Network : BNN二值神经网络代码实例
  16. android横屏分辨率,android适配不同分辨率hdpi、mdpi、ldpi横屏竖屏
  17. 关于实现手机定位,通过服务器,再发送给查询者,或指定人
  18. vue项目引入icon图标
  19. ActiveMQ : Async error occurred: java.lang.OutO...
  20. RDO LOST / loss rdo

热门文章

  1. 猪八戒网的DevOps进化论
  2. 解决硬盘文件目录损坏且无法读取
  3. #define c# 报错_c语言中#define的用法
  4. linux 系统文件目录颜色及特殊权限对应的颜色
  5. Java源码混淆,jar包加密,禁止反编译jar包
  6. 什么是IDE(集成开发环境)?
  7. aide入侵检测工具与crontab
  8. abs.s19文件_ABS 1.2:后台命令和导入文件的功能
  9. Python编程各种推导式详解
  10. Python高级——长连接与短连接(TCP)