- 浏览: 167174 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
-
sunjia44:
很不错的方法
JTable设置单元格不可编辑 -
atian25:
主要是html dom生成的太多了.4.x版本中grid得到了 ...
ExtJS中GridPanel一次性加载500条以上数据(不分页),性能超级差,有时导致浏览器卡死! -
aspnetdb:
遇到过同样的情况,纠结中。grid显示不只和行后关系和列的多少 ...
ExtJS中GridPanel一次性加载500条以上数据(不分页),性能超级差,有时导致浏览器卡死! -
beyondsphinx:
我用TABLE一次加载几百行浏览器也卡死啊,客户端电脑,浏览器 ...
ExtJS中GridPanel一次性加载500条以上数据(不分页),性能超级差,有时导致浏览器卡死! -
共产主义:
我也遇到这个问题。用buffergrid加载的时候,数据量一多 ...
ExtJS中GridPanel一次性加载500条以上数据(不分页),性能超级差,有时导致浏览器卡死!
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
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
发表评论
-
两分钟让你明白什么是ERP
2010-07-03 17:01 874把专业的问题通俗化—— ERP(Enterpris ... -
使用Java将Word转为Html或txt等
2010-04-29 11:01 1238前一段时间为这个问题头疼的不得了,后来查阅了资料终于解决了;现 ... -
如何利用Java-JACOB操作WORD文档
2010-04-29 10:50 1757JACOB是一个 JAVA到微软的 ... -
Ant教程详解
2010-04-22 09:06 873Ant是一个Apache基金会下的跨平台的构件工具,它可以实现 ... -
java调用.dll文件
2010-04-19 10:45 1539一.在程序用jnative调用window的dll 1. ... -
如何在Web页面上直接打开、编辑、创建Office文档
2010-04-18 15:03 1554如何在Web页面上做到像S ... -
Apache POI For Java Excel
2010-04-18 14:14 1524Apache POI For Java Excel POI的 ... -
Java 串口通信环境的配置
2010-03-19 11:03 2315做串口通信,要从网上下载三个文件:分别是: 1.COMM.J ... -
多浏览器兼容的CSS js 的 tab 选项卡
2010-03-14 14:18 1756<!DOCTYPE html PUBLIC " ... -
简单实用的CSS网页布局中文排版心得
2010-03-14 10:05 866一、如何设定文字字体、颜色、大小 — 使用font f ... -
CSS网页布局编码小技巧整理
2010-03-14 09:59 6631、ul标签在Mozilla中默认是有padding值的,而 ... -
Java编程中中文乱码的问题
2010-03-14 09:45 793http://blog.csdn.net/wonder4/ar ... -
Java操作手机发送短信
2010-03-14 09:09 1438作者:曹祺 Blog: http://bl ... -
一个非常有用工具软件
2010-03-14 08:23 823这个小工具非常有用,它可以将数据库表中的字段生成对应的Java ... -
JDK1.5中的打印服务
2010-03-14 08:18 987package com.unutrip.print; imp ... -
使用SUN的MAIL包发邮件
2010-03-11 09:02 957import java.util.Properties; i ... -
JXL生成Excel并下载
2010-02-01 10:21 1580package cn.hld.practise.excel; ... -
java代码写excel和文本文档的导入导出【转】
2010-02-01 10:09 1686例子1-----》利用jxl包来完成excel导入导出 JX ... -
jxl生成excel
2010-02-01 10:06 839package campaign; import com.s ... -
利用jxl包生成Excel实例
2010-02-01 10:04 1334import jxl.*; import jxl.write. ...
相关推荐
- 封装JDBC操作可以将数据库操作抽象成独立的类,减少重复代码,提高代码复用。 - 通常包括连接管理(连接池)、SQL语句的预编译、执行、结果集处理等方法。 4. **泛型在JDBC封装中的应用**: - 在封装JDBC操作...
综上所述,这些jar文件组合在一起,可以构建一个基于Spring框架,利用JDBC访问MySQL数据库的Java应用程序。在实际开发中,通常会通过Maven或Gradle等构建工具来管理这些依赖,而不是直接引入jar文件。这样可以确保...
通过学习这个案例,开发者可以深入理解如何在实际项目中有效利用Java的注解和反射机制,提升代码质量和可维护性。 总之,这个案例结合了Java的三大利器——注解、反射和JDBC,旨在创建一个高效、灵活且易于扩展的...
封装JDBC操作可以简化数据库访问代码,常见的封装形式包括将查询结果封装为Map、Bean或List,以及应用策略模式和模板模式来提高代码的可扩展性和可维护性。 #### 十五、高级JDBC主题 深入探讨JDBC的高级主题,包括...
通过本章节的学习,我们了解了JDBC的基本概念、体系结构、API及其版本发展情况,同时也学习了如何使用JDBC来进行基础的数据库操作。接下来,我们将在后续章节中深入探讨JDBC的高级应用以及其他相关的主题。
封装后的JDBC操作通常会更安全、高效,因为它可以处理异常、自动关闭资源,并且通过参数化SQL避免了SQL注入问题。这样的代码不仅简化了开发过程,也使得代码更易于测试和调试。 综上所述,这个“jdbc.rar”压缩包...
本文将深入探讨如何通过封装JDBC来提高数据库操作的效率,特别是使用Map数据结构实现快速的增删改操作。我们将以`BaseDao`类为例,位于项目的`util`包下。 首先,理解JDBC的基础知识是必要的。JDBC提供了一组接口和...
它将基础的JDBC(Java Database Connectivity)操作进行封装,使得开发者可以更方便、高效地执行常见的数据库操作,如连接、查询、插入、更新和删除等。 JDBC是Java平台标准的一部分,它提供了一套API,用于与各种...
本篇文章将详细讲解如何利用JDBC进行数据操作封装,包括增删查改(CRUD)的基本操作,以及如何对多条数据进行事务处理,并将结果返回到对象集合和List中。 首先,我们需要理解JDBC的基本步骤: 1. **加载驱动**:...
下面我们将深入探讨如何利用泛型来封装JDBC,以及其在Oracle数据库操作中的应用。 1. **泛型的理解**: 泛型的主要作用是为容器类(如List、Map等)定义一个通用的数据类型,这样在容器中存储的对象都具有相同的...
在这个项目中,"java project user jdbc"很可能是实现了一个用户管理的系统,利用Java Database Connectivity (JDBC) API来与数据库进行交互。下面我们将详细探讨这个项目可能涉及的关键知识点。 1. JDBC基础:JDBC...
通过这个项目,开发者不仅能巩固Java编程基础,还能掌握数据库操作和JDBC技术,为后续的Web开发或企业级应用开发打下坚实的基础。同时,这个小型项目也强调了软件工程中的模块化和良好的代码组织,有助于培养良好的...
5. 错误处理:统一捕获和处理JDBC操作中的异常,提供友好的错误信息。 6. 连接关闭:确保在操作完成后正确关闭连接,释放资源。 例如,一个简单的JDBC包装类的`getConnection()`方法可能如下: ```java public ...
Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...
本资料包"Java封装hibernate操作数据库.rar"主要涉及了如何使用Hibernate进行数据库操作,并通过DAO(Data Access Object)层的封装来实现更加高效、简洁的代码结构。 首先,让我们深入了解Hibernate。Hibernate是一...
项目可能涵盖了用户登录注册、商品浏览、购物车管理、订单处理、支付系统等多个模块,利用Java的技术优势和MySQL的高效数据存储能力,构建出稳定且可扩展的电商系统。 【标签】"java":Java是一种广泛使用的面向...
描述:此文章将详细介绍一个用于简化Java中JDBC操作的封装类,该类通过提供一系列方法来加速数据库编程任务,包括建立数据库连接、执行查询、处理结果集以及执行更新操作。 ### 一、JDBC封装类概述 在Java开发中,...
这个名为"Java封装ibatis操作数据库.rar"的压缩包文件,显然是一个包含有针对Ibatis进行DAO层封装的代码示例或者库。这种封装能够帮助开发者更加高效地进行数据操作,减少重复代码,提高代码的可读性和可维护性。 ...
在文件名"oracle"的上下文中,可能是指该压缩包包含了一些针对Oracle数据库的AOP封装JDBC示例或者库。Oracle是世界上最流行的数据库管理系统之一,特别适合大型企业级应用。使用AOP封装的JDBC与Oracle数据库配合,...
在本主题中,“java和jdbc用数据库连接的swing界面”指的是利用Swing来设计用户界面,通过JDBC实现对数据库的操作。 首先,让我们了解Swing的基本概念。Swing是Java AWT(Abstract Window Toolkit)的扩展,提供了...