下面是我封装的数据库。。大家帮我看看。有什么缺陷。最好详细点。谢谢各位帮我看看。。
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());
}
}
}
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());
}
}
}
解决方案 »
- 求ext js 的模式窗口!急!急!!!
- 我是菜鸟,问一个简单的问题
- 证书
- request.getRequestDispatcher("").forward(req, rep);与response.sendRedirect("xx.html");的区别
- SOS: 如何用jacob或POI在jsp页面中打开及编辑WORD,最好给个例子(急)
- 欢迎加入java群8975187
- 如何将jsp页面 以word 文档的形式保存到本地
- TOMCAT-->WebSphere迁移错误,JavaBean找不到。
- jdbc版本问题,向各位求助,兄弟真的很急!在线!
- 这个问题该如何解决?
- 使用jsp保存一个xml文件到磁盘
- 常見的協議閱讀條款 請問下面同意,不同意如何 操作??
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;
}
Class.forName(DBDriver).newInstance();
con = DriverManager.getConnection(ConStr, user, pw);
放构造函数中
Statement st = con.createStatement();
这句只读一次行吗?不可以吧。。
大家还有什么好意见。谢谢楼上的建议。
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命名不规范
楼主代码中的问题我也总犯啊
这部分代码应该属于Dao层的可以不写事务控制的吧
resultSet为什么不能是全局的呢 ?
比如“[你那些close()应该写在finally{}里保证关闭数据链接,要不前头的出了异常,这个链接就没法释放了 ”
我不知道查询的那个函数里。最后st con怎么释放?我闹不明白。好像网站因为这个类出了好多错。各们帮帮我。。
是不是我要是不关的话。很容易出错?
Result rs = ......;
try {
// rs调用等
} catch(Exception e) {
// 异常处理等
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException ex) {
//Log处理等
//System.out.println("sql.executeUpdate:" + ex.getMessage());
}
}
// 注意,这里statement对象生成了resultset对象,所以关闭的顺序如下(从左到右)result->statement->connection(如果有的话),这是hibernate内部的实现方法,也是jdbc的经典写法。
if (st != null) {
try {
st.close();
} catch (SQLException ex) {
//Log处理等
//System.out.println("sql.executeUpdate:" + ex.getMessage());
}
}
}