`
thtwin
  • 浏览: 161312 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

利用java封装JDBC操作

    博客分类:
  • J2SE
阅读更多
BaseDao.java

package util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ArrayList;

import javax.naming.NamingException;

public abstract class BaseDao<T extends Object> {
/**
  * select a,b,c,from table where username='hao' limit 0,20
  *
  * @param sql
  * @param para
  * @param rsObjCall
  * @return
  */
protected List<T> executeQueryList(String sql, String[] para,ResultObjectCall<T> rsObjCall) {
  List<T> list = new ArrayList<T>();
  Connection conn = null;
  PreparedStatement pstm = null;
  ResultSet rs = null;
  try {
   conn = ConnectionFactory.getConnectionDB();
   pstm = conn.prepareStatement(sql);
   for (int i = 0; i < para.length; i++) {
    if (para[i] == null)
     para[i] = "";
    pstm.setObject(i + 1, para[i]);
   }
   rs = pstm.executeQuery();
   while (rs.next()) {
    list.add(rsObjCall.getResultObject(rs));
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (NamingException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } finally {
   this.destoryResource(conn, pstm, rs);
  }
  return list;
}

/**
  * select a,b,c from table where id=25
  *
  * @param sql
  * @param para
  * @param objCall
  * @return
  */
protected T executeQuery(String sql, String[] para,ResultObjectCall<T> objCall) {
  T t = null;
  Connection conn = null;
  PreparedStatement pstm = null;
  ResultSet rs = null;
  try {
   conn = ConnectionFactory.getConnectionDB();
   pstm = conn.prepareStatement(sql);
   for (int i = 0; i < para.length; i++) {
    if (para[i] == null)
     para[i] = "";
    pstm.setObject(i + 1, para[i]);
   }
   rs = pstm.executeQuery();
   if (rs.next()) {
    t = objCall.getResultObject(rs);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (NamingException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } finally {
   this.destoryResource(conn, pstm, rs);
  }
  return t;
}

/**
  * select count(id) from table where id=?
  * select a from table where id=?
  * @param sql
  * @param para
  * @return
  */
protected Object getColumn(String sql, String[] para) {
  Object obj = null;
  Connection conn = null;
  PreparedStatement pstm = null;
  ResultSet rs = null;
  try {
   conn = ConnectionFactory.getConnectionDB();
   pstm = conn.prepareStatement(sql);
   for (int i = 0; i < para.length; i++) {
    if (para[i] == null)
     para[i] = "";
    pstm.setObject(i + 1, para[i]);
   }
   rs = pstm.executeQuery();
   if (rs.next()) {
    obj = rs.getObject(1);
   }
  } catch (SQLException e) {
  } catch (NamingException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } finally {
   this.destoryResource(conn, pstm, rs);
  }
  return obj;
}
/**
  * update table set col=? where id=?
  *
  * @param sql
  * @param para
  * @throws SQLException
  */
protected int executeUpdate(String sql, String[] para) {
  int result=0;
  Connection conn = null;
  PreparedStatement pstm = null;
  try {
   conn = ConnectionFactory.getConnectionDB();
   pstm = conn.prepareStatement(sql);
   for (int i = 0; i < para.length; i++) {
    if (para[i] == null)
     para[i] = "";
    pstm.setObject(i + 1, para[i]);
   }
   result=pstm.executeUpdate();
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (NamingException e) {
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } finally {
   this.destoryResource(conn, pstm);
  }
  return result;
}


/**
  * insert into diary(userid,username,title,content)values(?,?,?,?)
  *
  * @param sql
  * @param para
  * @return
  * @throws SQLException
  */
protected long executeInsert(String sql, String[] para) {
  long currentId = 0;
  Connection conn = null;
  PreparedStatement pstm = null;
  ResultSet rs = null;
  try {
   conn = ConnectionFactory.getConnectionDB();
   pstm = conn.prepareStatement(sql);
   for (int i = 0; i < para.length; i++) {
    if (para[i] == null)
     para[i] = "";
    pstm.setObject(i + 1, para[i]);
   }
   pstm.executeUpdate();
   rs = pstm.getGeneratedKeys();
   if (rs.next()) {
    currentId = rs.getLong(1);
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   this.destoryResource(conn, pstm, rs);
  }
  return currentId;
}

/**
  * destoryResource
  *
  * @param conn
  * @param pstm
  * @param rs
  */
private void destoryResource(Connection conn, PreparedStatement pstm,ResultSet rs) {
  try {
   if (pstm != null)
    pstm.close();
   if (rs != null)
    rs.close();
   if (conn != null)
    conn.close();
  } catch (SQLException e) {
  }
}

/**
  * destoryResource
  *
  * @param conn
  * @param pstm
  */
private void destoryResource(Connection conn, PreparedStatement pstm) {
  try {
   if (pstm != null)
    pstm.close();
   if (conn != null)
    conn.close();
  } catch (SQLException e) {
  }
}
}

-----------------------------------------

ResultObjectCall.java

package util;

import java.sql.ResultSet;
import java.sql.SQLException;

public abstract class ResultObjectCall<T extends Object> {
public abstract T getResultObject(ResultSet rs) throws SQLException;
}
-------------------------------------------

这样我们在做程序的时候,只需要写sql和sql里面的参数了。

定义个java类TestBaseDaoImpl来实现对日志的一些操作,需要这样定义,Diary是我们的实例类:

public class TestBaseDaoImpl extends BaseDao<Diary>

例如插入记录:

public long intertRecord(){
  String sql="insert into diary(userid,username,title,content)values(?,?,?,?)";
  return this.executeInsert(sql, new String[]{"1","bokee","photobokee","photo.bokee.com/huangjunhua"});
}

例如查询一个列表:

public List<Diary> loadDiaryList(){
  String sql="select diaryid,userid,username,title,content,publishtime from diary where diaryid=? order by diaryid desc";
  List<Diary> list= this.executeQueryList(sql,new String[]{"1"}, new ResultObjectCall<Diary>() {
   public Diary getResultObject(ResultSet rs) throws SQLException {
    Diary d=new Diary();
    d.setDiaryId(rs.getLong(1));
    d.setUserId(rs.getLong(2));
    d.setUserName(rs.getString(3));
    d.setTitle(rs.getString(4));
    d.setContent(rs.getString(5));
    d.setPublishtime(rs.getTimestamp(6));
    return d;
   }
  });
  return list;
}

这样就ok了,非常简单吧

我为了能够控制sql的书写,所以把sql的控制放在自己的程序里面了,没有再做封装。

数据库目前针对msyql,jdk版本是1.6.0
分享到:
评论

相关推荐

    JDBC与Java数据库编程

    主要讲Java链接Oracle的JDBC链接方式

    Java之JDBC连接MySQL数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement)

    Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...

    java利用jdbc连接近远程MySQL数据库详细步骤+数据库封装类 --菜鸟小回-附件资源

    java利用jdbc连接近远程MySQL数据库详细步骤+数据库封装类 --菜鸟小回-附件资源

    论文研究-可重用Java数据库操作组件的设计和实现.pdf

    它封装了注册和载入JDBC驱动程序、建立数据库连接、运行Structured Query Language(SQL)语句及处理查询结果集、查询结果集的分页显示操作,简化了Java DataBase Connectivity(JDBC)代码的编写,通过编写SQL语句,...

    click-house-jdbc-test.zip

    本资源为利用clickhouse的jdbc官方驱动 封装完整的增删改查示例。 修饰符和类型 方法 说明 void batchInsertData(clickhouse.service.impl.ClickHouseWrap clickHouseWrap, String tableName, List,Object&gt;&gt; field...

    JDBCDemo_DAO.rar

    为了降低耦合性,提出了DAO封装数据库操作的设计模式,本例程实现了利用DAO设计模式,对数据表进行增、删、改、查,可以通过控制台输入数字1,2,3,4,实现对数据库的操作。

    基于JAVA公共资源模块的设计与开发的毕业设计,通过设计和开发公共资源模块,实现对公共资源的封装和管理,减少重复开发工作

    1. 公共数据访问层:封装JDBC技术,提供统一的数据库访问接口。支持多种数据库类型的访问,提高了系统的可移植性。 2. 公共业务逻辑层:封装常用的业务逻辑,如用户验证、权限验证等,减少重复开发。 3. 公共配置管理层:...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java模拟hibernate实现

    利用java反射和java注解实现JDBC封装,模拟hibernatez自动建表删表,实体关系映射,get,getAll,delete,update,add,事务处理等等。。

    java开源包4

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包11

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包101

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包6

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包9

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    Java Jar 包,封装了护卫盾所有WebAPI函数,开箱即用,支持所有Java相关IDE.zip

    java学习路线 第一阶段:Java核心基础 此阶段为入职java必备知识,必须牢牢掌握,把基础...从分库分表原理进行学习、sharding-jdbc实现逻辑、案例及线上环境配置,全方位了解掌握sharding-jdbc这款主流分库分表中间件。

    java游戏账号交易系统

    知识点:java面向对象,集合,异常,Integer,循环,条件选择,JDBC连接数据库,封装JDBC工具类等... 分为两大模块(大概领域): 用户和管理员 用户购买和出售游戏账号等操作 管理员可对所有用户和所有游戏账号进行操作

    java开源包5

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

    java开源包8

    利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...

Global site tag (gtag.js) - Google Analytics