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

类的代码:

 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. Mac OSX系统下SVN客户端SCPlugin问题

    装上SCPlugin后,Checkout老是出现这种错误: Server certificate verification failed: certificate issued for a diffe ...

  2. JavaScript跨域方法

    一.什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: ...

  3. Android杂谈--小知识点总结(1)

    此知识点总结是开发过程中遇到的比较棘手或者恶心的地方,所以随时更新,以备不时之需 1. viewFlipper中的item如何动态设置高度? 例如: <ViewFlipper android:l ...

  4. 游戏服务器ID生成器组件

    游戏服务器程序中,经常需要生成全局的唯一ID号,这个功能很常用,本文将介绍一种通用ID生成组件.游戏服务器程序中使用此组件的场景有: 创建角色时,为其分配唯一ID 创建物品时,每个物品需要唯一ID 创 ...

  5. AX7 VM can not starting

    这个问题跟很多人遇到的一样,VM下载,一开始使用正常,特然某个时候,就挂了,直接引用老外的描述吧 http://community.dynamics.com/ax/f/33/p/203984/5296 ...

  6. 将Word转为带书签的PDF

    将word文档存为PDF可以带来很多便利,在这里就不多说了.下面讨论一下转换方法. 我现在使用的是Word2010+Acrobat9,所以这里仅讨论使用这种组合的转换方法. 在Word2010中有两种 ...

  7. SQL查询集合合并成字符串

    有时候需要查询某一个字段,并把查询结果组成一个字符串,则: ) SELECT @str=isnull(@str+',','')+列名 FROM 表名 SELECT @str

  8. CocoStudio教程三:认识并利用CocoStudio的果实 运行2.2.1版本

    原文:CocoStudio教程三:认识并利用CocoStudio的果实 原文用的老版,用2.21搞起来好像有些问题,然后自己摸索了下,有的都是乱找的方法,只求能运行... 1,原文的CCJsonRea ...

  9. MyBatis 入门

    什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集.MyBatis ...

  10. eclipse开发web应用程序步骤(图解)

    *运行环境(也就是服务器的选择) 环境搭建好之后开始编写web程序!然后右键->Run as -> Run on Server!