1、创建数据库连接类DataBaseConnection.java
package web_project;
import java.sql.*;
//主要功能就是连接数据库、关闭数据库
public class DataBaseConnection {
//定义数据库驱动类
private final String DBDRIVER ="com.mysql.jdbc.Driver";
//定义数据库URL
private final String DBURL="jdbc:mysql://192.168.83.128:3306/testdb";
//定义数据库连接用户名
private final String DBUSER="root";
//定义数据库连接密码
private final String DBPASSWORD="zch0302";
//定义数据库连接对象
private Connection conn=null;
//构造方法,加载驱动
public DataBaseConnection(){
try{
Class.forName(DBDRIVER);
this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
}
catch(Exception e){
System.out.println("加载驱动失败");
}
}
//取得数据库连接
public Connection getConnection(){
return conn;
}
//关闭数据库连接
public void close(){
try{
conn.close();
}catch(Exception e){
System.out.println("数据库连接关闭失败");
}
}
}
2、创建VO类,User.java
VO类是一个包含属性和表中字段完全对应的类,并在该类中提供setter和getter方法设置并获得该类中的属性。
package web_project;
public class User {
private int userid;
private String username;
private String password;
public int getUserid(){
return userid;
}
public void setUserid(int userid){
this.userid=userid;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username=username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password=password;
}
}
3、创建DAO接口类,UserDAO.java
DAO接口中定义了所有用户的操作,如添加记录、删除记录及查询记录。
不过因为是接口,所以仅仅是定义,需要子类来实现。
package web_project;
import java.util.*;
public interface UserDAO {
public void insert(User user) throws Exception;
public void update(User user) throws Exception;
public void delete(int userid) throws Exception;
public User queryById(int userid) throws Exception;
public List queryALL() throws Exception;
}
4、创建DAO接口实现类,UserDAOImpl.java
DAO实现类实现了DAO接口,并实现了DAO接口中定义的所有方法。
在DAO实现中通过连接数据库进行数据库操作。
package web_project;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import web_project.User;
public class UserDAOImpl implements UserDAO{
//添加操作
public void insert(User user) throws Exception{
String sql="INSERT INTO user(username,password) VALUES(?,?)";
PreparedStatement pstmt =null;
DataBaseConnection dbc=null;
//下面是针对数据库的具体操作
try{
//连接数据库
dbc=new DataBaseConnection();
pstmt=dbc.getConnection().prepareStatement(sql);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
//进行数据库更新操作
pstmt.executeUpdate();
pstmt.close();
}catch (Exception e){
throw new Exception("操作出现异常");
}
finally{
//关闭数据库连接
dbc.close();
}
}
//修改操作
public void update(User user) throws Exception{
String sql="UPDATE user SET username=?,password=? Where userid=?";
PreparedStatement pstmt=null;
DataBaseConnection dbc=null;
//下面是针对数据库的具体操作
try{
//连接数据库
dbc = new DataBaseConnection();
pstmt = dbc.getConnection().prepareStatement(sql);
pstmt.setString(1, user.getUsername());
pstmt.setString(2, user.getPassword());
pstmt.setInt(3, ((web_project.User) user).getUserid());
//进行数据库更新操作
pstmt.executeUpdate();
pstmt.close();
}
catch(Exception e){
throw new Exception("操作出现异常");
}
finally{
//关闭数据库连接
dbc.close();
}
}
//按ID查询
public User queryById(int userid) throws Exception{
User user = null;
String sql="SELECT * FROM user WHERE userid=?";
PreparedStatement pstmt = null;
DataBaseConnection dbc = null;
//下面是针对数据库的具体操作
try{
//连接数据库
dbc=new DataBaseConnection();
pstmt = dbc.getConnection().prepareStatement(sql);
pstmt.setInt(1, userid);
//进行数据库查询操作
ResultSet rs=pstmt.executeQuery();
if(rs.next())
{
//查询出内容,之后将查询出的内容赋值给user对象
user = new User();
user.setUserid(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
}
rs.close();
pstmt.close();
}catch(Exception e){
throw new Exception("操作出现异常");
}
finally{
//关闭数据库连接
dbc.close();
}
return user;
}
public List<User> queryAll() throws Exception{
List<User> all =new ArrayList<User>();
String sql="SELECT * FROM user";
PreparedStatement pstmt=null;
DataBaseConnection dbc=null;
//下面是针对数据库的具体操作
try{
//连接数据库
dbc =new DataBaseConnection();
pstmt=dbc.getConnection().prepareStatement(sql);
//进行数据库查询操作
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
//查询出内容,之后将查询出的内容赋值给user 对象
User user = new User();
user.setUserid(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
//将查询出来的数据加入到List对象之中
all.add(user);
}
rs.close();
pstmt.close();
}
catch(Exception e){
throw new Exception("操作出现异常");
}
finally{
//关闭数据库连接
dbc.close();
}
return all;
}
@Override
public void delete(int userid) throws Exception {
// TODO Auto-generated method stub
}
@Override
public List queryALL() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
5、创建DAO工厂类,DAOFactory.java
在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作。
这时就必须知道具体的子类,对于后期的修改非常不便。如后期需要创建一个操作Oracle的DAO实现类,这时就必须修改所有使用DAO实现类的代码。
可以通过该DAO工厂类的一个静态方法来获得DAO实现类实例。这时如果需要替换DAO实现类,只需修改该DAO工厂类中的方法代码,而不必修改所有的操作数据库代码。
package web_project;
public class DAOFactory {
public static UserDAO getUserDAOInstance(){
return new UserDAOImpl();
}
}
6、创建UserDAODemo.jsp来演示DAO完成数据库操作
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<%@ page import="web_project.*" %>>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>使用DAO完成数据库操作</title>
</head>
<body>
<!-- 添加记录 -->
<%
//通过DAO工厂获得DAO实现类实例
UserDAO userDAO =DAOFactory.getUserDAOInstance();
//设置需要添加的用户
User user = new User();
user.setUsername("dao");
user.setPassword("1234");
userDAO.insert(user);
%>
<!-- 更新记录 -->
<%
//通过DAO工厂获得DAO实现类实例
UserDAO userDAO1 =DAOFactory.getUserDAOInstance();
//设置需要更新的用户
User user1 = new User();
user1.setUserid(4);
user1.setUsername("zch");
user1.setPassword("12345");
//执行更新操作
userDAO1.update(user);
%>
<!-- 删除记录 -->
<%
//通过DAO工厂获得DAO实现类实例
UserDAO userDAO2 = DAOFactory.getUserDAOInstance();
//执行删除操作
userDAO2.delete(4);
%>
<!-- 按ID查询 -->
<%
//通过DAO工厂获得DAO实现类实例
UserDAO userDAO3 = DAOFactory.getUserDAOInstance();
//指定按ID查询
User user3 = userDAO.queryById(4);
out.println("用户名"+user3.getUsername()+"<br>");
out.println("密码"+user3.getPassword());
%>
</body>
</html>