JAVA WEB SQLHelper类的封装
在这次做项目中,我对自己最满意的就是封装了一下SQLHelper类,我对自己感到骄傲主要是
我是初学者,我刚开始不知道可以这样做,我只是想着试着去这样做了,结果真的可以,所以我
在我的模块就自己封装了一个SQLHelper,虽然下面用的这个不是很好,但是基本上满足需求,
因为似乎所有类都能转换为String,所以就用String数组来补充sql语句中的可变参数,但是有
一个问题,就是在调用的时候第二个参数必须为null,或者String数组,如果只有一个参数,也
要用String数组的形式传进去(如:String []params=n"ew String[]{"xxx"};),这样做也有
一定的麻烦。 由于当时不知道可变参数是这样写的,如果将以下的第二个参数换成String...
params,那么第二个参数在空的情况下就可以不写,或者写为null。 在只有一个值的情况下直接
转为String类型写入即可。再没有必要转换成String数组类型
/**SQLHelper
*创建人:幽林孤狼
*创建时间:2014-07-17 16:24
*/
package XXX;
import java.io.InputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory; import com.new_fgw.utils.JdbcUtils; public class SQLHelper{
private static Connection conn=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
private static DataSource myDataSource = null;
private static CallableStatement callableStatement=null;
static {
try {
Properties prop=new Properties();
InputStream in=JdbcUtils.class.getClassLoader ().getResourceAsStream("dbcpconfig.properties");
prop.load(in);
myDataSource=BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e){
e.printStackTrace();
}
} public static Connection GetConn()throws SQLException {
return myDataSource.getConnection();
} public static DataSource getDataSource(){
return myDataSource;
} public static PreparedStatement getPs() {
return ps;
}
/**执行带有参数的更新sql语句
* @param sql
* @param parameters
* @return
*/
public static boolean executeUpdate(String sql,String []parameters){
boolean b=false;
try {
conn =GetConn();
ps = conn.prepareStatement(sql);
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
ps.setString(i+1, parameters[i]);
}
}
int x=ps.executeUpdate();
if(x>0)
{
b=true;
}
} catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
SQLHelper.close(rs, ps,conn);
}
return b;
} /**执行带有参数的存储过程,完成数据的更新
* @param sql
* @param parameters sql
* @return
*/
public static boolean executeUpdateByProcedure(String procedure,String [] parameters){
boolean b=false;
try {
conn =GetConn();
callableStatement =conn.prepareCall(procedure);
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
callableStatement.setString(i+1, parameters[i]);
}
}
int x=callableStatement.executeUpdate();
if(x>0)
{
b=true;
}
} catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
SQLHelper.close(rs, ps,conn);
}
return b;
}
/**执行带有参数的查询存储过程
* @param sql
* @param parameters sql
* @return
*/
public static ResultSet executeQueryByProcedure(String procedure,String [] parameters){ try {
conn =GetConn();
callableStatement=conn.prepareCall(procedure);
if(parameters!=null){
for(int i=0;i<parameters.length;i++){
callableStatement.setString(i+1, parameters[i]);
}
}
rs=callableStatement.executeQuery(); } catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{
// SQLHelper.close(rs, ps,conn);
}
return rs;
} /**执行带有参数的查询sql语句
* @param sql
* @param parameters sql
* @return
*/
public static ResultSet executeQuery(String sql,String []parameters){
try {
conn = GetConn();
ps = conn.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) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
return rs;
} /**
* 关闭对应的资源
* @param rs
* @param st
* @param conn
*/
public static void close(ResultSet rs, Statement st, Connection conn) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(conn!=null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
dbcpconfig.properties文件如下:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/databaseName
username=root
password=password
initialSize=10
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=useUnicode=true;characterEncoding=UTF-8
defaultAutoCommit=true
defaultReadOnly= defaultTransactionIsolation=READ_COMMITTED
JAVA WEB SQLHelper类的封装的更多相关文章
- Java面向对象(类、封装)
面向对象 今日内容介绍 u 面向对象 u 封装 第1章 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. l 面向过程的程序设计方式,是遇到一 ...
- java中关于类的封装与继承,this、super关键字的使用
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...
- java基础(9):类、封装
1. 面向对象 1.1 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程. 例 ...
- Java Web 实用返回结果封装
实用的返回结果封装 使用示例 效果 Result ResultEnum 使用示例 /** * @Author: huangwenjun * @Description: * @Date: Created ...
- java web 实体类生成
工具下载地址:https://download.csdn.net/download/g342105676/10813246
- [转]轻量级 Java Web 框架架构设计
工作闲暇之余,我想设计并开发一款轻量级 Java Web 框架,看看能否取代目前最为流行的而又越来越重的 Spring.Hibernate 等框架.请原谅在下的大胆行为与不自量力,本人不是为了重造轮子 ...
- Smart Framework:轻量级 Java Web 框架
Smart Framework:轻量级 Java Web 框架 收藏 黄勇 工作闲暇之余,我开发了一款轻量级 Java Web 框架 —— Smart Framework. 开发该框架是为了: 加 ...
- java jdbc sqlhelper
package com.shop.util; import java.sql.*; //SqlHelper类 //定义了数据库连接函数,关闭查询结果集,关闭Statement对象,关闭数据库连接 // ...
- 【JAVA】 05-String类和JDK5
链接: 笔记目录:毕向东Java基础视频教程-笔记 GitHub库:JavaBXD33 目录: <> <> 内容待整理: API-String 特点 String类: 1.St ...
随机推荐
- 关于ssh的一篇很好的文章
源地址:http://www.w3hacker.com/?p=156 ssh-agent的manual写得倒是挺详细,可看了好几次都没怎么搞明白.08年在网上找到了非常好的一篇文章,An Illu ...
- linux系统设置服务开机启动3种方法,Linux开机启动程序详解
linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 方法2:利用命令行chkconfig命令进行设置 简要说明 ...
- POJ1037A decorative fence(好dp)
1037 带点组合的东西吧 黑书P257 其实我没看懂它写的嘛玩意儿 这题还是挺不错的 一个模糊的思路可能会好想一些 就是大体的递推方程 dp1[][]表示降序 dp2[][]表示升序 数组的含义为长 ...
- BestCoder Round #35
A 题意:给出n个黑球,m个白球,每次取1个球,取了n+m次以后,会生成一个随机的01串S, 如果第i次取出的是黑球,则s[i]=1,如果是白色的,那么s[i]=0, 问01串在S中出现的期望次数 大 ...
- kindeditor编辑器图片水印
//upload_pic.ashx源码 <%@ webhandler Language="C#" class="edit_html_upload_pic" ...
- WebServices生成发布过程及常见问题的解决方法
春夏秋冬走健康之路看四季养生网 健康饮食 养生问题 母婴保健 养生小常识 3.下一步,我们需要将Myservice文件夹拷贝到C:\Inetpub\wwwroot目录下(重要).如下图所示 然后依次 ...
- uva 11624 Fire!(搜索)
开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说.电视剧有意思多了 bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的 发现vis[][]是多余的,完全可以用 ...
- ios 编译openssl支持arm64(转)
最近在编译支付宝 快捷支付(无线) ios 端的时候发现demo不支持arm64.在网上找了下,看到客服说是openssl的库文件不支持arm64,于是自己编译了支持arm64的库文件,发现还是不行, ...
- dagli最早干了这样一件事儿 Localization of Cardiac-Induced Signal Change in fMRI
Localization of Cardiac-Induced Signal Change in fMRI 这篇文章是最早做生理噪声相关组织的定位的. 很奇特,因为,这位学者甚至得出了,血管心动等变化 ...
- nginx - conf.d vs sites-available
自己理解: conf.d - 扩展配置文件,用户配置文件 sites-available - 配置 虚拟主机(nginx支持多个虚拟主机,sites-enabled(存放 软链接,指向sites-av ...