使用普通MVC时这样来写我们的dao(数据库访问对象)

以下是jdbc的封装

package com.cyws.util;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class DB {
 private Connection con;
 private PreparedStatement pstm;
 private static String user;
 private static String password;
 private static String url;
 private static String dbDriver;
 
 /** 获取数据库的各个值  */
 static{
  Properties pros = new Properties();
  try {
   pros.load(DB.class.getResourceAsStream("db.properties"));
   user = pros.getProperty("username");
   password = pros.getProperty("password");
   url = pros.getProperty("url");
   dbDriver = pros.getProperty("dbDriver");
  } catch (IOException e1) {
   e1.printStackTrace();
  }
  try {
   Class.forName(dbDriver);
  } catch (ClassNotFoundException e) {}
 }
 
 /** 构造方法,在该方法中加载数据库驱动  */
 public DB(){
  try{
   Class.forName(dbDriver);
  }catch(ClassNotFoundException e){
   System.out.println("加载数据库驱动失败!");
   e.printStackTrace();
  }
  
 }

 /**创建数据库连接*/
 public Connection getCon(){
  if(con==null){
   try {
    con=DriverManager.getConnection(url,user,password);
    System.out.println("数据库连接成功");
   } catch (SQLException e) {
    System.out.println("创建数据库连接失败!");
    con=null;
    e.printStackTrace();
   }   
  }
  return con;
 }
 
 /**
  *@功能:对数据库进行增、删、改、查操作
  *@参数:sql为SQL语句;params为Object数组,里面存储的是为sql表示的SQL语句中"?"占位符赋值的数据
  */
 public void doPstm(String sql,Object[] params){
  if(sql!=null&&!sql.equals("")){
   if(params==null)
    params=new Object[0];   
   this.getCon();
   if(con!=null){
    try{  
     System.out.println(sql);
     pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
     for(int i=0;i<params.length;i++){
      pstm.setObject(i+1,params[i]);
     }
     pstm.execute();
    }catch(SQLException e){
     System.out.println("doPstm()方法出错!");
     e.printStackTrace();
    }    
   }   
  }
 }
 
 /**
  * @功能:获取调用doPstm()方法执行查询操作后返回的ResultSet结果集
  * @返回值:ResultSet
  * @throws SQLException
  */
 public ResultSet getRs() throws SQLException{
  return pstm.getResultSet();  
 }
 /**
  * @功能:获取调用doPstm()方法执行更新操作后返回影响的记录数
  * @返回值:int
  * @throws SQLException
  */
 public int getCount() throws SQLException{
  return pstm.getUpdateCount();  
 }
 /**
  * @功能:释放PrepareStatement对象与Connection对象
  */
 public void closed(){
  try{
   if(pstm!=null)
    pstm.close();   
  }catch(SQLException e){
   System.out.println("关闭pstm对象失败!");
   e.printStackTrace();
  }
  try{
   if(con!=null){
    con.close();
   }
  }catch(SQLException e){
   System.out.println("关闭con对象失败!");
   e.printStackTrace();
  }
 }
 
 public static void main(String args[])
 {
  new DB().getCon();
 }
}

以下是我们的dao层

package com.cyws.dao;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.cyws.util.DB;
import com.cyws.util.Page;
import com.cyws.util.QueryResult;

public class BaseDaoSuport<T>{
 private DB mydb = null;
 private static BaseDaoSuport baseDaoSuport = null;
 
 static{
  if(baseDaoSuport==null){
   baseDaoSuport = new BaseDaoSuport();
  }
 }

 public BaseDaoSuport() {
  mydb = new DB();
 }
 
 public static BaseDaoSuport getInstence(){
  return baseDaoSuport;
 }
 
 public boolean addT(String sql,Object[] params) {
  try {
   mydb.doPstm(sql, params);
   return true;
  } catch (Exception e) {
   return false;
  }
 }


 public boolean delT(int id,String sql) {
  Object[] params = { id };
  try {
   mydb.doPstm(sql, params);
   return true;
  } catch (Exception e) {
   return false;
  }
 }


 public ResultSet findByProperty(Object[] params,String sql) {
  ResultSet rs = null;
  try {
   mydb.doPstm(sql, params);
   rs = mydb.getRs();
  } catch (Exception e) {
   e.printStackTrace();
   System.out.println("查询出错");
  }
  return rs;
 }


 public List findTList(String sql,String countsql,int page) {
  List list = new ArrayList();
  QueryResult<T> queryResult = null;
  int d = this.getCount(countsql);
  System.out.println(d);
  Page pageUtil = new Page(d, page);
  ResultSet rs = null;
  try {
   Object[] params = { Page.maxResult * (page - 1), Page.maxResult };
   mydb.doPstm(sql, params);
   rs = mydb.getRs();
   System.out.println(rs);
   queryResult = new QueryResult<T>();
   queryResult.setPage(pageUtil);
  } catch (Exception e) {
   e.printStackTrace();
  }
  list.add(queryResult);
  list.add(rs);
  return list;
 }
 
 /**
  * 得到集合数据
  */
 public ResultSet getList(String sql,Object[] params) {
  ResultSet rs = null;
  try {
   mydb.doPstm(sql, params);
   rs = mydb.getRs();
   System.out.println(rs);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return rs;
 }

 private int getCount(String countsql) {
  int temp = 0;
  try {
   mydb.doPstm(countsql,null);
   ResultSet rs = mydb.getRs();
   while (rs.next()) {
    temp++;
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return temp;
 }

 public boolean modifyT(String sql,Object[] params) {
  try {
   mydb.doPstm(sql, params);
   return true;
  } catch (Exception e) {
   return false;
  }
 }
}

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值