| 全面解析JDBC(6) |
|
|
|
|
| 来源: 作者: 添加日期:2005-9-4 19:19:56 点击次数: |
|
全面解析JDBC(6) 基于JDBC有哪些数据库通用访问方法?
1. 通用数据库Bean设计
本实例中对数据库连接和执行SQL语句等通用数据库操作进行了封装,通过实现DBConnBean和DBQueryBean两个JavaBean来完成上述功能。其中DBConnBean负责Java应用程序和数据库的连接;DBQueryBean提供了一组执行标准SQL的功能,可以实现标准SQL完成的所有功能。其功能代码分别如下所示:
① DBConnBean.Java的源代码如下所示:
package dbaccess; import Java.sql.*; import Java.util.*; import Java.io.*; public class DBConnBean implements Serializable{
private String DBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; private String DBHost = "127.0.0.1"; private String DBName = "demo"; private String conp = "jdbc:odbc:db_demo"; private String username = ""; private String password = ""; private boolean xdebug = true;
public Connection con = null;
public String sql = null;
Statement stmt = null; public ResultSet result = null; private int affectedRows = 0;
public DBConnBean() { xdebug = true; con = null; sql = null; } public Connection Connect() throws Exception { String msg = null; try { Class.forName(DBDriver).newInstance(); } catch(Exception e) { msg = "加载数据库驱动失败"; if (xdebug) msg += "(驱动´"+DBDriver+"´)"; throw new Exception(msg); } try { String conStr = conp; con = DriverManager.getConnection(conStr,username,password); } catch(SQLException e) { msg = "!!数据库连接失败"; if (xdebug) { msg += "(错误信息=´" + e.getMessage()+"´ SQL状态值=´" + e.getSQLState()+"´ 错误代码=´" + e.getErrorCode()+"´)"; } throw new Exception(msg); } return con; } protected void finalize() throws Throwable { super.finalize(); if (stmt != null) stmt.close(); if (result != null) result.close(); } //最近一次对数据库查询受影响的行数 public int getAffectedRows() { return affectedRows; } public Connection getCon() { return con; } public String getConp() { return conp; } public String getDBDriver() { return DBDriver; } public String getDBName() { return DBName; } public boolean getDebug() { return xdebug; } public String getPassword() { return password; } public ResultSet getResult() { return result; } public String getSql() { return sql; } public String getUsername() { return username; } public void over() throws Throwable { finalize(); } public ResultSet query() throws Exception { result = null; affectedRows = 0; if (con == null) Connect(); if (stmt == null) stmt = con.createStatement(); if (sql.substring(0,6).equalsIgnoreCase("select")) { result = stmt.executeQuery(sql); } else { affectedRows = stmt.executeUpdate(sql); } return result; } public ResultSet query(String s) throws Exception { sql = s; return query(); } public void setDBDriver(String s) { DBDriver = s; } public void setDebug(boolean b) { xdebug = b; } public void setgetConp(String s) { conp = s; } public void setgetDBName(String s) { DBName = s; } public void setgetUsername(String s) { username = s; } public void setPassword(String s) { password = s; } public void setSql(String s) { sql = s; } } ② DBQueryBean.Java的源代码如下所示: package dbaccess; import Java.sql.*; import Java.util.*; import Java.io.*; import Java.lang.reflect.*;
public class DBQueryBean implements Serializable { DBConnBean dbc; String sql = null; int rowcount = 0; int colcount = 0; // int limitcount = 0; Vector result = null; public String _WATCH = "";
public DBQueryBean() { dbc = new DBConnBean(); try { dbc.Connect(); } catch(Exception e) { handleException(e); } } protected void finalize() throws Throwable { super.finalize(); if (dbc != null) dbc.over(); if (result != null) result.removeAllElements(); } public String get(int row, int col) { if (result==null || row >= result.size()) return null; String r[] = (String[])result.elementAt(row); if (col >= Java.lang.reflect.Array.getLength(r)) return null; return r[col]; } public int getAffRows() { return dbc.getAffectedRows(); } public int getColumncount() { return colcount; } public String[] getRow(int row) { if (result==null || row >= result.size()) return null; return (String [])result.elementAt(row); /*String ret[] = new String[colcount]; Vector r = (Vector)result.elementAt(row); for (int i=0; i<colcount; i++) ret[i] = (String)r.elementAt(i); return ret;*/ } public int getRowcount() { return rowcount; } public void handleException(Exception e) { _WATCH = e.getMessage(); } public void init() { rowcount = 0; colcount = 0; // limitcount = 0; result = null; } public void over() throws Throwable { finalize(); } public int query(String sql) { result = new Vector(); int ret = 0; try { ResultSet rs = dbc.query(sql); if (rs == null) { ret = dbc.getAffectedRows(); } else { ResultSetMetaData rm = rs.getMetaData(); colcount = rm.getColumnCount(); while (rs.next()) { String row[] = new String[colcount]; for (int i=0; i<colcount; i++) row[i] = rs.getString(i+1); result.addElement(row); rowcount++; } rs.close(); // to release the resource. ret = result.size(); } } catch(Exception e) { handleException(e); return -1; }
return ret; } }
(未完待续) |
|
| |