在JavaBean 中实现数据库操作的一点个人见解
2008-05-23 02:46
363 查看
google_ad_client = "pub-8800625213955058";
/* 336x280, 创建于 07-11-21 */
google_ad_slot = "0989131976";
google_ad_width = 336;
google_ad_height = 280;
//
JAVA作为较新编程语言,是公认的最具前途的一种,她的网络优势以及其平台无关性,使得建立分布式系统更简单易行,更由于她的出现,使Internet的作用从通信工具扩展到能够运行成熟应用系统的网络。那么是应用系统,不可避免的也许就是数据库。
使用JAVA编制Server端应用程序(B/S),与传统的C/S应用程序在连接数据库方面有着本质的区别.在传统的C/S应用程序中,用户在使用应用程序时是一个长连接,只有在用户退出在程序时,才断开这个连接;而B/S则不一样,它是基于Tcp/IP的一种无状态连接,用户在发一个请求后,Server响应并分配一个连接,当请求结束后,该连接随即失效,Server将根本不知道该连接是那个用户请求的,同样,用户在发下一个请求之前,也将根本不知道要连向哪个Server.正是由于这种区别,使得在程序的编制方面,两种系统有着不一样的原则,否则将可能出现完全不一样的效果!
下面,本人抛砖引玉,谈谈自己在这方面的一点点心得。
在进行数据库操作时,一般在Bean 中不要进行直接的数据库连接(包括引用其他方法来建立连接,即不要无中生有,只使用已存在的Connection 或者 Statement),更不应在构造函数中即生成一个连接,因为一个Bean有可能被多个应用程序引用,同样一个应用程序有可能引用多个Bean ,这样如果一个Bean 如上所述在构造函数中即生成一个连接,那么一个应用程序从开始到结束可能生成许多连接;
同样,在Bean 中的某个方法中也不应该直接建立连接;
那么应该如何在Bean 中进行数据库操作呢?
如果进行数据库查询,即使用Select 语句,可以在方法中直接使用一个Statement 参数。
如:
如果查询语句中有多个Select且嵌套,如
如果如上所述,两个Select 语句使用一个Statment ,那么将出错或者所得出的结果不正确。解决的方法,可以使用增加Statement 参数,以实现上述查询功能,但是使用增加Statement 参数的方法毕竟是有局限的,如果嵌套层数增加,Statement 参数也许也得跟着增加,这样对于程序的可扩张性是不利的,因为参数数量的不确定(即接口不确定),那么面向对象就没有意义了。
那么另外一种方法,就是直接传入Connection ,但是,如1 所述,不应在方法中直接引入,而是通过构造函数,或者单独一个方法来引入Connection(将该Connection 赋值给Bean中一个Connection 公共变量)。因为一般的应用程序,从开始到结束,不出意外一个Connection 就能完成所有工作,所以无需多次引入。
如:
如果SQL语句是对数据库的增、删、改等,那么可以引入一个Statement 来完成工作,因为不存在ResultSet 的问题,所有的操作都可以用一个Statement 来完成,同上(引用Connection 方法一样)可以使用构造函数或者单独一个方法来引入Statement (建议使用后一种,使用单独一个方法来引入,这样可以避免Connection 和Statement 都要引入的冲突)。
此外,对于数据库的增、删、改也可以,将所有的增、删、改的SQL语句放在一个Batch(批处理),最后执行这个Batch,方法如下:
最后,再重申一遍,这只是本人的一点体会,如有不妥望不吝啬教!
--------------------------------------------------------------------------------
/* 336x280, 创建于 07-11-21 */
google_ad_slot = "0989131976";
google_ad_width = 336;
google_ad_height = 280;
//
JAVA作为较新编程语言,是公认的最具前途的一种,她的网络优势以及其平台无关性,使得建立分布式系统更简单易行,更由于她的出现,使Internet的作用从通信工具扩展到能够运行成熟应用系统的网络。那么是应用系统,不可避免的也许就是数据库。
使用JAVA编制Server端应用程序(B/S),与传统的C/S应用程序在连接数据库方面有着本质的区别.在传统的C/S应用程序中,用户在使用应用程序时是一个长连接,只有在用户退出在程序时,才断开这个连接;而B/S则不一样,它是基于Tcp/IP的一种无状态连接,用户在发一个请求后,Server响应并分配一个连接,当请求结束后,该连接随即失效,Server将根本不知道该连接是那个用户请求的,同样,用户在发下一个请求之前,也将根本不知道要连向哪个Server.正是由于这种区别,使得在程序的编制方面,两种系统有着不一样的原则,否则将可能出现完全不一样的效果!
下面,本人抛砖引玉,谈谈自己在这方面的一点点心得。
在进行数据库操作时,一般在Bean 中不要进行直接的数据库连接(包括引用其他方法来建立连接,即不要无中生有,只使用已存在的Connection 或者 Statement),更不应在构造函数中即生成一个连接,因为一个Bean有可能被多个应用程序引用,同样一个应用程序有可能引用多个Bean ,这样如果一个Bean 如上所述在构造函数中即生成一个连接,那么一个应用程序从开始到结束可能生成许多连接;
同样,在Bean 中的某个方法中也不应该直接建立连接;
那么应该如何在Bean 中进行数据库操作呢?
如果进行数据库查询,即使用Select 语句,可以在方法中直接使用一个Statement 参数。
如:
public ResultSet getRS(Statement stmt,String sqltxt) { ResultSet rs=null; Try { rs=stmt.executeQuery(sqltxt); } catch(SQLException e){} return rs; } |
public String getS(Statement stmt,String sqltxt,String sqltxt1) { ResultSet rs=null; Try { rs=stmt.executeQuery(sqltxt); while(rs.next()) { ResultSet rs1=stmt.executeQuery(sqltxt1) If(rs1.next()) { String s1=rs.getString(1); String s2=rs1.getString(1); .............. } } } catch(SQLException e){} return rs; } |
那么另外一种方法,就是直接传入Connection ,但是,如1 所述,不应在方法中直接引入,而是通过构造函数,或者单独一个方法来引入Connection(将该Connection 赋值给Bean中一个Connection 公共变量)。因为一般的应用程序,从开始到结束,不出意外一个Connection 就能完成所有工作,所以无需多次引入。
如:
import java.sql.*; public class ClassName { Connection con1=null; public ClassName() { } public ClassName(Connection conn) { con1=conn; } public void getConn(Connection conn) { con1=conn; } public String getS(String sqltxt) { String s1=null; try { ...... } catch(SQLException e){} return s1; } ....... } |
此外,对于数据库的增、删、改也可以,将所有的增、删、改的SQL语句放在一个Batch(批处理),最后执行这个Batch,方法如下:
import java.sql.*; public class ClassName { Statement stmt=null; public ClassName() { } public void getStatement(Statement stmt_out) { stmt=stmt_out; } public String update(...) { String sqltxt="update tableName set....." } public String insert(...) { String sqltxt="insert into tableName (....)values(....)" } public String del(...) { String sqltxt="delete from tableName where ....." } public String mainPub() { stmt.addBatch(update(...)); stmt.addBatch(insert(...)); stmt.addBatch(del(...)); ..... stmt.executeBatch(); } } /code> |
--------------------------------------------------------------------------------
相关文章推荐
- 在JavaBean 中实现数据库操作的一点个人见解
- 一个javabean轻松实现对数据库的各种操作
- 一个javabean轻松实现对数据库的各种操作
- 一个javabean轻松实现对数据库的各种操作
- 一个javabean轻松实现对数据库的各种操作
- 通过javabean轻松实现对数据库的各种操作
- 基于ssm框架的个人博客(8)--Blog相关数据库操作实现
- Yii框架实现多数据库配置和操作的方法
- RxAndroid之操作数据库SqlBrite(RXAndroid实现数据库的增、删、改、查)
- android sqlite 数据库创建及增删改查的操作实现
- Java中如何实现每天定时对数据库的操作
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
- [置顶] java代码实现对数据库的备份操作
- 将数据库操作封装到Javabean
- 用JdbcTemplateTool配合JdbcTemplate实现更便捷的数据库操作
- 3.如何优化操作大数据量数据库(实现小数据量和海量数据的分页显示存储过程)
- 使用.net操作pcc的个人数据库代码
- Java通过代理类实现数据库DAO操作
- VC++控制台程序实现数据库操作
- php之根据自己实现的数据库类操作数据库