这次有更新,主要是增加了prepareStatement方法,这种方法的优势1,可防止SQL注入。2,效率高。
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* DBPool.java
* utils class
* @author fanfq
* @version 2.0 2009-6-18
* */
public class DBPool {
private static DBPool instance = null;
private static Connection conn = null;
private static Statement stmt = null;
private static ResultSet rs = null;
private static int count = 0;
private static PreparedStatement pstmt;
/**私有的构造方法*/
private DBPool(){
super();
}
/**形成同步保证多线程访问只有一个实例*/
private static synchronized Connection getConnection() {
if(instance == null){
instance = new DBPool();
}
return instance._getConnection();
}
/**私有的数据源配置*/
private Connection _getConnection(){
try{
String sDBDriver = null;
String sConnection = null;
String sUser = null;
String sPassword = null;
Properties p = new Properties();
InputStream is = getClass().getResourceAsStream("/db.properties");
p.load(is);
sDBDriver = p.getProperty("DBDriver", sDBDriver);
sConnection = p.getProperty("Connection",sConnection);
sUser = p.getProperty("User",sUser);
sPassword = p.getProperty("Password",sPassword);
Properties pr = new Properties();
pr.put("user", sUser);
pr.put("password", sPassword);
pr.put("characterEncoding", "GB2312");
pr.put("useUnicode", "TRUE");
SysLog.loger("connection db....");
Class.forName(sDBDriver).newInstance();
return DriverManager.getConnection(sConnection,pr);
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**关闭数据库连接*/
public static synchronized void closeConnection(){
SysLog.loger("connection is closed....");
try{
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}catch(SQLException exp){
exp.printStackTrace();
}
}
/**获得Statement*/
@SuppressWarnings("finally")
private static Statement getStatement(){
if(null == conn){
conn = getConnection();
}
try {
stmt = conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}finally{
return stmt;
}
}
/**执行常用查询语句专用*/
@SuppressWarnings("finally")
public static ResultSet exeQuery(String sql){
if(null == stmt){
getStatement();
}
try {
SysLog.loger(sql);
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally{
return rs;
}
}
/**执行特殊SQL语句专用*/
public static void exeSQL(String sql) throws Exception{
if(null == stmt){
getStatement();
}
try {
SysLog.loger(sql);
stmt.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**Statement执行update,inster,delete语句专用*/
@SuppressWarnings("finally")
public static int exeUpdate(String sql){
if(null == stmt){
getStatement();
}
try {
SysLog.loger(sql);
count = stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally{
return count;
}
}
/**prepareStatement执行update,inster,delete语句专用*/
@SuppressWarnings("finally")
public static int exePstmtUpdate(String sql,Object[] params){
if(sql!=null&&!sql.equals("")){
if(params==null)
params=new Object[0];
if(null == conn){
conn = getConnection();
}
try{
SysLog.loger(sql);
pstmt=conn.prepareStatement(sql);
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1,params[i]);
}
count = pstmt.executeUpdate();
}catch(SQLException e){
SysLog.loger("exePstmtUpdate()方法出错!");
e.printStackTrace();
}finally{
return count;
}
}
return 0;
}
/**prepareStatement执行Query语句专用*/
@SuppressWarnings("finally")
public static ResultSet exePstmtQuery(String sql,Object[] params){
if(sql!=null&&!sql.equals("")){
if(params==null)
params=new Object[0];
if(null == conn){
conn = getConnection();
}
try{
SysLog.loger(sql);
pstmt=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1,params[i]);
}
rs = pstmt.executeQuery();
}catch(SQLException e){
SysLog.loger("exePstmtQuery()方法出错!");
e.printStackTrace();
}finally{
return rs;
}
}
return null;
}
//测试
// public static void main(String[] args){
//
// String sql = "SELECT * FROM dept";
// ResultSet rss = exeQuery(sql);
// try {
// while(rss.next()){
// System.out.println(rss.getInt(1) + " " + rss.getString(2)+" "+ rss.getString(3) + " " + rss.getInt(4) );
//
// }
// } catch (SQLException e) {
// e.printStackTrace();
// }
// closeConnection();
//
// }
}
#db.properties
#author fanfq
DBDriver=jdbcDirver
Connection=URL
User=userName
Password=password
分享到:
相关推荐
总结,SQL Server JDBC Driver v2.0是针对SQL Server 2005和2008的Java开发者的重要工具,它提供了高效、稳定且全面的数据库连接功能,使得Java应用程序能够充分利用SQL Server的功能并进行无缝集成。在实际开发中,...
【要广告分类系统 v2.0_yad20.rar】是一个计算机毕业设计项目,主要涉及计算机网络、JSP(Java Server Pages)以及JAVA语言技术。这个项目旨在构建一个广告分类平台,用户可以在平台上发布、浏览和管理各类广告信息...
5. **多线程**:包括线程的创建方式(继承Thread类和实现Runnable接口)、同步机制(synchronized关键字、Lock锁)、并发工具类(如ExecutorService、CountDownLatch、CyclicBarrier)等。 6. **IO流**:了解字节流...
【要广告分类系统 v2.0_yad20.zip】是一个与Java毕业设计相关的压缩包,根据其名称推测,这可能是一个用于广告分类的软件系统,版本为2.0,可能包含了广告数据处理、分类算法以及其他相关功能。下面将详细讨论这个...
总的来说,AutoCode代码生成器 V2.0 JAVA版是一个高效且灵活的开发工具,结合了模板引擎、数据库集成和GUI交互,帮助开发者快速生成Java代码,同时适应不同项目的定制需求。它的使用和理解涉及到Java编程、数据库...
总结,Guns技术文档v2.0是一个全面介绍Guns框架的资源,涵盖了其核心组件、集成框架的使用方法、模块设计、安全控制以及快速开发工具的运用。对于希望掌握Guns框架的开发者来说,这份文档是一份宝贵的参考资料,可以...
【要广告分类系统 v2.0_yad20.rar】是一个基于JSP技术的计算机专业课程设计项目,主要目标是实现一个广告分类管理系统。在这个系统中,用户可以浏览、搜索和管理不同类型的广告,从而提高广告发布和管理的效率。JSP...
【JavaCenter_Home_v2.0_Source】是一个包含Java编程语言相关开源项目的资源包,主要以UTF8编码格式提供。这个资源集合对于Java开发者来说是一个宝贵的资料库,它提供了丰富的学习材料和实践示例,有助于深入理解...
永恒文章管理系统(YHCMS) v2.0 是一个基于Java技术开发的毕业设计项目,它主要面向需要构建新闻发布和管理平台的用户。这个系统具备文章的创建、编辑、删除、分类管理、搜索以及用户权限控制等功能,为中小型网站...
【JSP源码详解——永恒文章管理系统YHCMS v2.0】 JSP(JavaServer Pages)是一种基于Java技术的动态网页开发技术,它允许开发者将静态HTML与动态Java代码结合,以创建交互式Web应用。永恒文章管理系统YHCMS v2.0是...
5. **多线程**:Java对多线程的支持很强大,面试中可能会问到线程的创建方式(Thread类、Runnable接口)、线程同步(synchronized关键字、Lock锁、wait/notify机制)、并发工具类(Semaphore、CountDownLatch、...
【DJCMS影视程序 v2.0】是一款基于Java JSP技术构建的内容管理系统,主要用于搭建在线影视网站。这个程序是几年前的开发成果,适用于学生进行毕业设计学习,可以帮助他们理解和掌握Web应用程序开发的基本流程和技术...
5.常用共通封装,各种工具类,基本满足80%项目需求 6.集成简易报表工具,图像报表和数据导出非常方便 JEECG 功能特点 • 架构技术: Struts2+Spring3+Hibernate4+EasyUI1.3+Spring JDBC+Highcharts报表+Jquery+...
【新闻文章】永恒文章管理系统(YHCMS)v2.0 源码版是一个基于Java JSP技术的开源项目,适用于学生进行毕业设计和论文研究。这个系统提供了丰富的功能,帮助用户管理和发布新闻文章,同时也为学习者提供了一个了解...
【CMS程序】JTBC网站内容管理系统(JSP) V2.0.0.3 SQLite版是一个基于Java JSP技术开发的网站内容管理系统,适用于学生进行毕业设计学习。这个系统利用了JSP(JavaServer Pages)的强大功能,结合SQLite数据库,提供...
3. **并发编程**:Java提供了丰富的并发工具类,如线程池、synchronized、volatile、ThreadLocal、Lock等,掌握它们的使用场景和原理对于处理高并发问题至关重要。 4. **多线程**:线程的创建与管理、同步机制、...
《基于Hibernate、...总结,Guestbook V2.0案例展示了如何整合Hibernate、MyEclipse和Oracle等工具,构建一个完整的Web应用。通过深入理解这些技术,开发者可以更好地应对实际项目中的挑战,提升开发质量和效率。
新闻管理器v2.0是一款基于Java开发的新闻内容管理系统,专为管理和发布新闻资讯而设计。这个系统可能包括了新闻发布、编辑、分类、搜索、评论等功能,旨在提高新闻网站或应用的运营效率。让我们深入了解一下Java在...
本篇学习笔记将深入探讨JDBC的使用,特别是基于JDBC v2.0版本的工具类`baseDao`以及与MySQL数据库的连接。我们将使用`mysql-connector-java-8.0.27.jar`作为MySQL的驱动库,同时引入Druid 1.1.21.jar作为高效的数据...
[v2.0 - servlet-v2.0](https://gitee.com/LovelyHzz/java-ee-jdbc-servlet/tree/master/servlet-v2.0) [v3.0 - servlet-v3.0](https://gitee.com/LovelyHzz/java-ee-jdbc-servlet/tree/master/servlet-v3.0)...