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;
对应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 }
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