这个类我本是在参加学校网页设计大赛时写的.现在稍加修改借以讨论有关JSP数据库访问优化的问题.类的内容如下,这个类在不修改任何代码的情况下适用于MSSQL/MYSQL/ACCESS数据库的联接和基本操作. package mxzc.web.dbctrl; import java.sql.*; public final class SQLDBCtrl {/********************************************* public SQLDBCtrl(String usr,String pwd,String cnstr,String derv) public synchronized ResultSet selects(String sql) public synchronized void updates(String sql) public synchronized void adddels(String sql) 数据库操作的函数. **********************************************/ private String usr; private String pwd; private String cnstr; private String derv; private bool canuse; public SQLDBCtrl(String usr,String pwd,String cnstr,String derv)throws SQLException { this.usr=usr; this.pwd=pwd; this.cnstr=cnstr; this.derv=derv; this.canuse=true; try { Class.forName(derv); } catch(ClassNotFoundException e) { this.canuse=false; System.out.println("请确定"+derv+"类所对应的包已包含进程序的环境变量内."); e.toString(); } } public SQLDBCtrl()throws SQLException { //这里是一个空的构造,这个构造可能产生问题.... this.canuse=false; } public String getUsr(){return this.usr;} public String getPwd(){return this.pwd;} public String getCnstr(){return this.cnstr;} public String getDerv(){return this.derv;} public void setUsr(String usr){this.usr=usr;} public void setPwd(String pwd){this.pwd=pwd;} public void setCnstr(String cnstr){this.cnstr=cnstr;} public void setDerv(String derv) {//属性Derv对本类实例的可用性有重要意义. /* 只有Derv被赋值后,这个实例才可操作.因为这里需要加载数据库的驱动. 为了防止一个没有加载数据库驱动的实例被使用,我设置了一个Canuse属性. 只有该属性为真时,这个实例才真正的可操作. */ this.canuse=true; this.derv=derv; try { Class.forName(derv); } catch(ClassNotFoundException e) { this.canuse=false; System.out.println("请确定"+derv+"类所对应的包已包含进程序的环境变量内."); e.toString(); } } public bool getCanuse() {//是否可进行数据库操作?在操作的数据库操作之前最好是执行一下.以防出错. return canuse; } public synchronized ResultSet selects(String sql)throws Exception { Connection conn=null; Statement stmt=null; ResultSet rs=null; conn=DriverManager.getConnection(cnstr,usr,pwd); stmt=conn.createStatement(); rs=stmt.executeQuery(sql); return rs; } public synchronized void updates(String sql)throws Exception { Connection conn=null; Statement stmt=null; conn=DriverManager.getConnection(cnstr,usr,pwd); stmt=conn.createStatement(); stmt.executeUpdate(sql); if(stmt!=null)stmt.close(); if(conn!=null)conn.close(); stmt=null; conn=null; } public synchronized void adddels(String sql)throws Exception { Connection conn=null; Statement stmt=null; conn=DriverManager.getConnection(cnstr,usr,pwd); stmt=conn.createStatement(); stmt.execute(sql); if(stmt!=null)stmt.close(); if(conn!=null)conn.close(); stmt=null; conn=null; } public static void main(String args[])throws Exception { System.out.println(""); System.out.println("************************************************"); System.out.println(" 包名: mxzc.web.dbctrl"); System.out.println(" 类名: SQLDBCtrl"); System.out.println(" 特性: 最终类,线程安全"); System.out.println(" 没有默认构造函数只能有参构造"); System.out.println(" 作者: 梦醒之初/可心"); System.out.println(" 版本: 1.10(Update)"); System.out.println("************************************************"); //内部测试用SQLDBCtrl a=new SQLDBCtrl("","","jdbc:odbc:jspbbs","sun.jdbc.odbc.JdbcOdbcDriver"); } } 在JSP网站中的期望使用方式: |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-30 01:33 , Processed in 0.164242 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.