首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

大家好。帮小弟我看看这个封装有什么缺陷。多谢

2011-12-31 
求助 大家好。帮我看看这个封装有什么缺陷。谢谢下面是我封装的数据库。。大家帮我看看。有什么缺陷。最好详细点

求助 大家好。帮我看看这个封装有什么缺陷。谢谢
下面是我封装的数据库。。大家帮我看看。有什么缺陷。最好详细点。谢谢各位帮我看看。。
package db;

import java.io.*;
import java.sql.*;

public class db {

  public String DBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  public String ConStr = "jdbc:odbc:shop";
  public String user = "sa";
  public String pw = "sa";
  Connection con = null;
  ResultSet rs = null;

  public String getStr(String s) {
  String str = s;
  try {
  byte b[] = str.getBytes("ISO-8859-1");
  str = new String(b);
  return str;
  } catch (Exception e) {
  return null;
  }
  }

  public String gb2iso(String qs) {
  try {
  if (qs == null) {
  return "NULL";
  } else {
  return new String(qs.getBytes("gb2312"), "iso-8859-1");
  }
  } catch (Exception e) {
  System.out.println("gb2iso error:" + e.getMessage());
  }
  return "NULL";
  }

  public void setDBDriver(String DBDriver) {
  this.DBDriver = DBDriver;
  }

  public String getDBDriver() {
  return DBDriver;
  }

  public void setConStr(String ConStr) {
  this.ConStr = ConStr;
  }

  public String getConStr() {
  return ConStr;
  }

  public void setuser(String user) {
  this.user = user;
  }

  public String getuser() {
  return user;
  }

  public void setpw(String pw) {
  this.pw = pw;
  }

  public ResultSet query(String sql) throws Exception {
  try {
  Class.forName(DBDriver).newInstance();
  con = DriverManager.getConnection(ConStr, user, pw);
  Statement st = con.createStatement();
  rs = st.executeQuery(sql);
  return rs;
  } catch (SQLException ex) {
  System.out.println("sql.executeQuery:" + ex.getMessage());
  }
  return null;
  }
public void Close()
  {
  try {
  con.close();
  } catch (SQLException ex) {
  }
  }
  public void update(String sql) throws Exception {
  try {
  Class.forName(DBDriver).newInstance();
  con = DriverManager.getConnection(ConStr, user, pw);
  Statement st = con.createStatement();
  st.executeUpdate(sql);
  con.close();
  st.close();
  } catch (SQLException ex) {
  System.out.println("sql.executeUpdate:" + ex.getMessage());
  }
  }
}


[解决办法]
要说缺陷的话。

1。Class.forName(DBDriver).newInstance(); 这个东西调用一次就可以了,每次都执行没啥意思。

2.你那些close()应该写在finally{}里保证关闭数据链接,要不前头的出了异常,这个链接就没法释放了

con和st的关闭错误也反了,先关闭st再关闭con

其他的暂时没看出来。
[解决办法]
在下初学:是不是可以把Class.forName(DBDriver).newInstance(); 
 con = DriverManager.getConnection(ConStr, user, pw); 


 Statement st = con.createStatement(); 
这三句写到一个public Statement getStmt()中,
然后在适当的地方调用。
public Statement getStmt(){
try{
Class.forName(DBDriver).newInstance(); 
con = DriverManager.getConnection(ConStr, user, pw); 
Statement st = con.createStatement(); 
}catch(Exception e){
return null;
}
return st;
}

[解决办法]
1.
Class.forName(DBDriver).newInstance();
 con = DriverManager.getConnection(ConStr, user, pw); 
放静态块
static {
Class.forName(DBDriver).newInstance();
 con = DriverManager.getConnection(ConStr, user, pw); 

}
2.
ResultSet 不能用全局的
3.
[你那些close()应该写在finally{}里保证关闭数据链接,要不前头的出了异常,这个链接就没法释放了 

con和st的关闭错误也反了,先关闭st再关闭con]引用楼上的
4.类名首字母大写。要遵守java规范阿,否则整合到java框架里可能会有问题。
5.为什么db类里面会有字符转换方法?类的职责不明。应该新建一个类,把这部分分离出去。
6.return "NULL"; ??????????????????????
return null;return "";或者比较好
7.return 语句尽量不要放在try里,这种写法不规范,因为如果finnally里也有会覆盖你try里的return
8.变量首字母小写,遵守规范
9.public String gb2iso(String qs) { 
try { 
if (qs == null) { 
return "NULL"; 
} else { 
return new String(qs.getBytes("gb2312"), "iso-8859-1"); 

} catch (Exception e) { 
System.out.println("gb2iso error:" + e.getMessage()); 

return "NULL"; 

对于绝对走不到的return 要避免。
10.貌似少了事务
11.gb2iso命名不规范
[解决办法]
query 应该写个回调,ResultSet也是需要关闭的啊.
[解决办法]
在下新手
楼主代码中的问题我也总犯啊
这部分代码应该属于Dao层的可以不写事务控制的吧
resultSet为什么不能是全局的呢 ?

热点排行