挑战:java 批量查询SQL语句

问题描述

现有一批SQL语句集,此集合中的SQL语句格式不固定,但都执行的是select 查询。 要求:和数据库只建立一次连接,多次执行,每条SQL语句执行完之后都能有一个返回值。在批量操作数据方面,java提供了批量更新,但是更新要求SQL语句格式是固定的,变的只是参数。此问题,是一个挑战!欢迎各位献策!

解决方案

给你提供一个dao模板方法用Object...args语法,但只限在返回一列数据先用Object...args写一个通用的dao方法:public static List<Object> getDate(Connection conn ,String sql ,Object...args){PreparedStatement ps = null;ResultSet rs = null;List<Object> list=new ArrayList<Object>();try {ps = conn.prepareStatement(sql.toString(),ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);for(int i=1;i<=args.length;i++){ps.setObject(i, args[i-1]);}rs = ps.executeQuery();while (rs.next()) {list.add(rs.getInt(1));}}catch(SQLException e){e.printStackTrace();} finally { ///自己写一个colse资源的方法吧 close(rs, ps); }return list;}你在程序中可能这样调用这个方法例: String sql1="select intFilet from table where id=?"; getDate(sql,1); String sql2="select intFilet from table where id=? and c=?"; getDate(sql,1,2);有多少个"?"就在方法里放多少个参数;这种情况只能返回一个字段 .如果你要用返回不同的字段,要使用hibernate了,再给你提供一个HQL的模板DAO:protected static List executeQuery(Session ssn ,String hql, int fromIdx, int fetchCount, Object...args){Query q = ssn.createQuery(hql);for(int i=0;i<args.length;i++){q.setParameter(i, args[i]);}if(fromIdx > 0)q.setFirstResult(fromIdx);if(fetchCount > 0)q.setMaxResults(fetchCount);return q.list();}关于同一个数据库链接的问题,只要用同一个Connection变量就行,如果是hibernate只要同一个session就行!
解决方案二:
http://www.iteye.com/topic/230738这个不知道行不行?

时间: 2024-11-03 20:45:37

挑战:java 批量查询SQL语句的相关文章

将界面查询条件通过java解析成sql语句

问题描述 将界面查询条件通过java解析成sql语句 新手求助,现在做一个东西,需要将界面查询的条件进行解析成sql条件,比如传进来的 条件为(!ewew&!1)&!ce|( wewe|测试) 和查询字段为content,那么得到的解析语句为 (( content not like '%ewew%' and content not like '%1%') and ( content not like '%ce%') or ( content like '% wewe%' or conten

select-mybatis加oracle批量insert中的序列问题,可不可以用union做批量的sql语句--急

问题描述 mybatis加oracle批量insert中的序列问题,可不可以用union做批量的sql语句--急 <insert id="saveManyPopInfo" parameterType="java.util.List"> insert into popinfo (popid,popname,remark) select seq_popid.nextval,p.* from ( <foreach collection="lis

10种Java开发者编写SQL语句时常见错误_MsSql

Java开发者对于面向对象编程思维与命令行编程思维的协调程度,取决于他们如下几种能力的水平: 技巧(任何人都可以编写命令行形式的代码) 教条(有的人使用"模式 - 模式"的方式,即模式无处不在,并以名字作为标识) 情绪状况(在初期,真正面向对象形式的代码比起命令式代码会更加难懂.) 但是,当Java开发人员编写SQL语句时,一切都变得不同了.SQL是一种说明式语言,与面向对象思想和命令式思想无关.在SQL语言中,查询非常容易表达.但它也不是那么容易以最佳或最正确地方式编写出来.开发人员

10种Java开发者编写SQL语句时常见错误

Java开发者对于面向对象编程思维与命令行编程思维的协调程度,取决于他们如下几种能力的水平: 技巧(任何人都可以编写命令行形式的代码) 教条(有的人使用"模式 - 模式"的方式,即模式无处不在,并以名字作为标识) 情绪状况(在初期,真正面向对象形式的代码比起命令式代码会更加难懂.) 但是,当Java开发人员编写SQL语句时,一切都变得不同了.SQL是一种说明式语言,与面向对象思想和命令式思想无关.在SQL语言中,查询非常容易表达.但它也不是那么容易以最佳或最正确地方式编写出来.开发人员

php mysqli批量执行sql语句程序代码

mysqli 增强-批量执行sql 语句  代码如下 复制代码 <?php     //mysqli 增强-批量执行sql 语句     //批量执行dql     //使用mysqli的mysqli::multi_query() 一次性添加3个用户         $mysqli =new MySQLi("localhost","root","root","test");     if($mysqli->conn

PHP mysqli 增强 批量执行sql 语句的实现代码_Mysql

mysqli 增强-批量执行sql 语句 复制代码 代码如下: <?php     //mysqli 增强-批量执行sql 语句     //批量执行dql    //使用mysqli的mysqli::multi_query() 一次性添加3个用户     $mysqli =new MySQLi("localhost","root","root","test");    if($mysqli->connect_er

日期相加的查询SQL语句

  日期相加的查询sql语句 这是一款讲mssql access的日期相加的sql语句,在它们中对数据库教程日期操作提供了大量的函数,今天我们日期相加就利用了dateadd函数来实例. */ //方法一 存储过程 set nocount on declare @kp table([id] int,[ys] int,[syrq] datetime) insert @kp select 1,2,'2008-08-08' union all select 2,3,'2008-09-01' union

mysql的查询sql语句转换成oracle的sql

问题描述 mysql的查询sql语句转换成oracle的sql SELECT CREATE_DATE SUM(ISBIND) AS ISBIND SUM(UNBIND) AS UNBIND SUM(SUBSCRIBE) AS SUBSCRIBE SUM(UNSUBSCRIBE) AS UNSUBSCRIBE FROM ( SELECT N.CREATE_DATE MAX( CASE N.EVENT WHEN 'subscribe' THEN COUNT ELSE 0 END ) SUBSCRIB

Oracle查询SQL语句,请教各位大神

问题描述 Oracle查询SQL语句,请教各位大神 有这样一些数据: name subject张三 语文 李四 数学 张三 数学 李四 英语 张三 历史 想得到的结果: name subject张三 语文,数学,历史 李四 数学,英语 请教SQL语句,各路大神帮忙思考下. 解决方案 SELECT name , wmsys.wm_concat (subject) as result FROM 表名 GROUP BY name 解决方案二: 这个主要用SQL语句将subject里的数据拼接成一个字符