Dao
- 1:定义
(Data Access Object数据存储对象)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与(数据)数据库资源中间的访问 - 2:a案例
我这里是一个宠物的案例 ,只是在某个地方出现。其他的都是模板格式
1:DateUtil代码
package JDBC_dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* 数据库的链接类
* @author
* 需要做的是:
* 数据库的连接对象获取
* 开放资源的关闭
* 三个 链接 命令 结果集
*/
public class DateUtil {
// 链接数据库的对象
private static Connection conn=null;
private static String url="jdbc:mysql://127.0.0.1:3306/chongwu";
private static String user="root";
private static String password="1234";
/**
* 获得Connection对象,通过类名调用getConn方法
* @return 链接数据库的对象 conn
*/
public static Connection getConn() {
try {
if(conn==null) {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取 链接对象
conn=DriverManager.getConnection(url, user, password);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return conn;
}
/**
* 关闭所有释放资源
* @param conn
* @param state
* @param rs
*/
public static void clossAll(Connection conn,Statement state,ResultSet rs) {
try {
if(rs!=null) {
rs.close();
}
if(state!=null) {
state.close();
}
if(conn!=null) {
conn.close();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
2:Master类,然后用来继承
package JDBC_dao;
import Test_Master.Master;
import java.util.List;
/**
* 方法实现的声明都在
* @author
*
*/
public interface DaoMaster {
/**
* 做增删改查
* @param sql
* @return
* @throws Exception
*/
public int update(String sql)throws Exception;
/**
* 查询全部的信息的方法
* @param sql
* @return
* @throws Exception
*/
public List<Master> query(String sql)throws Exception;
/**
* 登录的方法
* @param sql
* @return
* @throws Exception
*/
public boolean login(String mname,String mpasswd)throws Exception;
}
3:具体增删改查代码(仅供参考)
package JDBC_dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import Test_Master.Master;
/**
* dao的实
* 现类
* @author
*
*/
public class DaoImplMaster implements DaoMaster {
private Connection conn=null;
private Statement state=null;
private ResultSet rs=null;
// 预编译命令
PreparedStatement ps=null;
@Override
public int update(String sql) throws Exception {
// TODO Auto-generated method stub
// 定义一个返回值
int line=0;//是获得的受影响的行数
try {
// 获得链接的对象
conn=DateUtil.getConn();
// 获得命令
state=conn.createStatement();
// 执行命令
line=state.executeUpdate(sql);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DateUtil.clossAll(conn, state, null);
}
return line;
}
@Override
public List<Master> query(String sql) throws Exception {
// TODO Auto-generated method stub
// 创建返回类型
List<Master> list=new ArrayList<Master>();
try {
// 获得连接对象
conn=DateUtil.getConn();
state=conn.createStatement();
//执行命令
rs=state.executeQuery(sql);
while(rs.next()) {
//每次都要新建一个对象,申请一个新的空间
Master m=new Master();
m.setMid(rs.getInt("mid"));
m.setMname(rs.getString("mname"));
m.setMpasswd(rs.getString("mpasswd"));
m.setMoney(rs.getInt("money"));
// 需要的放入集合中
list.add(m);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DateUtil.clossAll(conn, state, rs);
}
return list;
}
@Override
public boolean login(String mname,String mpasswd) throws Exception {
// TODO Auto-generated method stub
// 创建返回类型
boolean bl=false;
try {
conn=DateUtil.getConn();
String sql="select mname from master where mname=? and mpasswd=?";
ps=conn.prepareStatement(sql);
ps.setString(1, mname);
ps.setString(2, mpasswd);
rs=ps.executeQuery();
if(rs.next()) {
bl=true;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
DateUtil.clossAll(conn, state, rs);
}
return bl;
}
}