`
thtwin
  • 浏览: 167174 次
  • 性别: 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
分享到:
评论

相关推荐

    java增删改查JDBC封装类(泛型封装)

    - 封装JDBC操作可以将数据库操作抽象成独立的类,减少重复代码,提高代码复用。 - 通常包括连接管理(连接池)、SQL语句的预编译、执行、结果集处理等方法。 4. **泛型在JDBC封装中的应用**: - 在封装JDBC操作...

    java jdbc 需要包

    综上所述,这些jar文件组合在一起,可以构建一个基于Spring框架,利用JDBC访问MySQL数据库的Java应用程序。在实际开发中,通常会通过Maven或Gradle等构建工具来管理这些依赖,而不是直接引入jar文件。这样可以确保...

    java注解、java反射机制 jdbc 封装

    通过学习这个案例,开发者可以深入理解如何在实际项目中有效利用Java的注解和反射机制,提升代码质量和可维护性。 总之,这个案例结合了Java的三大利器——注解、反射和JDBC,旨在创建一个高效、灵活且易于扩展的...

    java(jdbc)学习

    封装JDBC操作可以简化数据库访问代码,常见的封装形式包括将查询结果封装为Map、Bean或List,以及应用策略模式和模板模式来提高代码的可扩展性和可维护性。 #### 十五、高级JDBC主题 深入探讨JDBC的高级主题,包括...

    JDBC与Java数据库编程

    通过本章节的学习,我们了解了JDBC的基本概念、体系结构、API及其版本发展情况,同时也学习了如何使用JDBC来进行基础的数据库操作。接下来,我们将在后续章节中深入探讨JDBC的高级应用以及其他相关的主题。

    jdbc.rar_JDBC增删改查_java jdbc_jdbc_jdbc 增删改查_jdbc封装

    封装后的JDBC操作通常会更安全、高效,因为它可以处理异常、自动关闭资源,并且通过参数化SQL避免了SQL注入问题。这样的代码不仅简化了开发过程,也使得代码更易于测试和调试。 综上所述,这个“jdbc.rar”压缩包...

    封装jdbc,采用Map方式快速增删改数据库例子

    本文将深入探讨如何通过封装JDBC来提高数据库操作的效率,特别是使用Map数据结构实现快速的增删改操作。我们将以`BaseDao`类为例,位于项目的`util`包下。 首先,理解JDBC的基础知识是必要的。JDBC提供了一组接口和...

    java数据库操作封装类

    它将基础的JDBC(Java Database Connectivity)操作进行封装,使得开发者可以更方便、高效地执行常见的数据库操作,如连接、查询、插入、更新和删除等。 JDBC是Java平台标准的一部分,它提供了一套API,用于与各种...

    JDBC数据操作封装

    本篇文章将详细讲解如何利用JDBC进行数据操作封装,包括增删查改(CRUD)的基本操作,以及如何对多条数据进行事务处理,并将结果返回到对象集合和List中。 首先,我们需要理解JDBC的基本步骤: 1. **加载驱动**:...

    泛型封装JDBC

    下面我们将深入探讨如何利用泛型来封装JDBC,以及其在Oracle数据库操作中的应用。 1. **泛型的理解**: 泛型的主要作用是为容器类(如List、Map等)定义一个通用的数据类型,这样在容器中存储的对象都具有相同的...

    java project user jdbc

    在这个项目中,"java project user jdbc"很可能是实现了一个用户管理的系统,利用Java Database Connectivity (JDBC) API来与数据库进行交互。下面我们将详细探讨这个项目可能涉及的关键知识点。 1. JDBC基础:JDBC...

    基于java基础和JDBC的小型员工管理系统

    通过这个项目,开发者不仅能巩固Java编程基础,还能掌握数据库操作和JDBC技术,为后续的Web开发或企业级应用开发打下坚实的基础。同时,这个小型项目也强调了软件工程中的模块化和良好的代码组织,有助于培养良好的...

    java JDBC包装类

    5. 错误处理:统一捕获和处理JDBC操作中的异常,提供友好的错误信息。 6. 连接关闭:确保在操作完成后正确关闭连接,释放资源。 例如,一个简单的JDBC包装类的`getConnection()`方法可能如下: ```java public ...

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

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

    Java封装hibernate操作数据库.rar

    本资料包"Java封装hibernate操作数据库.rar"主要涉及了如何使用Hibernate进行数据库操作,并通过DAO(Data Access Object)层的封装来实现更加高效、简洁的代码结构。 首先,让我们深入了解Hibernate。Hibernate是一...

    JAVA+JDBC+mysql网上商城.rar

    项目可能涵盖了用户登录注册、商品浏览、购物车管理、订单处理、支付系统等多个模块,利用Java的技术优势和MySQL的高效数据存储能力,构建出稳定且可扩展的电商系统。 【标签】"java":Java是一种广泛使用的面向...

    JDBC封装类

    描述:此文章将详细介绍一个用于简化Java中JDBC操作的封装类,该类通过提供一系列方法来加速数据库编程任务,包括建立数据库连接、执行查询、处理结果集以及执行更新操作。 ### 一、JDBC封装类概述 在Java开发中,...

    Java封装ibatis操作数据库.rar

    这个名为"Java封装ibatis操作数据库.rar"的压缩包文件,显然是一个包含有针对Ibatis进行DAO层封装的代码示例或者库。这种封装能够帮助开发者更加高效地进行数据操作,减少重复代码,提高代码的可读性和可维护性。 ...

    面向切面封装的JDBC

    在文件名"oracle"的上下文中,可能是指该压缩包包含了一些针对Oracle数据库的AOP封装JDBC示例或者库。Oracle是世界上最流行的数据库管理系统之一,特别适合大型企业级应用。使用AOP封装的JDBC与Oracle数据库配合,...

    java和jdbc用数据库连接的swing界面

    在本主题中,“java和jdbc用数据库连接的swing界面”指的是利用Swing来设计用户界面,通过JDBC实现对数据库的操作。 首先,让我们了解Swing的基本概念。Swing是Java AWT(Abstract Window Toolkit)的扩展,提供了...

Global site tag (gtag.js) - Google Analytics