• 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

  • 相关阅读:
    《构建之法》阅读笔记4
    《构建之法》阅读笔记3
    《构建之法》阅读笔记2
    《构建之法》阅读笔记1
    Android可折叠式菜单栏
    Material卡片式布局+下拉刷新+完整代码
    android悬浮按钮的使用
    androidStdio下载与安装以及安装过程问题解释
    html给图片划分区域添加链接
    UI进阶2-滑动菜单
  • 原文地址:https://www.cnblogs.com/qiyebao/p/4472575.html
Copyright © 2020-2023  润新知