postgresql一般crud存储过程参考[转]

http://blog.csdn.net/cdnight/article/details/18082255

这里是一份经过再三调试测试而成功的postgres数据库单表crud存储过程,请注意,对于多结果的返回方式,请查看 getPageByCondition的书写方式,用的是refcursor,返回一个cursor,同时可以返回其他out,inout参数,但是 refcursor必须在事务中调用,所以java端的调用过程需要注意,好吧,我同时放出一份dal样板,大家可以直接copy来用。

  1 /******************************************************************
  2 * 表名:test3
  3 * Made by 码农下的天桥
  4 ******************************************************************/
  5 --use MYDB;--你可以指定自己的数据库
  6 /******************************************************************
  7 ****************************各种常用查询***************************
  8 ******************************************************************/
  9 ------------------------------------
 10 --用途:复杂形式的查询语句,用于查询分页数据。
 11 --这个是泛用型的,假如你要根据用户输入去查询,那么最好不要用这个了,
 12 --以免出现sql注入。
 13 --参数说明:
 14 ---_offset int 需要取的记录的开始位置
 15 ---_limit int 需要获取记录的总条数,针对分页而言,就是分页的pagesize。
 16 ---_columns varchar(800) 需要获取的字段
 17 ---_where varchar(800) 需要过滤的条件譬如: where id<10 可以带where,不过建议不要带。
 18 ---_orderby varchar(800) 需要进行排序的提交,譬如:order by id
 19 ---_totalCount int 返回总共记录条数。
 20 ---_totalPages int 返回总共页数。
 21 ------------------------------------
 22 create or replace function test3_getListByCondition(
 23 INOUT pageindex INT,
 24 INOUT pagesize INT,
 25 IN _columns VARCHAR(800),
 26 IN _where VARCHAR(800),
 27 IN _orderby VARCHAR(800),
 28 out _totalCount INT,
 29 out _totalPages INT)
 30 returns SETOF record
 31 AS
 32 $$
 33 DECLARE condition_columns VARCHAR(800);
 34 DECLARE condition_where varchar(800);
 35 DECLARE condition_orderby VARCHAR(800);
 36 DECLARE _dymatic_sql VARCHAR(1600);
 37 DECLARE _beginNO INT;
 38 DECLARE _dynamic_getCount varchar(1600);
 39 DECLARE _theOffset INT;
 40 DECLARE _tmpInt1 INT;
 41 BEGIN
 42 condition_where:=ltrim(rtrim(COALESCE(_where,'')));
 43 condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
 44 condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
 45 --分析传过来的参数,构造动态sql语句。
 46 IF "character_length"(condition_where)>0 THEN
 47 IF strpos(condition_where, 'where ')!=1 THEN
 48 condition_where:='where ' || condition_where;
 49 END IF;
 50 END IF;
 51 --order by 语句构造
 52 IF "character_length"(condition_orderby)>0 THEN
 53 IF strpos(condition_orderby, 'order ')!=1 THEN
 54 condition_orderby:='order by '||condition_orderby;
 55 END IF;
 56 END IF;
 57 
 58 --判断pageindex是否合法及pagesize是否合法
 59 IF pageindex<1 THEN
 60 pageindex:=1;
 61 END IF;
 62 IF pagesize<1 THEN
 63 pagesize:=20;
 64 END IF;
 65 
 66 _dynamic_getCount:='select count(*) from test3 '||condition_where|| ' ' ;
 67 EXECUTE _dynamic_getCount INTO _totalCount;
 68 
 69 IF _totalCount<1 THEN
 70 pageindex:=1;
 71 RETURN;
 72 END IF;
 73 --计算总共页数
 74 _tmpInt1:=_totalCount%pagesize;
 75 IF _tmpInt1=0 THEN
 76 _totalPages:=_totalCount / pagesize;
 77 ELSE
 78 _totalPages:=(_totalCount-_tmpInt1)/pagesize+1;
 79 END IF;
 80 
 81 IF _totalPages < pageindex then
 82 pageindex:=_totalPages;
 83 END IF;
 84 
 85 _theOffset:=(pageindex-1) * pagesize+1;
 86 
 87 _dymatic_sql:='select '||condition_columns||' from test3 '||condition_where||' '||condition_orderby||' limit '||pagesize||' '|| ' offset '||_theOffset||' ';
 88 --raise info '动态构造语句为:%',_dymatic_sql;
 89 return query EXECUTE  _dymatic_sql;
 90 END;
 91 $$ language plpgsql VOLATILE;
 92 
 93 
 94 
 95 ------------------------------------
 96 --用途:复杂形式的查询语句,用于查询多条记录数据。
 97 --这个是泛用型的,假如你要根据用户输入去查询,那么最好不要用这个了,
 98 --以免出现sql注入。
 99 --参数说明:
100 ---_offset int 需要取的记录的开始位置
101 ---_limit int 需要获取记录的总条数,针对分页而言,就是分页的pagesize。
102 ---_columns varchar(800) 需要获取的字段
103 ---_where varchar(800) 需要过滤的条件譬如: where id<10 可以带where,不过建议不要带。
104 ---_orderby varchar(800) 需要进行排序的提交,譬如:order by id
105 ---_totalCount int 返回总共记录条数。
106 ------------------------------------
107 create or replace function test3_getPageByCondition(
108 INOUT pageindex INT,
109 INOUT pagesize INT,
110 IN _columns VARCHAR(800),
111 IN _where VARCHAR(800),
112 IN _orderby VARCHAR(800),
113 out _totalCount INT,
114 out _totalPages INT,
115 out _refcursor refcursor
116 )
117 returns SETOF record
118 AS
119 $$
120 DECLARE condition_columns VARCHAR(800);
121 DECLARE condition_where varchar(800);
122 DECLARE condition_orderby VARCHAR(800);
123 DECLARE _dymatic_sql VARCHAR(1600);
124 DECLARE _beginNO INT;
125 DECLARE _dynamic_getCount varchar(1600);
126 DECLARE _theOffset INT;
127 DECLARE _tmpInt1 INT;
128 BEGIN
129 condition_where:=ltrim(rtrim(COALESCE(_where,'')));
130 condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
131 condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
132 --分析传过来的参数,构造动态sql语句。
133 IF "character_length"(condition_where)>0 THEN
134 IF strpos(condition_where, 'where ')!=1 THEN
135 condition_where:='where ' || condition_where;
136 END IF;
137 END IF;
138 --order by 语句构造
139 IF "character_length"(condition_orderby)>0 THEN
140 IF strpos(condition_orderby, 'order ')!=1 THEN
141 condition_orderby:='order by '||condition_orderby;
142 END IF;
143 END IF;
144 
145 --判断pageindex是否合法及pagesize是否合法
146 IF pageindex<1 THEN
147 pageindex:=1;
148 END IF;
149 IF pagesize<1 THEN
150 pagesize:=20;
151 END IF;
152 
153 _dynamic_getCount:='select count(*) from test3 '||condition_where|| ' ' ;
154 EXECUTE _dynamic_getCount INTO _totalCount;
155 
156 IF _totalCount<1 THEN
157 pageindex:=1;
158 RETURN;
159 END IF;
160 --计算总共页数
161 _tmpInt1:=_totalCount%pagesize;
162 IF _tmpInt1=0 THEN
163 _totalPages:=_totalCount / pagesize;
164 ELSE
165 _totalPages:=(_totalCount-_tmpInt1)/pagesize+1;
166 END IF;
167 
168 IF _totalPages < pageindex then
169 pageindex:=_totalPages;
170 END IF;
171 
172 _theOffset:=(pageindex-1) * pagesize+1;
173 
174 _dymatic_sql:='select '||condition_columns||' from test3 '||condition_where||' '||condition_orderby||' limit '||pagesize||' '|| ' offset '||_theOffset||' ';
175 --raise info '动态构造语句为:%',_dymatic_sql;
176 open _refcursor for EXECUTE  _dymatic_sql;
177 RETURN NEXT;
178 END;
179 $$ language plpgsql VOLATILE;
180 
181 ------------------------------------
182 --用途:获取其中一条记录
183 ------------------------------------
184 create or replace function test3_getRecord(in _id integer)
185 returns SETOF test3
186 AS
187 $$
188 BEGIN
189 return query select * from test3 where t3id=_id LIMIT 1 OFFSET 0;
190 END;
191 $$ LANGUAGE plpgsql VOLATILE;
192 
193 
194 ------------------------------------
195 --用途:复杂形式的查询语句,用于查询前面第几条记录,这个就相当好了
196 --这个是泛用型的,假如你要根据用户输入去查询,那么最好不要用这个了,
197 --以免出现sql注入。
198 --参数说明:
199 ---_topN int 需要取的topN条记录。
200 ---_columns varchar(800) 需要获取的字段
201 ---_where varchar(800) 需要过滤的条件譬如: where id<10 可以带where,不过建议不要带。
202 ---_orderby varchar(800) 需要进行排序的提交,譬如:order by id
203 ------------------------------------
204 create or replace function test3_getTopNbyCondition(IN _topN int,IN _columns VARCHAR(800),IN _where VARCHAR(800),IN _orderby VARCHAR(800))
205 returns SETOF test3
206 AS
207 $$
208 DECLARE condition_columns VARCHAR(800);
209 DECLARE condition_where varchar(800);
210 DECLARE condition_orderby VARCHAR(800);
211 DECLARE _dymatic_sql VARCHAR(1600);
212 BEGIN
213 condition_where:=ltrim(rtrim(COALESCE(_where,'')));
214 condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
215 condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
216 
217 --分析传过来的参数,构造动态sql语句。
218 IF "character_length"(condition_where)>0 THEN
219 IF strpos(condition_where, 'where ')!=1 THEN
220 condition_where:='where ' || condition_where;
221 END IF;
222 END IF;
223 --order by 语句构造
224 IF "character_length"(condition_orderby)>0 THEN
225 IF strpos(condition_orderby, 'order ')!=1 THEN
226 condition_orderby:='order by '||condition_orderby;
227 END IF;
228 END IF;
229 _dymatic_sql:='select '||condition_columns||' from test2 '||condition_where||' '||condition_orderby||' limit '||CAST(_topN as VARCHAR)|| ' offset 0 ';
230 --raise info '动态构造语句为:%',_dymatic_sql;
231 return query EXECUTE  _dymatic_sql;
232 END;
233 $$ language plpgsql VOLATILE;
234 
235 
236 /******************************************************************
237 *****************************记录删除******************************
238 ******************************************************************/
239 ------------------------------------
240 --用途:删除多条记录
241 ------------------------------------
242 create or replace function test3_DeleteList(in ids VARCHAR(800),out status boolean,out msg VARCHAR(200))
243 returns record
244 AS
245 $$
246 DECLARE _arr_ids int[];
247 DECLARE _str_ids "text";
248 DECLARE _str_sql VARCHAR(1600);
249 DECLARE _effects int;
250 BEGIN
251 
252 IF "character_length"(ids)<1 THEN
253 status:=false;
254 msg:='没有指定需要删除的数据!';
255 return;
256 end if;
257 _arr_ids:=tools_str2intarray(ids, ',');
258 _str_ids:=tools_stringify(_arr_ids,',');
259 --pkey为主键,自增的整数, <@ 表示判断pkey是不是在数组里面。是不是很方便?
260 /*动态构造执行*/
261 --_str_sql:='DELETE FROM test3 where t3id in ('||_str_ids||') ;';
262 --EXECUTE _str_sql;
263 /*直接执行*/
264 delete from test3 where t3id =ANY( _arr_ids);
265 GET DIAGNOSTICS _effects = ROW_COUNT;
266 IF _effects>0 THEN
267 status:=true;
268 msg:='成功删除'||_effects||'条记录!';
269 ELSE
270 status:=false;
271 msg:='没有删除任何记录!';
272 end if;
273 
274 END
275 $$ LANGUAGE plpgsql VOLATILE;
276 
277 
278 /******************************************************************
279 ****************************添加及编辑*****************************
280 ******************************************************************/
281 
282 ------------------------------------
283 --用途:增加一条记录
284 ------------------------------------
285 
286 create or replace function test3_Insert(
287                             in __t3name  varchar(400) ,
288                             in __t_birthday  date ,
289                             in __myage  smallint ,
290                             in __isadmin  boolean ,
291                             in __myintro  text ,
292                             in __price  float ,
293     out __t3id integer,
294 out _status boolean,
295 out _msg varchar(200))
296 returns record AS $$
297 BEGIN
298                                                     
299 Insert into test3
300 (
301 "t3name","t_birthday","myage","isadmin","myintro","price"
302 )
303 values(
304 __t3name,__t_birthday,__myage,__isadmin,__myintro,__price
305 );
306 /*判断添加记录是否成功。*/
307 if FOUND  then
308 _status:=true;
309 _msg:='成功添加记录.';
310 __t3id:=currval(pg_get_serial_sequence('test3', 't3id'));
311 else
312 _status:=false;
313 _msg:='无法添加记录!';
314 end if;
315 end;
316 $$ LANGUAGE plpgsql VOLATILE;
317 
318 ------------------------------------
319 --用途:修改一条记录
320 ------------------------------------
321 create or replace function test3_Update(
322                             in __t3name  varchar(400) ,
323                             in __t_birthday  date ,
324                             in __myage  smallint ,
325                             in __isadmin  boolean ,
326                             in __myintro  text ,
327                             in __price  float ,
328     in __t3id integer,
329 out _status boolean,
330 out _msg varchar(200))
331 returns record AS $$
332 BEGIN
333                                                     
334 
335 update test3 set
336 "t3name"=__t3name,"t_birthday"=__t_birthday,"myage"=__myage,"isadmin"=__isadmin,"myintro"=__myintro,"price"=__price where t3id=__t3id;
337 /*判断保存记录是否成功。*/
338 if FOUND then
339 _status:=true;
340 _msg:='成功保存记录.';
341 else
342 _status:=false;
343 _msg:='无法保存记录!';
344 end if;
345 end;
346 $$ LANGUAGE plpgsql  VOLATILE;
PostgreSQL

对应dal调用文件:

  1 package EasisWeb.DAL;
  2 
  3 import EasisWeb.config.DBPool;
  4 import Easis.Common.StringUtil;
  5 import Easis.util.DataRow;
  6 import Easis.util.DataTable;
  7 import Easis.util.DataTableHelper;
  8 import java.util.Date;
  9 import Easis.DBUtility.PooledConnection;
 10 import java.sql.*;
 11 import java.util.List;
 12 import java.util.ArrayList;
 13 import Easis.util.OperationResult;
 14 import Easis.util.PagerResult;
 15 import EasisWeb.Model.test3Model;
 16 /**
 17 * 这是利用CodeGen工具生成的自动访问数据库的一个模板,作者为“码农下的天桥”
 18 *生成的类名称:
 19 * @author 码农下的天桥
 20 * @version 1.00
 21 */
 22 public class test3DAL {
 23 
 24 /*表格各种column*/
 25 public static final String col_t3id="test3";
 26 public static final String col_t3name="test3";
 27 public static final String col_t_birthday="test3";
 28 public static final String col_myage="test3";
 29 public static final String col_isadmin="test3";
 30 public static final String col_myintro="test3";
 31 public static final String col_price="test3";
 32 public static final String PKColumn="t3id";
 33 
 34 
 35 /**
 36 *存储过程名称:test3_ListByCondition
 37 *存储过程参数:
 38 *@param pageindex
 39 *@param pagesize
 40 *@param columns          需要获取的字段
 41 *@param condition        where条件语句
 42 *@param orderColumn      order by排序语句
 43 *
 44 *@return 分页对象
 45 */
 46 
 47 public PagerResult getPageListByCondition(int pageindex,int pagesize, String columns, String condition, String orderColumn){
 48 PagerResult pres=new PagerResult();
 49 //output参数定义
 50 int _total  =  0 ;
 51 int _pagesize  =  0 ;
 52 int _pageindex  =  0 ;
 53 int _totalpages  =  0 ;
 54 //output参数定义结束
 55 //调用存储过程
 56 DataTable res__datatable=new DataTable();
 57 try{
 58 PooledConnection __myconn=DBPool.getConnection();
 59 __myconn.setAutoCommit(false);   // return refcursor must within a transaction
 60 CallableStatement _stmt=__myconn.prepareCall("{ call test3_getPageByCondition( ?, ?, ?, ?, ?, ?, ?, ?)}");
 61 _stmt.setInt(1,pageindex);
 62 _stmt.setInt(2,pagesize);
 63 _stmt.registerOutParameter(1,Types.INTEGER);
 64 _stmt.registerOutParameter(2,Types.INTEGER);
 65 _stmt.setString(3,columns);
 66 _stmt.setString(4,condition);
 67 _stmt.setString(5,orderColumn);
 68 _stmt.registerOutParameter(6, Types.INTEGER);
 69 _stmt.registerOutParameter(7, Types.INTEGER);
 70 _stmt.registerOutParameter(8,Types.OTHER);
 71 _stmt.execute();
 72 ResultSet __rslist=(ResultSet)_stmt.getObject(8);
 73 res__datatable=DataTableHelper.rs2datatable(__rslist);
 74 //取回参数
 75 _total=_stmt.getInt(6);
 76 pres.totalrecords=_total;
 77 _pageindex=_stmt.getInt(1);
 78 pres.totalrecords=_total;
 79 _pagesize=_stmt.getInt(2);
 80 pres.pageindex=_pageindex;
 81 pres.pagesize=_pagesize;
 82 _totalpages=_stmt.getInt(7);
 83 pres.totalpages=_totalpages;
 84 pres.datasource=res__datatable;
 85 //--提交并还原
 86 __myconn.commit();
 87 __myconn.setAutoCommit(true);  //返回游标必须在一个事务中,提交完以后将autocommit还原。
 88 //释放资源
 89 __rslist.close();
 90 _stmt.close();
 91 __myconn.close();}
 92 catch (Exception __e){
 93 System.out.println("在运行[test3DAL]的List_Condition时候出现错误。");
 94 __e.printStackTrace();
 95 }
 96 return pres;
 97 }
 98 
 99 /**
100 *存储过程名称:test3_Insert
101 *存储过程参数:
102 *param t3id  【主键】
103                 t3name
104                 t_birthday
105                 myage
106                 isadmin
107                 myintro
108                 price
109     *
110 *@return
111 */
112 public OperationResult Insert(test3Model model){
113 OperationResult __ores=new OperationResult();
114 /*output参数定义*/
115 int t3id   =  0 ;
116 DataRow returnInfo=new DataRow();
117 boolean status  =  false ;
118 String message  =  "" ;
119 /*output参数定义结束*/
120 /*调用存储过程*/
121 
122 try{
123 PooledConnection __myconn=DBPool.getConnection();
124                                                     CallableStatement _stmt=__myconn.prepareCall("{call test3_Insert(?,?,?,?,?,?,?,?,?)}");
125 
126                         _stmt.setObject(1,model.t3name,Types.VARCHAR);
127                                 _stmt.setObject(2,new Timestamp(model.t_birthday.getTime()),Types.DATE);
128                                 _stmt.setObject(3,model.myage,Types.SMALLINT);
129                                 _stmt.setObject(4,model.isadmin,Types.BOOLEAN);
130                                 _stmt.setObject(5,model.myintro,Types.VARCHAR);
131                                 _stmt.setObject(6,model.price,Types.FLOAT);
132             _stmt.registerOutParameter(7,Types.INTEGER,-1);
133 _stmt.registerOutParameter(8, Types.BOOLEAN,1);
134 _stmt.registerOutParameter(9, Types.VARCHAR,200);
135 _stmt.execute();
136 
137 
138 /*取回参数*/
139 t3id=_stmt.getInt(7);
140 status=_stmt.getBoolean(8);
141 message=_stmt.getString(9);
142 
143 
144 __ores.id= t3id;
145 __ores.status=status;
146 __ores.message=message;
147 /*释放资源*/
148 
149 _stmt.close();
150 __myconn.close();}
151 catch (Exception __e){
152 __e.printStackTrace();
153 __ores.message=__e.toString();
154 }
155 return __ores;
156 }
157 
158 
159 /**
160 *存储过程名称:test3_Update
161 *存储过程参数:
162 * t3id【主键】
163                 t3name
164                 t_birthday
165                 myage
166                 isadmin
167                 myintro
168                 price
169     *
170 *@return
171 */
172 public OperationResult Update(test3Model model){
173 OperationResult __ores=new OperationResult();
174 /*output参数定义*/
175 boolean status  =  false ;
176 String message  =  "" ;
177 /*output参数定义结束*/
178 /*调用存储过程*/
179 DataTable res__datatable=new DataTable();
180 try{
181 PooledConnection __myconn=DBPool.getConnection();
182 CallableStatement _stmt=__myconn.prepareCall("{ call test3_Update( ?,?,?,?,?,?,?,?,?)}");
183 
184 
185                         _stmt.setObject(1,model.t3name,Types.VARCHAR);
186                                 _stmt.setObject(2,new Timestamp(model.t_birthday.getTime()),Types.DATE);
187                                 _stmt.setObject(3,model.myage,Types.SMALLINT);
188                                 _stmt.setObject(4,model.isadmin,Types.BOOLEAN);
189                                 _stmt.setObject(5,model.myintro,Types.VARCHAR);
190                                 _stmt.setObject(6,model.price,Types.FLOAT);
191             _stmt.setInt(7,model.t3id);
192 _stmt.registerOutParameter(8, Types.BOOLEAN,1);
193 _stmt.registerOutParameter(9, Types.VARCHAR,400);
194 _stmt.execute();
195 /*取回参数*/
196 status=_stmt.getBoolean(8);
197 message=_stmt.getString(9);
198 
199 __ores.status=status;
200 __ores.message=message;
201 
202 /*释放资源*/
203 
204 _stmt.close();
205 __myconn.close();}
206 catch (Exception __e){
207 __e.printStackTrace();
208 }
209 return __ores;
210 }
211 
212 /**
213 *存储过程名称:test3_DeleteList
214 *存储过程参数:
215 *@param ids             【参数名称:ids             参数类型:nvarchar 对应java类型:String   长度:400          】
216 *
217 *@return
218 */
219 public OperationResult DeleteList( String ids){
220 /*output参数定义*/
221 OperationResult __ores=new OperationResult();
222 boolean status  =  false ;
223 String message  =  "" ;
224 /*output参数定义结束*/
225 /*调用存储过程*/
226 DataTable res__datatable=new DataTable();
227 try{
228 PooledConnection __myconn=DBPool.getConnection();
229 CallableStatement _stmt=__myconn.prepareCall("{ call test3_DeleteList( ?, ?, ?)}");
230 
231 _stmt.setString(1,ids);
232 
233 _stmt.registerOutParameter(2, Types.BOOLEAN,1);
234 
235 _stmt.registerOutParameter(3, Types.VARCHAR,400);
236 _stmt.execute();
237 /*取回参数*/
238 status=_stmt.getBoolean(2);
239 message=_stmt.getString(3);
240 
241 __ores.status=status;
242 __ores.message=message;
243 /*释放资源*/
244 
245 _stmt.close();
246 __myconn.close();}
247 catch (Exception __e){
248 __e.printStackTrace();
249 }
250 return __ores;
251 }
252 
253 /**
254 *存储过程名称:test3_GetRecord
255 *存储过程参数:
256 *@param t3id           【参数名称:id              参数类型:int      对应java类型:int      长度:非字符类型   】
257 *
258 *@return DataTable对象。
259 */
260 
261 
262 
263 public test3Model GetRecord( int t3id ){
264 /*调用存储过程*/
265 DataTable res__datatable=new DataTable();
266 test3Model model=new test3Model();
267 try{
268 PooledConnection __myconn=DBPool.getConnection();
269 CallableStatement _stmt=__myconn.prepareCall("{ call test3_GetRecord( ?)}");
270 
271 _stmt.setInt(1,t3id);
272 ResultSet __rslist =_stmt.executeQuery();
273 res__datatable=DataTableHelper.rs2datatable(__rslist);
274 model=tryParseModel(res__datatable.get(0));
275 
276 /*释放资源*/
277 __rslist.close();
278 _stmt.close();
279 __myconn.close();}
280 catch (Exception __e){
281 __e.printStackTrace();
282 }
283 
284 return model;
285 }
286 
287 /**
288 *存储过程名称:test3_Top_Condition
289 *存储过程参数:
290 *@param topN            【参数名称:topN            参数类型:int      对应java类型:int      长度:非字符类型   】
291 *@param columns         【参数名称:columns         参数类型:nvarchar 对应java类型:String   长度:800          】
292 *@param condition       【参数名称:condition       参数类型:nvarchar 对应java类型:String   长度:800          】
293 *@param orderColumn     【参数名称:orderColumn     参数类型:nvarchar 对应java类型:String   长度:800          】
294 *
295 *@return DataTable对象。
296 */
297 public DataTable Top_Condition( int topN, String columns, String condition, String orderColumn ){
298 /*调用存储过程*/
299 DataTable res__datatable=new DataTable();
300 try{
301 PooledConnection __myconn=DBPool.getConnection();
302 CallableStatement _stmt=__myconn.prepareCall("{ call test3_Top_Condition( ?, ?, ?, ?)}");
303 
304 _stmt.setInt(1,topN);
305 
306 _stmt.setString(2,columns);
307 
308 _stmt.setString(3,condition);
309 
310 _stmt.setString(4,orderColumn);
311 ResultSet __rslist =_stmt.executeQuery();
312 res__datatable=DataTableHelper.rs2datatable(__rslist);
313 
314 /*释放资源*/
315 __rslist.close();
316 _stmt.close();
317 __myconn.close();}
318 catch (Exception __e){
319 __e.printStackTrace();
320 }
321 
322 return res__datatable;
323 }
324 
325 public test3Model tryParseModel(DataRow drow){
326 test3Model model=new test3Model();
327 if(drow==null){
328 return model;
329 }
330 
331 /*
332 return  "boolean";
333 return "Date";
334 return  "double";
335 return "float";
336 return "int";
337 return "long";
338 return "String";
339 return "Object";
340 */
341 
342 /*尝试赋值*/
343         model.t3id =    drow.get("t3id").toInt();
344             model.t3name =    drow.get("t3name").toString();
345             model.t_birthday =    drow.get("t_birthday").toDate();
346             model.myage =    drow.get("myage").toInt();
347             model.isadmin =    drow.get("isadmin").toBoolean();
348             model.myintro =    drow.get("myintro").toString();
349             model.price =    drow.get("price").toFloat();
350     return model;
351 }
352 
353 public List<test3Model> tryParseList(List<DataRow> dataList){
354     List<test3Model> modellist=new ArrayList<test3Model>();
355         if(dataList==null){
356         return modellist;
357         }
358 
359         for(DataRow drow :dataList){
360         modellist.add(tryParseModel(drow));
361         }
362 
363         return modellist;
364         }
365 }
java

http://blog.csdn.net/cdnight/article/details/18078751

http://blog.csdn.net/cdnight/article/details/18001807

http://www.cnblogs.com/stephen-liu74/category/343171.html

原文地址:https://www.cnblogs.com/qiyebao/p/4472575.html