通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。

类的代码:

 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数据库查询类的更多相关文章

  1. MinerDB.java 数据库工具类

    MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...

  2. 【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)

    上次在<[php]利用原生态的JavaScript Ajax为php进行MVC分层设计,兼容IE6>(点击打开链接) 一文中,对于php查询Mysql数据库的model.php写法还不够完 ...

  3. JAVA 数据库操作工具类----sqllite

    package com.asc.db; import android.content.ContentValues; import android.content.Context; import and ...

  4. Java知多少(107)几个重要的java数据库访问类和接口

    编写访问数据库的Java程序还需要几个重要的类和接口. DriverManager类 DriverManager类处理驱动程序的加载和建立新数据库连接.DriverManager是java.sql包中 ...

  5. Java数据库操作类演示

    只在mysql上测试过,不知道算不算好使​1. [代码][Java]代码     package org.load.demo; import java.io.IOException;import ja ...

  6. Java 数据库操作类

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  7. 学习练习 java数据库查询小题

    10. 查询Score表中的最高分的学生学号和课程号.(子查询或者排序) 11. 查询每门课的平均成绩. 12.查询Score表中至少有5名学生选修的并以3开头的课程的平均分数. 13.查询分数大于7 ...

  8. java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法

    当取出这个值的时候只能用java.sql.Date而且只能显示年月日,我想知道如何才能显示时分秒   PS:不改变用getdate()存入的前提下! 解决方法:将getDate()方法改为getTim ...

  9. Java知多少(108)数据库查询简介

    利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...

随机推荐

  1. 使用 T-SQL 计算当日日期、本周第一天与最后一天

    --当日日期 ); SET @Today = DATENAME(YEAR, GETDATE()) + '-' + DATENAME(MONTH, GETDATE()) + '-' + DATENAME ...

  2. 使用Condition实现多线程之间调用(生产消费模式)

    一,object 类的wait(),notify()和notifyAll() Java 线程类也是一个object 类,它的实例都继承自java.lang.Thread 或其子类.wait(),not ...

  3. Cocos2d-JS项目之三:使用合图

    studio里使用合图感觉和spriteBatchNode差不多,但有不同,合图只起到在加载资源时减少IO的作用,起不到批渲染的作用.其实想想,studio本来就是用来拼UI界面的,一个上点规模的UI ...

  4. MMO之禅(二)职业精神

    MMO之禅(二)职业精神 --心态 目标 信仰 Zephyr 201304 继续上篇,继续讲什么?打了很多腹稿点滴,从引擎架构,到上层数据.逻辑模块规划,想了很多,临起笔,却总发觉四顾心茫然,乱不可言 ...

  5. Unity3d插件汇总

    Unity3d 中的svn插件 插件下载地址:http://www.dehome.net/down/viewfile.php?file_id=53

  6. CenOS6.3 ssh 公钥认证报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

    转载自 http://laowafang.blog.51cto.com/251518/1364298 1.说明: ssh无密码用户远程登录,一直以来使用是debian操作系统,对用户目录权限要求没有关 ...

  7. 写的一个Sass 和Compass的例子

    /*1.打开项目根目录下的 config.rb 文件 2.搜索 line_comments 关键词,默认应该是 # line_comments = false 3.去掉前面的 #,保存 config. ...

  8. ArcGIS如何将表连接到空间数据上

    当我们有一些空间数据和一些业务数据(表),希望把业务数据和空间数据连接起来时,可以采用ArcGIS Desktop进行操作.本文将介绍如何在ArcGIS Destop中将表和空间数据关联起来. Arc ...

  9. 显示SQL Server分配的全部内存

    1.在sqlserver 中建立查询 2.执行 DBCC MEMORYSTATUS 在Windows Server 2000/2003任务管理器中,“内存使用”这个字段是显示工作区分配的内存.一个进程 ...

  10. bootstrap插件学习-bootstrap.collapse.js

    先看bootstrap.collapse.js的结构 var Collapse = function ( element, options ){} // 构造器 Collapse.prototype ...