2、 DAO开发模式
在实际的开发中,对数据库的连接与关闭是一个最公共的部分,所以我们可以生成一个专门用于数据库连接的模块,建立一个com.test.util包,在下面建立一个DataBaseConnection类,如下:
package com.test.util;
import java.sql.*;
public class DataBaseConnection
{
//数据库驱动
String dbDriver = "org.gjt.mm.mysql.Driver";
//数据库连接字符串
String dbUrl = "jdbc:mysql://localhost:3306/test001";
//数据库用户名
String dbUName = "root";
//数据库用户密码
String dbUPassword = "root";
//声明一个数据库连接对象
Connection conn = null;
//在构造函数中打开数据库
public DataBaseConnection()
{
try
{
//加载数据库驱动
Class.forName(dbDriver).newInstance();
//连接数据库
conn = DriverManager.getConnection(dbUrl,dbUName,dbUPassword);
}
catch (Exception e)
{
e.printStackTrace();
}
}
//返回数据库连接
public Connection getConnection()
{
return this.conn;
}
//关闭数据库连接
public void closeConnection()
{
try
{
conn.close();
}
catch (Exception e )
{
e.printStackTrace();
}
}
}
然后再将对数据库表的操作剥离出来,建立一个专门用于定义操作方法的接口,建立一个com.test.dao包,下面建立一个PersonDao接口,如下
package com.test.dao;
//使用PersonVo类
import com.test.model.*;
public interface PersonDao
{
//登陆验证方法
public boolean isLogin(Person person);
}
对这个接口中定义的方法需要由一个实现类,建立一个com.test.dao.impl包,将对接口的实现建立一个实现类PersonDaoImpl,这个类需要集成接口PersonDao,如下:
package com.test.dao.impl;
import java.sql.* ;
import com.test.dao.* ;
import com.test.model.*;
import com.test.util.*;
public class PersonDaoImpl implements PersonDao
{
public boolean isLogin(Person person)
{
boolean flag = false;
//声明一个数据库预处理操作对象
PreparedStatement pstmt = null;
//声明一个结果集对象
ResultSet rs = null;
//声明一个SQL语句变量
String sqlStr = null;
//DataBaseConnection为具体的数据库连接和关闭类
DataBaseConnection dbc = null;
dbc = new DataBaseConnection();
sqlStr = "select name from person where id = ? and password = ?";
try
{
//实例化数据库操作对象
pstmt = dbc.getConnection().prepareStatement(sqlStr);
//设置pstmt参数的内容
pstmt.setString(1, person.getId());
pstmt.setString(2, person.getPassword());
rs = pstmt.executeQuery();
if(rs.next())
{
//有记录,执行此部分
pv.setName(rs.getString(1));
flag = true;
}
//依次关闭
rs.close();
pstmt.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
dbc.closeConnection();
}
return flag;
}
}
上面Dao文件中用到了一个Person对象,这就是我们所要操作的数据信息,也就是我们从用户提交的表单中所收集来的信息,与数据库中的一个表相对应,里面定义的就是一些属性和各个属性的Setter、Getter方法,一般建立一个com.test.model包,专门存放这样的JavaBean文件,如下:
package com.test.model;
public class Person
{
private String id;
private String name;
private String password;
//生成setter和getter方法
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return this.id;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
public void setPassword(String password)
{
this.password = password;
}
public String getPassword()
{
return this.password;
}
}
在JSP页面中我们并不直接调用这个对数据库操作的Dao类,而是通过一个工厂来封装、管理它,有这个工厂给我们生成一个Dao实例,然后我们通过工厂调用这个Dao,我们在建立一个com.test.factory包,存放管理Dao的工厂类,如下:
package com.test.factory;
import com.test.dao.*;
import com.test.dao.impl.*;
public class DaoFactory
{
public static PersonDao getPersonDaoInstance()
{
return new PersonDaoImpl();
}
}
最后我们在JSP页面中使用JavaBean的自省机制收集提交过来的表单数据,然后通过调用工厂来实现对数据库的操作,具体实现如下: