- 浏览: 493631 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (211)
- Flex (4)
- Java (22)
- Servlet (4)
- 学习心得 (2)
- 生活琐事 (3)
- PHP (0)
- JavaScript (4)
- Linux (3)
- MYSQL (0)
- SQL SERVER (2)
- ORACLE (5)
- 项目技术积累 (0)
- 设计模式 (0)
- Photoshop (0)
- 网页制作 (8)
- 值得记住 (3)
- Struts1.x (7)
- Hibernate (31)
- IDE (10)
- Spring (5)
- EXT (0)
- Junit (4)
- dom4j (2)
- Log4j (3)
- Java标注 (1)
- WebService (1)
- JSON (2)
- Struts2,x (19)
- Ajax (6)
- 英文 (1)
最新评论
-
aduo_vip:
支持博主,好文!正好需要了
java怎样读写和修改XML文件?? -
默默pig:
楼主,您好。有个语法想问一下:引用你原文中“<resul ...
Struts2中redirect基本的经验之谈 -
Andrew0721:
road_16 写道楼主你好,你说到
redirect:act ...
Struts2中redirect基本的经验之谈 -
zhengkunsheng:
Struts2中redirect基本的经验之谈 -
road_16:
楼主你好,你说到
redirect:action处理完后重定向 ...
Struts2中redirect基本的经验之谈
之前我曾经放出过一个通用的数据库连接DAO。但是其也有一定的局限性!例如当数据库连接的
驱动 数据库名称 连接用户名 连接密码
等发生变化的时候,需要重新编译类库。
现在我们对之前的DAO进行如下的改动,使用资源配置文件的形式保存
驱动 数据库名称 连接用户名 连接密码
使该类库更方便
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/books user=root password=1111
package cn.net.royakon.dao; /* * 实现读取配置文件 db.properties 的静态类 */ import java.io.InputStream; import java.util.Properties; public final class Env extends Properties{ //定义变量 private static Env instance; //以单例模式创建,获得对象实例 public static Env getInstance() { if (instance != null) { return instance; } else { makeInstance(); return instance; } } //同步方法,保证再同一时间,只能被一个调用 private static synchronized void makeInstance() { if (instance == null) { instance = new Env(); } } //调用文件的方法 private Env () { InputStream is = getClass().getResourceAsStream("/db.properties"); try { load(is); } catch (Exception e) { e.printStackTrace(); } } }
package cn.net.royakon.dao; /* * 功能:通用的JDBC数据库访问类 */ import java.util.*; import java.sql.*; import javax.servlet.jsp.jstl.sql.*; import cn.net.royakon.dao.Env; public abstract class GenericDao { // 定义数据库连接 private Connection conn; // 定义sql语句 private String sqlValue; // 定义sql语句参数列表 private List values; /** * 打开连接 */ private void openConnection() { try { String driverClassName = Env.getInstance().getProperty("driver"); String url = Env.getInstance().getProperty("url"); String user = Env.getInstance().getProperty("user"); String password =Env.getInstance().getProperty("password"); Class.forName(driverClassName).newInstance(); conn = DriverManager.getConnection(url , user , password); } catch (Exception e) { e.printStackTrace(); } } /** * 设定SQL语句 */ public void setSqlValue(String sqlValue) { this.sqlValue = sqlValue; } /** * 设定SQL语句的参数列表 */ public void setValues(List values) { this.values = values; } /** * 将SQL语句参数列表中的值赋给预执行语句. * * @param pstmt * 预执行语句 * @param values * sql语句参数列表 */ private void setValues(PreparedStatement pstmt, List values) throws SQLException { // 循环,将SQL语句参数列表中的值依次赋给预执行语句 for (int i = 0; i < values.size(); i++) { Object v = values.get(i); // 注意,setObject()方法的索引值从1开始,所以有i+1 pstmt.setObject(i + 1, v); } } /** * 执行查询 * * @return a javax.servlet.jsp.jstl.sql.Result * 返回Result对象result * @exception SQLException * 定义sql异常 */ public Result executeQuery() throws SQLException { // 定义属性 Result result = null; ResultSet rs = null; PreparedStatement pstmt = null; Statement stmt = null; openConnection(); try { if (values != null && values.size() > 0) { // 使用预处理语句,并设定所有的sql语句所有参数值 pstmt = conn.prepareStatement(sqlValue); setValues(pstmt, values); // 执行查询sql语句,返回查询结果集 rs = pstmt.executeQuery(); } else { stmt = conn.createStatement(); rs = stmt.executeQuery(sqlValue); } // 把ResultSet转换为Result result = ResultSupport.toResult(rs); } finally { // 释放资源 if (rs != null) { try { rs.close(); } catch (SQLException e) { } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { } } if (conn != null) { try { conn.close(); } catch (SQLException e) { } } } return result; } /** * 执行Update语句 * * @return numOfRows * 返回受影响的行数 * @exception SQLException * 定义sql异常 */ public int executeUpdate() throws SQLException { // 定义属性 int numOfRows = 0; ResultSet rs = null; PreparedStatement pstmt = null; Statement stmt = null; openConnection(); try { if (values != null && values.size() > 0) { // 使用预处理语句,并设定所有的sql语句所有参数值 pstmt = conn.prepareStatement(sqlValue); setValues(pstmt, values); numOfRows = pstmt.executeUpdate(); } else { // 执行更新sql语句,返回受影响的行数 stmt = conn.createStatement(); numOfRows = stmt.executeUpdate(sqlValue); } } finally { // 释放资源 if (rs != null) { try { rs.close(); } catch (SQLException e) { } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { } } if (conn != null) { try { conn.close(); } catch (SQLException e) { } } } return numOfRows; } }
评论
2 楼
w111222j
2011-02-11
为了回你一帖,还做了十多分钟的小测试。我晕。
如果用JDBC的话,优化成这样是不错的了。呵呵,借用了。
如果用JDBC的话,优化成这样是不错的了。呵呵,借用了。
1 楼
glamey
2010-03-15
写的好复杂。
发表评论
-
浅析Java抽象类和接口的比较
2012-10-23 14:26 1108抽象类(abstract class) ... -
java序列化(Serializable)
2009-10-15 00:05 1493序列化机制只保存对象的类型信息,属性的类型信息和属性值,和方法 ... -
Java Serializable(序列化)的理解和总结
2009-10-13 09:05 11181、序列化是干什么的? 简单说就是为了保存在内存中 ... -
java怎样读写和修改XML文件??
2009-10-10 16:37 15051xml: <?xml version="1. ... -
Java时间格式转换大全
2009-10-10 13:39 1471import java.text.*; import jav ... -
JAVA提高教程(6)-认识List列表
2009-10-10 00:34 1331列表是很常用的数据结构,感觉比Map和Set用的频率要高一些吧 ... -
Java 中 Vector、ArrayList、List 使用深入剖析
2009-10-10 00:29 802线性表,链表,哈希表 ... -
JAVA LIST 遍历
2009-10-09 17:02 2741对List的遍历有三种方式 List< ... -
读取Properties文件的几种方法
2009-09-08 14:08 9281. 使用java.util.Properties类的load ... -
java正则表达式
2009-09-08 08:52 1127Java正则表达式学习: ... -
如何打包jar
2009-09-07 14:32 1650jar cvf my.jar helloword.class将 ... -
(JAVA)IP地址相关的工具类 IPUtil
2009-09-07 11:21 3234import java.net.*; /** * IP ... -
java反射应用对BEAN的操作,写通用类、标签时有用
2009-09-07 11:17 1546import java.lang.reflect.Field; ... -
Java字符串通用类
2009-09-07 11:15 1977import java.util.regex.Matcher; ... -
一个关于日期,数字,字符格式化的常用工具类
2009-09-07 11:13 1828import java.text.SimpleDateForm ... -
Java 通用异常处理类
2009-09-07 10:32 1390/** * (#)ThrowableManager.jav ... -
验证码的java通用类
2009-09-07 10:09 991在应用程序中为防止系 ... -
java实现发送电子邮件功能
2009-09-07 09:14 1514在开发中经常要给用户自动的发送电子邮件,今天在网上搜了一个发送 ... -
高频词汇提取的Java实现
2009-09-07 08:53 1473面对浩瀚的信息海洋,找到想要的资源有时真的是不容易。在大量文字 ... -
Java多线程初学者指南:为什么要进行数据同步
2009-09-07 08:34 1029Java中的变量分为两类:局部变量和类变量。局部变量是指在方法 ...
相关推荐
Java数据库连接(Java Database Connectivity,简称JDBC)是一套用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成。通过JDBC,开发者可以编写出能够与多种不同类型的数据库进行交互的应用程序,而...
1. **数据库驱动**:数据库连接通用模块首先需要安装并管理对应的数据库驱动,如JDBC(Java Database Connectivity)驱动用于Java,pymysql或psycopg2用于Python连接MySQL和PostgreSQL等。驱动是连接数据库的基础,...
以上就是Java操作各种数据库通用类的核心知识点,通过这样的通用类,我们可以轻松地在不同数据库间切换,简化数据库操作的复杂性,提高代码的可复用性和可维护性。当然,实际应用中还需要根据项目需求进行适当的定制...
6. **性能优化**:在实际应用中,需要考虑性能优化,如使用连接池管理数据库连接,减少每次建立新连接的开销;使用批处理执行多条SQL语句;合理设计数据库表结构和索引等。 7. **安全性**:确保数据库连接的安全性...
Java数据库连接池驱动是Java应用程序在访问数据库时用于优化资源管理的一种技术。它提供了一种在多个数据库操作之间重用数据库连接的方式,从而避免了频繁创建和关闭连接带来的性能开销。连接池的核心思想是池化资源...
Java数据库连接池是一种高效管理数据库连接的技术,它在Java应用程序中扮演着至关重要的角色。连接池的基本思想是预先创建一定数量的数据库连接,存储在内存中,当应用程序需要时,从池中获取一个已存在的连接,用完...
这个"java数据连接池通用类(范例)"可能是为了提供一个可以适用于多种连接池实现的通用模板,方便开发者快速集成和管理数据库连接。 首先,我们要理解数据连接池的工作原理。当应用程序启动时,连接池会预先初始化...
数据库查询通用类是一种在软件开发中常见的设计模式,它封装了对数据库的增删改查操作,使得在项目中调用这些操作时更加简洁、高效。这个类通常包含静态方法或者实例方法,允许开发者通过传入不同的参数来执行不同的...
本文将详细介绍如何在Java中建立数据库连接,以及如何利用连接池技术如C3P0来优化数据库操作。 首先,我们来看Java中的JDBC(Java Database Connectivity),它是Java平台的标准API,用于与各种数据库建立连接。...
本资源主要涵盖了Apache的Commons DBCP和Commons Pool这两个组件,它们是实现Java数据库连接池的常用工具。 1. **数据库连接池原理** - **资源共享**:数据库连接池预先创建一定数量的数据库连接,并将这些连接...
总的来说,Java的动态代理、反射机制和数据库连接池是Java开发中不可或缺的工具和技术,它们极大地增强了Java应用程序的灵活性、可维护性和性能。学习并熟练掌握这些技术,对于提升开发效率和代码质量具有重要意义。
### JDBC数据库操作通用类知识点详解 #### 一、概述 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC API既...
从给定的文件信息来看,我们正在探讨一个Java程序中用于连接数据库并调用存储过程的通用类——`BaseDaoOutput`。这个类是IT领域中处理数据库操作时经常使用的一种设计模式,它通过封装数据库连接、执行SQL语句、处理...
Java数据库通用层(通常称为JDBC连接池)是Java应用程序中用于管理数据库连接的重要组件。DBPool_v4.8.3_src是一个特定的数据库连接池的源代码版本,旨在提高数据库操作的性能和效率。在Java应用中,尤其是在高并发...
首先,mchange-commons-java-0.2.6.3.jar是Mchange Commons库的一部分,这个库包含了一些通用的工具类和辅助功能,为c3p0提供了基础支持,如线程管理、异常处理等。 c3p0-0.9.5-pre6.jar是c3p0的核心库,包含了...
本篇文章将深入探讨Java如何连接并操作数据库,包括基本的CRUD(Create、Read、Update、Delete)操作和不同的数据库连接方式。 首先,Java通过JDBC(Java Database Connectivity)API与各种数据库进行交互。JDBC是...
数据库连接池是Java应用程序中管理数据库连接的一种高效方式,它避免了每次建立和关闭数据库连接时的开销。本项目基于程序设计模式,利用Java语言实现了数据库连接池,旨在提高数据库操作的性能和效率。 首先,我们...
Druid 是阿里巴巴开源的一个强大、全面且高性能的Java数据库连接池。它不仅提供了基础的连接池功能,还集成了监控、SQL解析、拦截器等功能,可以帮助开发者进行性能分析和问题定位。Druid 还支持多种数据库,包括 ...
总之,Java数据库操作组件1.1是一个针对Java开发者的重要升级,它增强了数据库操作的灵活性和效率,简化了复杂数据类型的处理,提升了性能,并优化了错误处理,使得数据库编程变得更加得心应手。对于那些需要频繁与...
本文主要探讨了三种主流的Java数据库连接技术:JDBC、连接池以及Hibernate框架。 JDBC(Java Database Connectivity)是Java应用程序与各种数据库进行通信的标准接口。它允许开发者使用纯Java语言编写数据库应用...