首页 > 数据库 >传说中的SqlHelper

传说中的SqlHelper

时间:2023-03-02 13:32:04浏览次数:25  
标签:ps SqlHelper rs static 传说 catch null ct


dbinfo.properties:


#oracle url=jdbc:oracle:thin:@127.0.0.1:1521:orcl username=scott driver=oracle.jdbc.driver.OracleDriver password=Oracle11g

 

 

SqlHelper.java:

/**
* 功能:实现SqlHelper工具类
* 日期:2012年3月29日
*/
package com.cz.util;

import java.io.*;
import java.sql.*;
import java.util.*;

public class SqlHelper {
//定义需要的变量
private static Connection ct=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
private static CallableStatement cs=null;

public static CallableStatement getCs() {
return cs;
}

private static String url="";
private static String username="";
private static String driver="";
private static String password="";
//读取配置文件
private static Properties pp=null;
private static InputStream fis=null;

//加载驱动,只需要一次
static{
try {
//从dbinfo.properties文件中读取配置信息
pp=new Properties();
//fis=new FileInputStream("dbinfo.properties");
//当我们使用java web的时候,读取文件要使用类加载器
fis=SqlHelper.class.getClassLoader().getResourceAsStream("dbinfo.properties");
pp.load(fis);
url=pp.getProperty("url");
username=pp.getProperty("username");
driver=pp.getProperty("driver");
password=pp.getProperty("password");

Class.forName(driver);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
fis=null;
}
}
//得到连接
public static Connection getConnection(){
try {
ct=DriverManager.getConnection(url, username, password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ct;
}

//分页问题
public static ResultSet executeQuery(){
return null;
}

//调用存储过程(无返回值)
public static void callPro1(String sql,String [] parameters){
try {
ct=getConnection();
cs=ct.prepareCall(sql);
//给?赋值
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
cs.setObject(i+1, parameters[i]);
}
}
//执行
cs.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.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){
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+1+i, outparameters[i]);
}
}

//执行
cs.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//抛出运行时异常
throw new RuntimeException(e.getMessage());
}finally{
//close(rs,cs,ct);
}
return cs;
}

//统一的select语句
public static ResultSet executeQuery(String sql,String [] parameters){
try {
ct=getConnection();
ps=ct.prepareStatement(sql);
//给?赋值
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
ps.setString(i+1, parameters[i]);
}
}
//执行
rs=ps.executeQuery();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//抛出运行时异常
throw new RuntimeException(e.getMessage());
}finally{
//close(rs,ps,ct);
}
return rs;
}

//对查询语句升级
//这样可以满足:哪里使用资源哪里关闭资源
public static ArrayList executeQuery3(String sql,String[] parms)
{
PreparedStatement pstmt=null;
Connection conn=null;
ResultSet rs=null;
try{
conn=getConnection();
pstmt=conn.prepareStatement(sql);
//对问号赋值
if(parms!=null){
for(int i=0;i<parms.length;i++){
pstmt.setString(i+1, parms[i]);
}
}
rs=pstmt.executeQuery();
ArrayList al=new ArrayList();
ResultSetMetaData rsmd=rs.getMetaData();
int column=rsmd.getColumnCount();
while (rs.next())
{
Object[] ob=new Object[column];
for (int i=1;i<=column ;i++ )
{
ob[i-1]=rs.getObject(i);

}
al.add(ob);

}

return al;
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException("executeSqlResultSet方法出错:"+e.getMessage());
}finally{
close(rs, pstmt, conn);
}
}



public static Connection getCt() {
return ct;
}

public static PreparedStatement getPs() {
return ps;
}

public static ResultSet getRs() {
return rs;
}

//如果有多个update/delete/insert,需要考虑事务
public static void executeUpdate2(String []sql,String [][]parameters){
try {
ct=getConnection();
//因为这时用户传入的可能是多个sql语句
ct.setAutoCommit(false);
for(int i=0;i<sql.length;i++){
if(parameters[i]!=null){
ps=ct.prepareStatement(sql[i]);
for(int j=0;j<parameters[i].length ;j++){
ps.setString(j+1,parameters[i][j]);
}
ps.executeUpdate();
}
}
//int i=9/0;
ct.commit();


} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//回滚
try {
ct.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//抛出运行时异常
throw new RuntimeException(e.getMessage());
}finally{
close(rs,ps,ct);
}
}


//先写一个update/delete/insert
public static void executeUpdate(String sql,String [] parameters){

try {
ct=getConnection();
ps=ct.prepareStatement(sql);
//给?赋值
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
ps.setString(i+1, parameters[i]);
}
}
//执行
ps.executeUpdate();
} catch (Exception 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){
try {

if (rs != null) {
rs.close();
}
rs = null;
if (ps != null) {
ps.close();
}
ps = null;
if (ct != null) {
ct.close();
}
ct = null;
} catch (Exception e) {
e.printStackTrace();
}
}


}

 

 

 

标签:ps,SqlHelper,rs,static,传说,catch,null,ct
From: https://blog.51cto.com/u_4427045/6096040

相关文章

  • 秋名山最速传说,2分钟,模态框
    最土最简单的模态框。这个模态框的名字叫起来特别古怪,其实就是高亮显示一个东西(比如图中的搜索框),根据不同需要:只有被高亮显示的那个东东可以进行交互,半透明的黑色背......
  • 炉石传说 酒馆战棋 积分保护机制Developer Insights: Hearthstone Battlegrounds Rati
    https://hearthstone.blizzard.com/en-us/news/23523064BlizzardEntertainment09/28/2020 Greetings!I’mTian,aLeadDataScientistontheHearthstoneteam......
  • 《守望传说》中魔神量级的计算
    在《守望传说》的世界15开头,魔神为老骑士挡下了侵略者的轰炸,并且冰冻了所有侵略者的飞船。假设有\(1000\)个飞船(实际上会更少)。根据暗魔神的背景图,侵略者导弹的威力只有......
  • 炉石传说 古墓惊魂 雷诺技巧
    至少要有4个或者7个高级探墓员,前期要打慢一点。找一下加随从的另外要记得,必须先加高级探墓员,否则其他随从多了,不好找。 然后逃生旋翼机,必须保持1血的血量。  找一......
  • 炉石传说 古墓惊魂 炼金石
    ULDA_103(Alchemist'sStone)Alchemist'sStone炼金石PassiveAfteryouplayanodd-Costcard,reducetheCostofcardsinyourhandby1.被动在你使用一张法力值消......
  • 炉石传说 古墓惊魂 畸变
    可用畸变ULDA_706畸变:不许打脸(Anomaly-No-Face)Anomaly-No-Face畸变:不许打脸HeroesareImmunewhiletheycontrolminions.英雄在控制随从时会获得免疫。 DALA_......
  • 炉石传说 古墓惊魂 高级会员
    ULDA_504下午茶(TeaTime)TeaTime下午茶Gain4ManaCrystalsanddraw2extracardsforthenextbossonly.仅在下一场首领战中获得四个法力水晶,额外抽两张牌。 DA......
  • P1196 [NOI2002] 银河英雄传说
    P1196[NOI2002]银河英雄传说题目简述Mij:\(i\)和\(j\)是两个整数(\(1\lei,j\le30000\)),将\(i\)和\(j\)合并Cij:\(i\)和\(j\)是两个整数(\(1\lei,j......
  • 洛谷P1196 [NOI2002] 银河英雄传说
    slojP2577.食物链题目大意一个序列初始编号为1,2,3,,,30000有2个操作:mij合并第i列和第j列,将第i列头部接到第j列尾部cIj询问i号和j号之间的数量,若......
  • VC6的sort不是传说的那么差嘛
    #include<stdio.h>#include<stdlib.h>#include<memory.h>#include<time.h>#include<algorithm>#include<functional>intn_cp,n_cmp,total_cp[2],total_c......