欢迎来到天天文库
浏览记录
ID:41010562
大小:41.50 KB
页数:6页
时间:2019-08-13
《JAVA操作数据库方式与设计模式应用》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JAVA操作数据库方式与设计模式应用1.在业务层使用JDBC直接操作数据库-最简单,最直接的操作1)数据库url,username,password写死在代码中Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();Stringurl="jdbc:oracle:thin:@localhost:1521:orcl";Stringuser="scott";Stringpassword="tiger";Connectionconn=DriverManager.getConnection(url
2、,user,password);Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);Stringsql="select*fromtest";ResultSetrs=stmt.executeQuery(sql);2)采用Facade和Command模式,使用DBUtil类封装JDBC操作;数据库url,username,password可以放在配置文件中(如xml,properties,ini等)。这种方法在小程序中应用较
3、多。2.DAO(DataAccessorObject)模式-松耦合的开始DAO=data+accessor+domainobject例如User类-domainobject(javabean)UserDAO类-accessor,提供的方法getUser(intid),save(Useruser)内包含了JDBC操作在业务逻辑中使用这两个类来完成数据操作。使用Factory模式可以方便不同数据库连接之间的移植。3.数据库资源管理模式3.1数据库连接池技术资源重用,避免频繁创建,释放连接引起大大量性能开销;更快的系统响应速度;通过实现JDBC的部分资源对象接口
4、(Connection,Statement,ResultSet),可以使用Decorator设计模式分别产生三种逻辑资源对象:PooledConnection,PooledStatement和PooledResultSet。一个最简单地数据库连接池实现:publicclassConnectionPool{privatestaticVectorpools;privatefinalintPOOL_MAXSIZE=25;/***获取数据库连接*如果当前池中有可用连接,则将池中最后一个返回;若没有,则创建一个新的返回*/publicsynchronizedConn
5、ectiongetConnection(){Connectionconn=null;if(pools==null){pools=newVector();}if(pools.isEmpty()){conn=createConnection();}else{intlast_idx=pools.size()-1;conn=(Connection)pools.get(last_idx);pools.remove(last_idx);}returnconn;}/***将使用完毕的数据库连接放回池中*若池中连接已经超过阈值,则关闭该连接;否则放回池中下次再使用*/pu
6、blicsynchronizedvoidreleaseConnection(Connectionconn){if(pools.size()>=POOL_MAXSIZE)try{conn.close();}catch(SQLExceptione){//TODO自动生成catch块e.printStackTrace();}elsepools.add(conn);}publicstaticConnectioncreateConnection(){Connectionconn=null;try{Class.forName("oracle.jdbc.driver.O
7、racleDriver").newInstance();Stringurl="jdbc:oracle:thin:@localhost:1521:orcl";Stringuser="scott";Stringpassword="tiger";conn=DriverManager.getConnection(url,user,password);}catch(InstantiationExceptione){//TODO自动生成catch块e.printStackTrace();}catch(IllegalAccessExceptione){//TODO自动生
8、成catch块e.printStackTrace();}catch
此文档下载收益归作者所有