当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > JAVA > 数据库 > 正文

对一个简单的JDBC包装器的扩展及应用(1)

http://www.zk168.com.cn  招考学习网 2006-4-11 2:13:59
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
对一个简单的JDBC包装器的扩展及应用(1)

本文将对《一个简单的 JDBC 包装器》中的JDBC包装器进行一些扩展,然后介绍一下其在jsp+javabean开发模式中的应用。
最近看了《一个简单的 JDBC 包装器》,觉得这篇文章很有应用价值,我便在自己的开发中使用了它,不过这个包装器也存在一些不足,于是我对它进行了一些扩展。首先原文中的Table类缺少删除功能,我便增加了删除功能。代码如下:
public void delRow(Row row) throws SQLException {
String ss="";

ss = "delete from "+name+" where ";

for (int i=0; i<row.length(); ++i) {
String k = row.getKey( i );
String v = row.get( i );
ss += k+"=´"+v+"´";
if (i != row.length()-1)
ss += " and ";
}
Connection con = database.getConnection();
Statement st = con.createStatement();
st.executeUpdate( ss );
}
public void delRow(String conditions)throws SQLException {
String ss="";
ss = "delete from "+name+" where ";
ss +=conditions;
Connection con = database.getConnection();
Statement st = con.createStatement();
st.executeUpdate( ss );
}

这两个函数分别用于删除一个Row和满足一定条件的记录。对于具有主关键字的表,我们可以用下面代码中的方法二来进行删除,如果没有主关键字,我们可以用方法一删除。

示例如下:
//方法一
Row e = table.getRow( "id=2001" );
table.delRow(e);
//方法二
table.delRow("id=2001");

另外这个包装器没有对查询结果为NULL的情况作处理,我通过修改Table类的execute函数和RowSet类的get函数对这种情况作了处理。具体代码见附件。

下面谈谈利用这个JDBC包装器实现对数据库的封装,假定我们有一个表:student,创建表的Sql语句如下:
create table student(
id varchar(10) not null primary key,
name varchar(16) not null,
sex char(2) not null,
password varchar(16) not null,
department varchar(32) not null
)

我们对这个表进行封装,下面是Student类的主要代码:
public class Student{

private Row r;

public Student() {
r=new Row();
}
public Student(Row row) {
this.r=row;
}
private Table getTable() {
Database db =
new Database( "jdbc:mysql://localhost:3306/manger",
"zf", "zf" );
return db.getTable("student");
}

public void setName(String name){
r.put("name",name);
}
public void setPassword(String pass){
r.put("password",pass);
}
public void setId(String number){
r.put("id",number);
}
public void setDepart(String depart){
r.put("department",depart);
}
public void setSex(String sex){
r.put("sex",sex);
}
public String getName(){
return r.get("name");
}
public String getPassword(){
return r.get("password");
}
public String getId(){
return r.get("id");
}
public String getDepart(){
return r.get("department");
}
public String getSex(){
return r.get("sex");
}
/**
*condition表示限制条件,如果为空,则插入新记录,否则更新记录
*/
public void save(String conditions) throws SQLException{
if(conditions==null)
{getTable().putRow(r);}
else
getTable().putRow(r,conditions);

}
/**
*由于id作为主关键字,所以我们使用字符串为参数的delRow()函数
*/
public void delete()throws SQLException{
//getTable().delRow(this.r);
String conditions="";
conditions = "id=" + "´"+getId()+"´";
getTable().delRow(conditions);
}
}

下面这个类是相应的一个查询类的主要代码:
public class StudentFactory{
public static Student findStudentById(String id)
throws SQLException{
Row r=getTable().getRow("id="+id);
if(r==null)
return null;
else
return new Student(r);
}
public static Student[] findAllStudents()
throws SQLException{
RowSet rs=getTable().getRows("1>0");
if (rs==null)
return null;
else
Student[] stu=null;
stu=new Student[rs.length()];
for(int i=0;i<rs.length(); i++){
stu[i]=new Student(rs.get(i));
}
return stu;
}
}

(未完,待续)
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·21世纪以煤和天然气为原料的C1化学
·BOG压缩机在液化石油气基地的应用
·OECD主要国家软件业发展概况
·英美CPA管理模式及其启示
·沙角C电厂事故顺序记录的通道组态分析及整改
·LFCB-102型微波分相差动保护的应用
·沙角C电厂厂用电结线分析
·基于PB6和ORACLE8开发“劳动信息管理系统”
·利用TDC组件实现对WEB页面的交互操作
·TCP/IP在网络中的高效配置
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>