- 浏览: 161312 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
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 840把专业的问题通俗化—— ERP(Enterpris ... -
使用Java将Word转为Html或txt等
2010-04-29 11:01 1194前一段时间为这个问题头疼的不得了,后来查阅了资料终于解决了;现 ... -
如何利用Java-JACOB操作WORD文档
2010-04-29 10:50 1725JACOB是一个 JAVA到微软的 ... -
Ant教程详解
2010-04-22 09:06 833Ant是一个Apache基金会下的跨平台的构件工具,它可以实现 ... -
java调用.dll文件
2010-04-19 10:45 1447一.在程序用jnative调用window的dll 1. ... -
如何在Web页面上直接打开、编辑、创建Office文档
2010-04-18 15:03 1504如何在Web页面上做到像S ... -
Apache POI For Java Excel
2010-04-18 14:14 1456Apache POI For Java Excel POI的 ... -
Java 串口通信环境的配置
2010-03-19 11:03 2271做串口通信,要从网上下载三个文件:分别是: 1.COMM.J ... -
多浏览器兼容的CSS js 的 tab 选项卡
2010-03-14 14:18 1669<!DOCTYPE html PUBLIC " ... -
简单实用的CSS网页布局中文排版心得
2010-03-14 10:05 817一、如何设定文字字体、颜色、大小 — 使用font f ... -
CSS网页布局编码小技巧整理
2010-03-14 09:59 6301、ul标签在Mozilla中默认是有padding值的,而 ... -
Java编程中中文乱码的问题
2010-03-14 09:45 748http://blog.csdn.net/wonder4/ar ... -
Java操作手机发送短信
2010-03-14 09:09 1377作者:曹祺 Blog: http://bl ... -
一个非常有用工具软件
2010-03-14 08:23 787这个小工具非常有用,它可以将数据库表中的字段生成对应的Java ... -
JDK1.5中的打印服务
2010-03-14 08:18 937package com.unutrip.print; imp ... -
使用SUN的MAIL包发邮件
2010-03-11 09:02 817import java.util.Properties; i ... -
JXL生成Excel并下载
2010-02-01 10:21 1547package cn.hld.practise.excel; ... -
java代码写excel和文本文档的导入导出【转】
2010-02-01 10:09 1606例子1-----》利用jxl包来完成excel导入导出 JX ... -
jxl生成excel
2010-02-01 10:06 765package campaign; import com.s ... -
利用jxl包生成Excel实例
2010-02-01 10:04 1251import jxl.*; import jxl.write. ...
相关推荐
主要讲Java链接Oracle的JDBC链接方式
Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...
java利用jdbc连接近远程MySQL数据库详细步骤+数据库封装类 --菜鸟小回-附件资源
它封装了注册和载入JDBC驱动程序、建立数据库连接、运行Structured Query Language(SQL)语句及处理查询结果集、查询结果集的分页显示操作,简化了Java DataBase Connectivity(JDBC)代码的编写,通过编写SQL语句,...
本资源为利用clickhouse的jdbc官方驱动 封装完整的增删改查示例。 修饰符和类型 方法 说明 void batchInsertData(clickhouse.service.impl.ClickHouseWrap clickHouseWrap, String tableName, List,Object>> field...
为了降低耦合性,提出了DAO封装数据库操作的设计模式,本例程实现了利用DAO设计模式,对数据表进行增、删、改、查,可以通过控制台输入数字1,2,3,4,实现对数据库的操作。
1. 公共数据访问层:封装JDBC技术,提供统一的数据库访问接口。支持多种数据库类型的访问,提高了系统的可移植性。 2. 公共业务逻辑层:封装常用的业务逻辑,如用户验证、权限验证等,减少重复开发。 3. 公共配置管理层:...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
利用java反射和java注解实现JDBC封装,模拟hibernatez自动建表删表,实体关系映射,get,getAll,delete,update,add,事务处理等等。。
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
java学习路线 第一阶段:Java核心基础 此阶段为入职java必备知识,必须牢牢掌握,把基础...从分库分表原理进行学习、sharding-jdbc实现逻辑、案例及线上环境配置,全方位了解掌握sharding-jdbc这款主流分库分表中间件。
知识点:java面向对象,集合,异常,Integer,循环,条件选择,JDBC连接数据库,封装JDBC工具类等... 分为两大模块(大概领域): 用户和管理员 用户购买和出售游戏账号等操作 管理员可对所有用户和所有游戏账号进行操作
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...