java数据库查询类
通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。
类的代码:
package com.hongyuan.db; import java.math.BigDecimal;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLXML;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List; import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet; import com.sun.rowset.CachedRowSetImpl; public class DBUtil {
private DataSource ds = null; public DataSource getDs() {
return ds;
} public void setDs(DataSource ds) {
this.ds = ds;
} public DBUtil() {
} public DBUtil(DataSource ds) {
this.ds = ds;
} public Connection getConnection() throws SQLException {
return ds.getConnection();
} public static void close(Connection conn, Statement s, ResultSet rs)
throws SQLException {
if (rs != null)
rs.close();
if (s != null)
s.close();
if (conn != null)
conn.close();
} public Object query(String sql) throws SQLException {
return this.query(sql, null);
} public Object query(String sql, List params) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = this.getConnection();
ps = conn.prepareStatement(sql); if (null != params) {
//初始化查询参数
this.initParam(ps, params);
}
//处理结果集 http://www.cnblogs.com/roucheng/
boolean isResultSet = ps.execute();
List result = new ArrayList();
do {
if (isResultSet) {
CachedRowSet crs = new CachedRowSetImpl();
crs.populate(ps.getResultSet());
result.add(crs);
} else {
result.add(new Integer(ps.getUpdateCount()));
}
} while ((isResultSet = ps.getMoreResults()) == true
|| ps.getUpdateCount() != -1); if (result.size() == 0) {
return null;
} else if (result.size() == 1) {
return result.get(0);
} else {
return result;
}
} catch (SQLException e) {
throw new SQLException("无法执行的sql语句!");
} finally {
DBUtil.close(conn, ps, rs);
}
}
//初始化查询参数
private void initParam(PreparedStatement ps, List params)
throws SQLException {
for (int i = 0; i < params.size(); i++) {
Object param = params.get(i);
if (param instanceof Byte) {
ps.setByte(i + 1, (Byte) param);
} else if (param instanceof Short) {
ps.setShort(i + 1, (Short) param);
} else if (param instanceof Integer) {
ps.setInt(i + 1, (Integer) param);
} else if (param instanceof Long) {
ps.setLong(i + 1, (Long) param);
} else if (param instanceof Float) {
ps.setFloat(i + 1, (Float) param);
} else if (param instanceof Double) {
ps.setDouble(i + 1, (double) param);
} else if (param instanceof BigDecimal) {
ps.setBigDecimal(i + 1, (BigDecimal) param);
} else if (param instanceof Boolean) {
ps.setBoolean(i + 1, (Boolean) param);
} else if (param instanceof String) {
ps.setString(i + 1, (String) param);
} else if (param instanceof Time) {
ps.setTime(i + 1, (Time) param);
} else if (param instanceof Date) {
ps.setDate(i + 1, (Date) param);
} else if (param instanceof Timestamp) {
ps.setTimestamp(i + 1, (Timestamp) param);
} else if (param instanceof Array) {
ps.setArray(i + 1, (Array) param);
} else if (param instanceof Blob) {
ps.setBlob(i + 1, (Blob) param);
} else if (param instanceof Clob) {
ps.setClob(i + 1, (Clob) param);
} else if (param instanceof SQLXML) {
ps.setSQLXML(i + 1, (SQLXML) param);
} else if (param instanceof URL) {
ps.setURL(i, (URL) param);
} else {
ps.setObject(i + 1, param);
}
}
}
}
上面类的使用 DBUtilTest.java:
package com.hongyuan.db; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import javax.sql.DataSource; import org.junit.BeforeClass;
import org.junit.Test; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; public class DBUtilTest { private static DataSource ds=null; @BeforeClass
public static void setUpBeforeClass() throws Exception {
MysqlDataSource mds=new MysqlDataSource();
mds.setURL("jdbc:mysql://127.0.0.1:3306/test");
mds.setUser("root");
mds.setPassword("123456");
ds=mds;
} @Test
public void testQuery() throws SQLException {
DBUtil util=new DBUtil(ds);
List params=new ArrayList();
params.add(2);
Object obj=util.query("select * from emp where id=?",params);
if(obj instanceof ResultSet){
ResultSet rs=(ResultSet)obj;
while(rs.next()){
for(int i=0;i<rs.getMetaData().getColumnCount();i++){
System.out.print(rs.getObject(i+1)+"\t");
}
System.out.println();
}
}else{
System.out.println(obj);
}
} }
java数据库查询类的更多相关文章
- MinerDB.java 数据库工具类
MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...
- 【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)
上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完 ...
- JAVA 数据库操作工具类----sqllite
package com.asc.db; import android.content.ContentValues; import android.content.Context; import and ...
- Java知多少(107)几个重要的java数据库访问类和接口
编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...
- Java数据库操作类演示
只在mysql上测试过,不知道算不算好使1. [代码][Java]代码 package org.load.demo; import java.io.IOException;import ja ...
- Java 数据库操作类
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- 学习练习 java数据库查询小题
10. 查询Score表中的最高分的学生学号和课程号.(子查询或者排序) 11. 查询每门课的平均成绩. 12.查询Score表中至少有5名学生选修的并以3开头的课程的平均分数. 13.查询分数大于7 ...
- java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
当取出这个值的时候只能用java.sql.Date而且只能显示年月日,我想知道如何才能显示时分秒 PS:不改变用getdate()存入的前提下! 解决方法:将getDate()方法改为getTim ...
- Java知多少(108)数据库查询简介
利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...
随机推荐
- 使用 T-SQL 计算当日日期、本周第一天与最后一天
--当日日期 ); SET @Today = DATENAME(YEAR, GETDATE()) + '-' + DATENAME(MONTH, GETDATE()) + '-' + DATENAME ...
- 使用Condition实现多线程之间调用(生产消费模式)
一,object 类的wait(),notify()和notifyAll() Java 线程类也是一个object 类,它的实例都继承自java.lang.Thread 或其子类.wait(),not ...
- Cocos2d-JS项目之三:使用合图
studio里使用合图感觉和spriteBatchNode差不多,但有不同,合图只起到在加载资源时减少IO的作用,起不到批渲染的作用.其实想想,studio本来就是用来拼UI界面的,一个上点规模的UI ...
- MMO之禅(二)职业精神
MMO之禅(二)职业精神 --心态 目标 信仰 Zephyr 201304 继续上篇,继续讲什么?打了很多腹稿点滴,从引擎架构,到上层数据.逻辑模块规划,想了很多,临起笔,却总发觉四顾心茫然,乱不可言 ...
- Unity3d插件汇总
Unity3d 中的svn插件 插件下载地址:http://www.dehome.net/down/viewfile.php?file_id=53
- CenOS6.3 ssh 公钥认证报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
转载自 http://laowafang.blog.51cto.com/251518/1364298 1.说明: ssh无密码用户远程登录,一直以来使用是debian操作系统,对用户目录权限要求没有关 ...
- 写的一个Sass 和Compass的例子
/*1.打开项目根目录下的 config.rb 文件 2.搜索 line_comments 关键词,默认应该是 # line_comments = false 3.去掉前面的 #,保存 config. ...
- ArcGIS如何将表连接到空间数据上
当我们有一些空间数据和一些业务数据(表),希望把业务数据和空间数据连接起来时,可以采用ArcGIS Desktop进行操作.本文将介绍如何在ArcGIS Destop中将表和空间数据关联起来. Arc ...
- 显示SQL Server分配的全部内存
1.在sqlserver 中建立查询 2.执行 DBCC MEMORYSTATUS 在Windows Server 2000/2003任务管理器中,“内存使用”这个字段是显示工作区分配的内存.一个进程 ...
- bootstrap插件学习-bootstrap.collapse.js
先看bootstrap.collapse.js的结构 var Collapse = function ( element, options ){} // 构造器 Collapse.prototype ...