- 浏览: 613016 次
- 性别:
- 来自: 太原
文章分类
- 全部博客 (240)
- 程序员数学/线性代数(Linear Algebra) (2)
- 程序员数学/微积分(Calculus) (6)
- 机器学习(Machine Learning) (5)
- JAVA SE (63)
- JAVA EE (14)
- 数据库技术 (26)
- struts (4)
- 软件设计/设计模式 (0)
- ibatis (2)
- XML (4)
- 领域建模 (0)
- 数据资源共享 (1)
- 软件工程 (11)
- 技术以外 (6)
- 面向对象 (2)
- 科学数据共享 (1)
- 资源 (7)
- WEB2.0 (11)
- 电子商务 (10)
- 算法、数据结构、数学 (10)
- LAMP (1)
- 杂谈 (12)
- C语言 (7)
- 程序设计思想 (3)
- 读书和笔记 (1)
- 生活 健身 养生 (5)
- WEB UI (2)
- eclipse (2)
- 项目管理 (7)
- oracle (5)
- linux (1)
- webGIS (6)
最新评论
-
TimePower:
OK~终于明白了~~
参数(parameter)和属性(Attribute)的区别 -
OnTheRoad_lee:
不错,正式我想要的东西,一直不明白序列化是什么?有什么用?至此 ...
我对Java Serializable(序列化)的理解和总结 -
EchoZhouYou:
好久不上这,找这本书时发现这一篇,特意登录来赞一下
《程序设计语言——实践之路》读后感 -
yong7356:
学习一下Serializable
我对Java Serializable(序列化)的理解和总结 -
dengjm_2012:
写得不错!
我对Java Serializable(序列化)的理解和总结
转自:http://blog.csdn.net/axman/archive/2006/07/07/887843.aspx
JDBC初级应用实例(一)
在了解JDBC基础知识以后,我们先来写一个数据库操作的类(Bean)以后我们会
在这个类的基础上,随着介绍的深入不断提供优化的方案.
要把一个数据库操作独立到一个类(Bean)中,至少要考虑以下几个方面:
1.对于不同层次的应用,应该有不同的得到连结的方法,如果得到连结的方法要随
着应用层次的不同而改变,我们就应该把他独立成一个专门的类中,而把在任何应用层次
中都通用的处理方法封装到一个(类)Bean中.
2.既然考虑到既作为javaBean使用又可以用为一个普通类调用,要考虑到javaBean
的规范和普通类的灵活性.
3.对于特定的数据库操作不应封装到共性的(类)Bean中,而应该成为它的扩展类.
以上几点是充分考虑JAVA的面象对象的思想,经过深入的抽象形成的层次,下面我
们就按这个思想来设计:
一:定义一个用于连结的Bean,以后如果要在不同的应用中,如可以在J2EE中从
DataSource中得到连结,或从普通的连结池中得到连结,以及直接从DriverManager中得到
连结,只需修改本类中的得到连结的实现方法.
这个类就封装到这里,当然你可以在这儿增加业务方法,但如果要修改连结的实现,
整个类都要重新编译,因为业务方法和应用层次无关,代码一经生成不易变动,所以独立封装.
以下我们实现业务方法:
OK,我们已经实现了数据库常用操作的封装,注意这些业务方法都是把异常抛给调用者而没有用
try...catch来处理,你如果在这里处理了那么调用者则无法调试了.对于特定的数据库的特殊操作,不要封
装到此类中,可以再从这个类继承,或直接从ConnectionFactory类继承,当然最好是从这个业务类中继承,
这样不仅可以调用特殊方法也可以调用共性的业务方法,兴一个例子,我在应用Oracle时要把XML文件直接
存到数据数和把数据直接读取为XML文件,那么这两个方法只对Oracle才用到,所以:
现在,有了这样的几个"东西"在手里,你还有什么觉得不方便的呢?
虽然本处作为初级应用,但设计思想已经是JAVA高手的套路了,是不是有些自吹自擂了啊?
好的,休息一下吧.
JDBC初级应用实例(一)
在了解JDBC基础知识以后,我们先来写一个数据库操作的类(Bean)以后我们会
在这个类的基础上,随着介绍的深入不断提供优化的方案.
要把一个数据库操作独立到一个类(Bean)中,至少要考虑以下几个方面:
1.对于不同层次的应用,应该有不同的得到连结的方法,如果得到连结的方法要随
着应用层次的不同而改变,我们就应该把他独立成一个专门的类中,而把在任何应用层次
中都通用的处理方法封装到一个(类)Bean中.
2.既然考虑到既作为javaBean使用又可以用为一个普通类调用,要考虑到javaBean
的规范和普通类的灵活性.
3.对于特定的数据库操作不应封装到共性的(类)Bean中,而应该成为它的扩展类.
以上几点是充分考虑JAVA的面象对象的思想,经过深入的抽象形成的层次,下面我
们就按这个思想来设计:
一:定义一个用于连结的Bean,以后如果要在不同的应用中,如可以在J2EE中从
DataSource中得到连结,或从普通的连结池中得到连结,以及直接从DriverManager中得到
连结,只需修改本类中的得到连结的实现方法.
package com.imnamg.axman.beans; import java.sql.*; import .................. public class ConnectionFactory{ protected Connection conn; ConnectionFactory() throws SQLException { //构造方法中生成连结 //无论是从DataSource还是直接从DriverManager中取得连结. //先初始化环境,然后取得连结,本例作为初级应用,从 //DriverManager中取得连结,因为是封装类,所以要把异常抛 //给调用它的程序处理而不要用try{}catch(){}块自选处理了. //因为要给业务方法的类继承,而又不能给调用都访问,所以 //conn声明为protected conn = DriverManager.getConnection(url,user,passwd); } /** 在多线程编程中,很多时候有可能在多个线程体中得到同一连 结的引用,但如果在一个线程中关闭了连结,则另一个得到相同 引用的线程就无法操作了,所以我们应该加一个重新建立连结 的辅助方法,有人问为什么既然有这个辅助方法不直接调用这个 辅助而要在构造方法中生成连结?因为这样可以增加效率,如果 在构造时不能生成连结则就不能生成这个对象了,没有必要在 对象生成后再测试能不能生成连结. */ public void makeConnection(){ //此处的代码同构造方法,无论以后如果实现连结,都将构造方 //法的代码复制到此处. conn = DriverManager.getConnection(url,user,passwd); } }
这个类就封装到这里,当然你可以在这儿增加业务方法,但如果要修改连结的实现,
整个类都要重新编译,因为业务方法和应用层次无关,代码一经生成不易变动,所以独立封装.
以下我们实现业务方法:
package com.imnamg.axman.beans; import java.sql.*; import .................. public class DBOperater extends ConnectionFactory{ //private Statement stmt; //private ResultSet rs; //为什么要注释成员变量stmt和rs,基础部分已经说过,如果声明为成员变量, //在关闭conn时可以显示地先关闭rs和stmt,别的没有任何好处,而显示关 //闭只是说明你编程风格好,但综合考虑,我们要生成多个stmt或不是类型的 //stmt就不能声明为成员方法,否则引用同一对象,所以我们要业务方法中生 //成stmt对象.不仅可以同时处理多个结果集,还可以提高性能和灵活性. public ResultSet executeQuery(String sql) throws SQLException{ if(conn==null || conn.isClosed()) makeConnection(); Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); //对于一般的查询操作,我们只要生成一个可流动的结果集就行了. //而对于在查询时要更新记录,我们用另一个业务方法来处理,这样, //这样可以在普通查询时节省回滚空间. ResultSet rs = stmt.executeQuery(sql); return rs; } public ResultSet executeUpdatabledQuery(String sql) throws SQLException{ if (con == null || con.isClosed()) makeConnection(); Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLED); //可更新的结果结要更大的回滚空间,普通查询时不要调用这个方法 ResultSet rs = stmt.executeQuery(sql); return rs; } /** 基于同上的原因,在执行更新操作是我们根本不要任何回滚空间,所以建立 一个基本类型的stmt,实现如下 */ public int executeUpdate(String sql) throws SQLException{ if (con == null || con.isClosed()) makeConnection(); Statement stmt = con.createStatement(); //这个stmt在执行更新操作时更加节省内存,永远记住,能节省的时候要节省 //每一个字节的内存,虽然硬件设备可能会有很大的物理内存,但内存是给用 //户用的而不是给程序员用的(!!!!!!!!!!!!!!!!!!) int s = stmt.executeUpdate(sql); return s; } //以上实现了常用功能,还有两个通用的功能也是"共性"的,我们一起在这个封装类 //中实现: public PreparedStatement getPreparedStmt(String sql) throws SQLException{ if (con == null || con.isClosed()) makeConnection(); PreparedStatement ps = con.prepareStatement(sql); return ps; } public CallableStatement getCallableStmt(String sql) throws SQLException{ if (con == null || con.isClosed()) makeConnection(); PreparedStatement ps = con.prepareCall(sql); return ps; } //记住:对于封装类而言预编译语句和存储过程调用应该从连结中返PreparedStatement //和CallableStatement供调用者处理而不是返回它们的处理结果.也就是说封装类只封 //装了它们的连结过程.最后再次声明,一定要有一个close()方法供调用者调用,而且告 //诉调用者无论如果要调用这个方法: public void close() throws SQLException{ if(conn != null && !conn.isClosed()) conn.close(); } //这个方法最好放在ConnectionFactory中,这样可以直接调用来只测试连结.而不用再 调用子类来关闭 }
OK,我们已经实现了数据库常用操作的封装,注意这些业务方法都是把异常抛给调用者而没有用
try...catch来处理,你如果在这里处理了那么调用者则无法调试了.对于特定的数据库的特殊操作,不要封
装到此类中,可以再从这个类继承,或直接从ConnectionFactory类继承,当然最好是从这个业务类中继承,
这样不仅可以调用特殊方法也可以调用共性的业务方法,兴一个例子,我在应用Oracle时要把XML文件直接
存到数据数和把数据直接读取为XML文件,那么这两个方法只对Oracle才用到,所以:
package com.inmsg.axman.beans; import java.sql.*; import oracle.xml.sql.query.OracleXMLQuery; import oracle.xml.sql.dml.OracleXMLSave; public class OracleDBOperater extends DBOperater{ public OracleXMLQuery getOXQuery(String sql,String table) throws Exception { OracleXMLQuery qry = new OracleXMLQuery(con,sql); qry.setRowsetTag(table); qry.setRowTag("RECORD"); return qry; } public int insertXML(String path,String table) throws Exception { OracleXMLSave sav = new OracleXMLSave(con,table); URL url = sav.createURL(path); sav.setRowTag("RECORD"); int x = sav.insertXML(url); sav.close(); return x; } }
现在,有了这样的几个"东西"在手里,你还有什么觉得不方便的呢?
虽然本处作为初级应用,但设计思想已经是JAVA高手的套路了,是不是有些自吹自擂了啊?
好的,休息一下吧.
发表评论
-
Drools JBPM区别
2011-03-21 18:02 1794参考资料: 1、http://www.simpleframew ... -
推荐web开发教材
2009-11-25 13:00 1414大家能否给推荐一本 用JAVA语言相关的WEB开发方面的教材。 ... -
JAVA 线程编程 ----两个线程程序
2009-11-20 13:08 2116Java的内置线程支持 关 ... -
JAVA 线程编程 ----什么时候多线程可能不好(When Multiple Threads Might Not Be Good)
2009-11-13 12:59 1243设计程序时候创建更多的线程不总是一个好主意。线程不是免费的;它 ... -
JAVA 线程编程 ----为什么要用多线程(Why Use Multiple Thread)
2009-11-11 15:51 3367许多情况下,在一个程 ... -
JAVA 线程编程 ----线程介绍
2009-11-10 14:59 1253概述 浏览网页时,当 ... -
DataSource data source JNDI之间的关系
2009-09-16 17:01 2367data source :所谓data source就 ... -
字符,字节和编码三者的关系
2009-06-03 23:17 0http://www.regexlab.com/zh/enco ... -
jasperreport
2009-05-04 14:17 0http://www.docstoc.com/docs/213 ... -
iReport设计报表以Excel格式导出时注意的问题
2009-04-23 15:08 7212刚开始使用iReport工具,没想到就遇到了问题: 在以Exc ... -
到主机 的 TCP/IP 连接失败,达到最大连接数
2009-04-23 14:35 4429问题描述: _______________ ... -
Acegi框架介绍
2009-03-30 23:57 1500转自:这里 灰色字体 ... -
对语言的一些理解
2008-05-06 17:54 1461语言的本质 包 ... -
HOW TO DESIGN PROGRAMS
2008-04-21 09:55 1701http://www.htdp.org ·前言 向儿童传 ... -
AOP 入门好文章
2008-04-18 18:42 1447http://dev.rdxx.com/Java/2005-0 ... -
Head First JSP &Servlet读后感------chapt01
2008-01-02 22:50 2049Web程序和普通的GUI程序 ... -
JNDI资料整理
2007-12-26 16:38 1308******************************* ... -
JDBC初级应用实例(二) 转
2007-12-25 09:35 1235转自:http://blog.csdn.net/axman/a ... -
JDBC基础(四)转
2007-12-25 09:07 1280转自:http://blog.csdn.net/axman/a ... -
JDBC基础(三) 转
2007-12-24 18:49 1403转自:http://blog.csdn.net/a ...
相关推荐
是对之前讲的jdbc初级应用,讲解一些实例
### Java JDBC 初级知识点详解 #### 一、JDBC体系结构及操作步骤 ##### JDBC体系结构 JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,是一套用于执行SQL语句的...
Java初级开发实例主要涵盖了几大核心领域:JDBC(Java Database Connectivity)、JSP(Java Server Pages)、Servlet以及Structs框架的使用。这些都是Java Web开发的基础,对于初学者来说,掌握这些技术是成为合格的...
在使用这些jar包进行Spring JDBC开发时,开发者通常会创建一个配置文件(如`applicationContext.xml`),配置数据源、事务管理器等,并定义JdbcTemplate实例。然后,通过注入JdbcTemplate,就可以在Service或DAO层...
标题中的“jdbc的入门小程序”意味着这是一个初级教程,适合初学者学习JDBC的基础知识。可能包含简单的数据库连接、数据查询和事务处理等内容。 描述中提到有一个“jdbc.avi”的视频文件,这可能是作者录制的一个...
标题“day01_jdbc_consumer_”暗示了我们即将探讨的是关于Java数据库连接(JDBC)的初级内容,特别是从消费者或使用者的角度出发。描述中提到的“基础语法等等jdbc接口”表明我们将深入理解JDBC的基本操作和常用接口...
### NIT-Pro初级软件工程师(Java)案例题知识点解析 #### 一、考试概况与要求 **考试科目**: 初级软件工程师(Java) **考试时间**: 6小时 **考试说明**: - 本试卷案例包含两个任务,考生需完成其中一个。 - ...
在本初级学习案例中,我们将深入理解Ibatis的基本概念、核心组件以及如何在实际项目中应用。 Ibatis的主要优势在于其灵活性,它允许开发者编写自定义的SQL,控制参数绑定,以及处理结果集,这些都比传统的JDBC更为...
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。 初级准备 初级准备包括JDK、Tomcat(Web服务器)、MySQL(数据库)、JDBC(连接数据库)、Eclipse...
11. **Web容器**:Web容器(如Tomcat)负责管理Web应用的生命周期,包括加载、实例化、部署和卸载Web组件。 12. **Maven或Gradle**:这两种是常用的构建工具,用于自动化Java项目的构建、依赖管理和打包过程。 13....
### NIT-Pro初级软件工程师(Java)案例题知识点解析 #### 一、考试概况与要求 **考试科目:** 初级软件工程师(Java) **考试时间:** 6小时 **考试说明:** 1. **任务分配:** 本案例考试包含两个任务,每位...
【Java初级编程实例详解】 Java作为一种广泛使用的编程语言,对于初学者来说,通过实例学习是掌握其基础知识的有效途径。这个压缩包中包含了几十个小程序,涵盖了各种算法和实现,为初学者提供了丰富的学习资源。接...
KingSCADA初级培训教程主要涵盖了如何与关系数据库建立连接、使用数据集函数查询KingSCADA的历史库数据、理解和应用数据模型以及解决系统中常见的问题。这个教程是针对初学者设计的,旨在帮助他们快速掌握KingSCADA...
"基于Java的一个较初级的EJB商业应用的例子.zip"这个压缩包可能包含了一个简单的EJB项目,可能涵盖了会话Bean的使用、数据库连接(JDBC或JPA)、以及Web层(Servlet或JSP)的集成。通过这个例子,你可以学习如何在...
Java编程语言,作为全球最广泛使用的编程语言之一,其丰富的特性和强大的功能使其在软件开发领域占据了重要地位。"Java2技能白练"是专为Java初学者和进阶者设计的一套实战教程,旨在通过一系列经典实例,帮助学习者...
【程序员从初级到高级知识汇集】是一本涵盖了程序员从入门到精通所需掌握的全面知识的资料集合。本书针对初级和高级程序员,旨在提供一个系统化的学习路径,帮助程序员提升技能,成为行业专家。 1. **Java知识** -...
本文档是在培训期间做的一份mysql笔记。从启动mysql数据库,到mysql常用sql的使用和数据库事务的划分,最后使用java语言创建了一个自己的jdbc连接池。
10. **数据库与JDBC**:掌握SQL语言,理解关系型数据库原理,熟练使用JDBC进行数据库操作,包括连接池的配置与使用。 11. **网络编程**:讲解TCP/IP协议基础,HTTP协议,以及Socket编程,为网络应用开发打下基础。 ...
Java初级工程师面试题合集是为那些准备踏入Java软件开发领域的求职者量身打造的一份宝贵的资源。这个最新的版本包含了自2014年以来不断更新和完善的面试问题,旨在帮助应聘者在面对笔试和面试时能更加自信和从容。...
"初级软件开发工程师考试大纲" 本考试大纲涵盖了 Java 软件开发工程师所需的知识和...初级工程师考试首先进行的是 6 小时的案例考试部分。考生独立完成一个小型的真实项目,以评估其实际编程能力和解决问题的能力。