校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > postgreSQL的crud操作詳解

postgreSQL的crud操作詳解

熱門標簽:地圖標注和圖片名稱的區別 美容工作室地圖標注 海豐有多少商家沒有地圖標注 重慶自動外呼系統定制 辦公外呼電話系統 打電話智能電銷機器人授權 合肥公司外呼系統運營商 外呼調研系統 漯河外呼電話系統

postgreSQL學習筆記

歡迎大家指出問題!

版本從6.0開始支持SQL解釋器

安裝一路下一步。

1.創建數據庫

​ //命令行操作
​ createdb database_name;
​ CREATE DATABASE database_name;
psql -l  //展示所有數據庫
psql database_name //進入數據庫

2.刪除數據庫

​ dropdb database;
​ DROP DATABASE database_name;

3.創建表

​ create table 表名 (title varchar(255), content text);
//修改表名
alter table posts rename to 表名;
//查看表信息(結構)
\d 表名
//執行這個sql文件
\i a.sql
//切換數據顯示方式(橫向和縱向顯示) 
\x 
create table posts (
  id serial primary key,
  title varchar(255) not null,
  content text check(length(content) > 3),
  is_draft boolean default FALSE,
  created_date timestamp default 'now');
CREATE TABLE public.students
(
 id integer NOT NULL,
 name character(128),
 subjects character(1),
 CONSTRAINT student2_pkey PRIMARY KEY (id)
)
WITH (
 OIDS=FALSE
);
ALTER TABLE public.students
 OWNER TO postgres;
COMMENT ON TABLE public.students
 IS '這是一個學生信息表';

案例表:

4.刪除表

​ DROP TABLE students;

5.數據類型

數值型:

integer real serial(序列型,一般用于自增字段)

文字型: ​

char varchar text

布爾型: ​

boolean

日期型: ​

date time timestamp

特色類型: ​

Array inet(網口類型) JSON XML

6.添加表約束

unique:所在數據中值必須唯一

check:字段設置條件,可以指定函數check(length(content) > 3)必須超過3個字符

default:字段默認值

7.INSERT語句

insert into 表名(cloum1,cloum2) value(a,b);

8.數據抽出選項:

order by asc升序 desc降序

limit 限制返回數據條數

offset 偏移量(從哪條數據開始)

//分頁查詢limit和offset結合使用。 
select * from users order by score desc limit 3;
select * from users order by score desc limit 3 offset 3;

9.統計抽出數據

distinct 去重

group by/having(在group by之后進行再次篩選) 分組

select team,max(score) from users group by team having max(score)>25 order by max(score);

10.方便的函數

length concat(連接兩個字符串) alias(別名) substring(截取字符串) random

 select player,length(player) from users;
 select player,concat(player,"/",team) from users;
 select player,concat(player,"/",team) as "球員信息" from users;
 select concat('我',substring(team,1,1)) as "球隊首文字" from users;
 //隨機抽獎
 select player from users order by random() limit 1;

11.更新和刪除

update [table] set [field=newvalue,…] where …
delete from [table] where …

eg:

 update users set score = score + 100 where team IN ("勇士","騎士");

12.變更表結構

//alter table [tablename] …
//給表添加一條fullname字段
alter table users add fullname varchar(255);
//給哪個表的字段建索引(索引提高查詢效率,但是增刪效果不好)
create index 索引名 on users(字段名);
//刪除索引
drop index 索引名;
//修改列名
alter table users rename player to nba_player;
//修改字段的的長度
alter table users alter nba_player type varchar(128);

13.操作多個表

//兩表的關聯查詢
select users.player,twitters.content from users,twitters where users.id = twitters.user_id;
//別名
select u.player,t.content from users as u,twitters as t where u.id = t.user_id;

14.使用視圖

​ 視圖:視圖就是一個select語句,把業務系統中常用的select語句簡化成一個類似于表的對象,便于簡單讀取和開發。 (對于經常使用的select語句建立視圖便于編碼和管理)

//創建一個視圖(通過 \dv 查看視圖描述)
create view curry_twitters as select u.player,t.content from users as u,twitters as t where u.id = t.user_id;
//要進行查詢時
select * from curry_twitters;
//刪除視圖
drop view curry_twitters; 

15.使用事務

數據庫事務:是指作為單個邏輯工作單元執行的一系列操作,要么一起成功,要么一起失敗。必須滿足ACID(原子性、 一致性、隔離性、持久性)

PostgreSQL數據庫事務使用

begin 開啟事務

commit 提交

rollback 回滾

eg:
begin;
update users set score = 50 where player = '庫里';
update users set score = 60 where player = '哈登';
commit; //如果不想跟新可以 rollback;

補充:postgresql一般crud存儲過程參考

這里是一份經過再三調試測試而成功的postgres數據庫單表crud存儲過程,請注意,對于多結果的返回方式,請查看getPageByCondition的書寫方式,用的是refcursor,返回一個cursor,同時可以返回其他out,inout參數,但是refcursor必須在事務中調用,所以java端的調用過程需要注意,好吧,我同時放出一份dal樣板,大家可以直接copy來用。

/******************************************************************
* 表名:test3
* Made by 碼農下的天橋
******************************************************************/
--use MYDB;--你可以指定自己的數據庫
/******************************************************************
****************************各種常用查詢***************************
******************************************************************/
------------------------------------
--用途:復雜形式的查詢語句,用于查詢分頁數據。
--這個是泛用型的,假如你要根據用戶輸入去查詢,那么最好不要用這個了,
--以免出現sql注入。
--參數說明:
---_offset int 需要取的記錄的開始位置
---_limit int 需要獲取記錄的總條數,針對分頁而言,就是分頁的pagesize。
---_columns varchar(800) 需要獲取的字段
---_where varchar(800) 需要過濾的條件譬如: where id10 可以帶where,不過建議不要帶。
---_orderby varchar(800) 需要進行排序的提交,譬如:order by id
---_totalCount int 返回總共記錄條數。
---_totalPages int 返回總共頁數。
------------------------------------
create or replace function test3_getListByCondition(
INOUT pageindex INT,
INOUT pagesize INT,
IN _columns VARCHAR(800),
IN _where VARCHAR(800),
IN _orderby VARCHAR(800),
out _totalCount INT,
out _totalPages INT)
returns SETOF record
AS
$$
DECLARE condition_columns VARCHAR(800);
DECLARE condition_where varchar(800);
DECLARE condition_orderby VARCHAR(800);
DECLARE _dymatic_sql VARCHAR(1600);
DECLARE _beginNO INT;
DECLARE _dynamic_getCount varchar(1600);
DECLARE _theOffset INT;
DECLARE _tmpInt1 INT;
BEGIN
condition_where:=ltrim(rtrim(COALESCE(_where,'')));
condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
--分析傳過來的參數,構造動態sql語句。
IF "character_length"(condition_where)>0 THEN
IF strpos(condition_where, 'where ')!=1 THEN
condition_where:='where ' || condition_where;
END IF;
END IF;
--order by 語句構造
IF "character_length"(condition_orderby)>0 THEN
IF strpos(condition_orderby, 'order ')!=1 THEN
condition_orderby:='order by '||condition_orderby;
END IF;
END IF;
 
--判斷pageindex是否合法及pagesize是否合法
IF pageindex1 THEN
pageindex:=1;
END IF;
IF pagesize1 THEN
pagesize:=20;
END IF;
 
_dynamic_getCount:='select count(*) from test3 '||condition_where|| ' ' ;
EXECUTE _dynamic_getCount INTO _totalCount;
IF _totalCount1 THEN
pageindex:=1;
RETURN;
END IF;
--計算總共頁數
_tmpInt1:=_totalCount%pagesize;
IF _tmpInt1=0 THEN
_totalPages:=_totalCount / pagesize;
ELSE
_totalPages:=(_totalCount-_tmpInt1)/pagesize+1;
END IF;
IF _totalPages  pageindex then
pageindex:=_totalPages;
END IF;
_theOffset:=(pageindex-1) * pagesize+1;
_dymatic_sql:='select '||condition_columns||' from test3 '||condition_where||' '||condition_orderby||' limit '||pagesize||' '|| ' offset '||_theOffset||' ';
--raise info '動態構造語句為:%',_dymatic_sql;
return query EXECUTE _dymatic_sql;
END;
$$ language plpgsql VOLATILE;
------------------------------------
--用途:復雜形式的查詢語句,用于查詢多條記錄數據。
--這個是泛用型的,假如你要根據用戶輸入去查詢,那么最好不要用這個了,
--以免出現sql注入。
--參數說明:
---_offset int 需要取的記錄的開始位置
---_limit int 需要獲取記錄的總條數,針對分頁而言,就是分頁的pagesize。
---_columns varchar(800) 需要獲取的字段
---_where varchar(800) 需要過濾的條件譬如: where id10 可以帶where,不過建議不要帶。
---_orderby varchar(800) 需要進行排序的提交,譬如:order by id
---_totalCount int 返回總共記錄條數。
------------------------------------
create or replace function test3_getPageByCondition(
INOUT pageindex INT,
INOUT pagesize INT,
IN _columns VARCHAR(800),
IN _where VARCHAR(800),
IN _orderby VARCHAR(800),
out _totalCount INT,
out _totalPages INT,
out _refcursor refcursor
)
returns SETOF record
AS
$$
DECLARE condition_columns VARCHAR(800);
DECLARE condition_where varchar(800);
DECLARE condition_orderby VARCHAR(800);
DECLARE _dymatic_sql VARCHAR(1600);
DECLARE _beginNO INT;
DECLARE _dynamic_getCount varchar(1600);
DECLARE _theOffset INT;
DECLARE _tmpInt1 INT;
BEGIN
condition_where:=ltrim(rtrim(COALESCE(_where,'')));
condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
--分析傳過來的參數,構造動態sql語句。
IF "character_length"(condition_where)>0 THEN
IF strpos(condition_where, 'where ')!=1 THEN
condition_where:='where ' || condition_where;
END IF;
END IF;
--order by 語句構造
IF "character_length"(condition_orderby)>0 THEN
IF strpos(condition_orderby, 'order ')!=1 THEN
condition_orderby:='order by '||condition_orderby;
END IF;
END IF;
--判斷pageindex是否合法及pagesize是否合法
IF pageindex1 THEN
pageindex:=1;
END IF;
IF pagesize1 THEN
pagesize:=20;
END IF;
_dynamic_getCount:='select count(*) from test3 '||condition_where|| ' ' ;
EXECUTE _dynamic_getCount INTO _totalCount;
IF _totalCount1 THEN
pageindex:=1;
RETURN;
END IF;
--計算總共頁數
_tmpInt1:=_totalCount%pagesize;
IF _tmpInt1=0 THEN
_totalPages:=_totalCount / pagesize;
ELSE
_totalPages:=(_totalCount-_tmpInt1)/pagesize+1;
END IF;
IF _totalPages  pageindex then
pageindex:=_totalPages;
END IF;
_theOffset:=(pageindex-1) * pagesize+1;
_dymatic_sql:='select '||condition_columns||' from test3 '||condition_where||' '||condition_orderby||' limit '||pagesize||' '|| ' offset '||_theOffset||' ';
--raise info '動態構造語句為:%',_dymatic_sql;
open _refcursor for EXECUTE _dymatic_sql;
RETURN NEXT;
END;
$$ language plpgsql VOLATILE;
------------------------------------
--用途:獲取其中一條記錄
------------------------------------
create or replace function test3_getRecord(in _id integer)
returns SETOF test3
AS
$$
BEGIN
return query select * from test3 where t3id=_id LIMIT 1 OFFSET 0;
END;
$$ LANGUAGE plpgsql VOLATILE;
------------------------------------
--用途:復雜形式的查詢語句,用于查詢前面第幾條記錄,這個就相當好了
--這個是泛用型的,假如你要根據用戶輸入去查詢,那么最好不要用這個了,
--以免出現sql注入。
--參數說明:
---_topN int 需要取的topN條記錄。
---_columns varchar(800) 需要獲取的字段
---_where varchar(800) 需要過濾的條件譬如: where id10 可以帶where,不過建議不要帶。
---_orderby varchar(800) 需要進行排序的提交,譬如:order by id
------------------------------------
create or replace function test3_getTopNbyCondition(IN _topN int,IN _columns VARCHAR(800),IN _where VARCHAR(800),IN _orderby VARCHAR(800))
returns SETOF test3
AS
$$
DECLARE condition_columns VARCHAR(800);
DECLARE condition_where varchar(800);
DECLARE condition_orderby VARCHAR(800);
DECLARE _dymatic_sql VARCHAR(1600);
BEGIN
condition_where:=ltrim(rtrim(COALESCE(_where,'')));
condition_orderby:=ltrim(rtrim(COALESCE(_orderby,'order by t3id')));
condition_columns:=ltrim(rtrim(COALESCE(_columns,'*')));
--分析傳過來的參數,構造動態sql語句。
IF "character_length"(condition_where)>0 THEN
IF strpos(condition_where, 'where ')!=1 THEN
condition_where:='where ' || condition_where;
END IF;
END IF;
--order by 語句構造
IF "character_length"(condition_orderby)>0 THEN
IF strpos(condition_orderby, 'order ')!=1 THEN
condition_orderby:='order by '||condition_orderby;
END IF;
END IF;
_dymatic_sql:='select '||condition_columns||' from test2 '||condition_where||' '||condition_orderby||' limit '||CAST(_topN as VARCHAR)|| ' offset 0 ';
--raise info '動態構造語句為:%',_dymatic_sql;
return query EXECUTE _dymatic_sql;
END;
$$ language plpgsql VOLATILE;
/******************************************************************
*****************************記錄刪除******************************
******************************************************************/
------------------------------------
--用途:刪除多條記錄
------------------------------------
create or replace function test3_DeleteList(in ids VARCHAR(800),out status boolean,out msg VARCHAR(200))
returns record
AS
$$
DECLARE _arr_ids int[];
DECLARE _str_ids "text";
DECLARE _str_sql VARCHAR(1600);
DECLARE _effects int;
BEGIN
IF "character_length"(ids)1 THEN
status:=false;
msg:='沒有指定需要刪除的數據!';
return;
end if;
_arr_ids:=tools_str2intarray(ids, ',');
_str_ids:=tools_stringify(_arr_ids,',');
--pkey為主鍵,自增的整數, @ 表示判斷pkey是不是在數組里面。是不是很方便?
/*動態構造執行*/
--_str_sql:='DELETE FROM test3 where t3id in ('||_str_ids||') ;';
--EXECUTE _str_sql;
/*直接執行*/
delete from test3 where t3id =ANY( _arr_ids);
GET DIAGNOSTICS _effects = ROW_COUNT;
IF _effects>0 THEN
status:=true;
msg:='成功刪除'||_effects||'條記錄!';
ELSE
status:=false;
msg:='沒有刪除任何記錄!';
end if;
 
END
$$ LANGUAGE plpgsql VOLATILE; 
 
/******************************************************************
****************************添加及編輯*****************************
******************************************************************/
 
------------------------------------
--用途:增加一條記錄
------------------------------------
 
create or replace function test3_Insert(
       in __t3name varchar(400) ,
       in __t_birthday date ,
       in __myage smallint ,
       in __isadmin boolean ,
       in __myintro text ,
       in __price float ,
 out __t3id integer,
out _status boolean,
out _msg varchar(200))
returns record AS $$
BEGIN
             
Insert into test3
(
"t3name","t_birthday","myage","isadmin","myintro","price"
)
values(
__t3name,__t_birthday,__myage,__isadmin,__myintro,__price
);
/*判斷添加記錄是否成功。*/
if FOUND then
_status:=true;
_msg:='成功添加記錄.';
__t3id:=currval(pg_get_serial_sequence('test3', 't3id'));
else
_status:=false;
_msg:='無法添加記錄!';
end if;
end;
$$ LANGUAGE plpgsql VOLATILE;
 
------------------------------------
--用途:修改一條記錄
------------------------------------
create or replace function test3_Update(
       in __t3name varchar(400) ,
       in __t_birthday date ,
       in __myage smallint ,
       in __isadmin boolean ,
       in __myintro text ,
       in __price float ,
 in __t3id integer,
out _status boolean,
out _msg varchar(200))
returns record AS $$
BEGIN             
 
update test3 set
"t3name"=__t3name,"t_birthday"=__t_birthday,"myage"=__myage,"isadmin"=__isadmin,"myintro"=__myintro,"price"=__price where t3id=__t3id;
/*判斷保存記錄是否成功。*/
if FOUND then
_status:=true;
_msg:='成功保存記錄.';
else
_status:=false;
_msg:='無法保存記錄!';
end if;
end;
$$ LANGUAGE plpgsql VOLATILE;

對應dal調用文件:

package EasisWeb.DAL;
 
import EasisWeb.config.DBPool;
import Easis.Common.StringUtil;
import Easis.util.DataRow;
import Easis.util.DataTable;
import Easis.util.DataTableHelper;
import java.util.Date;
import Easis.DBUtility.PooledConnection;
import java.sql.*;
import java.util.List;
import java.util.ArrayList;
import Easis.util.OperationResult;
import Easis.util.PagerResult;
import EasisWeb.Model.test3Model;
/**
* 這是利用CodeGen工具生成的自動訪問數據庫的一個模板,作者為“碼農下的天橋”
*生成的類名稱:
* @author 碼農下的天橋
* @version 1.00
*/
public class test3DAL {
 
/*表格各種column*/
public static final String col_t3id="test3";
public static final String col_t3name="test3";
public static final String col_t_birthday="test3";
public static final String col_myage="test3";
public static final String col_isadmin="test3";
public static final String col_myintro="test3";
public static final String col_price="test3";
public static final String PKColumn="t3id"; 
 
/**
*存儲過程名稱:test3_ListByCondition
*存儲過程參數:
*@param pageindex
*@param pagesize
*@param columns   需要獲取的字段
*@param condition  where條件語句
*@param orderColumn  order by排序語句
*
*@return 分頁對象
*/
 
public PagerResult getPageListByCondition(int pageindex,int pagesize, String columns, String condition, String orderColumn){
PagerResult pres=new PagerResult();
//output參數定義
int _total = 0 ;
int _pagesize = 0 ;
int _pageindex = 0 ;
int _totalpages = 0 ;
//output參數定義結束
//調用存儲過程
DataTable res__datatable=new DataTable();
try{
PooledConnection __myconn=DBPool.getConnection();
__myconn.setAutoCommit(false); // return refcursor must within a transaction
CallableStatement _stmt=__myconn.prepareCall("{ call test3_getPageByCondition( ?, ?, ?, ?, ?, ?, ?, ?)}");
_stmt.setInt(1,pageindex);
_stmt.setInt(2,pagesize);
_stmt.registerOutParameter(1,Types.INTEGER);
_stmt.registerOutParameter(2,Types.INTEGER);
_stmt.setString(3,columns);
_stmt.setString(4,condition);
_stmt.setString(5,orderColumn);
_stmt.registerOutParameter(6, Types.INTEGER);
_stmt.registerOutParameter(7, Types.INTEGER);
_stmt.registerOutParameter(8,Types.OTHER);
_stmt.execute();
ResultSet __rslist=(ResultSet)_stmt.getObject(8);
res__datatable=DataTableHelper.rs2datatable(__rslist);
//取回參數
_total=_stmt.getInt(6);
pres.totalrecords=_total;
_pageindex=_stmt.getInt(1);
pres.totalrecords=_total;
_pagesize=_stmt.getInt(2);
pres.pageindex=_pageindex;
pres.pagesize=_pagesize;
_totalpages=_stmt.getInt(7);
pres.totalpages=_totalpages;
pres.datasource=res__datatable;
//--提交并還原
__myconn.commit();
__myconn.setAutoCommit(true); //返回游標必須在一個事務中,提交完以后將autocommit還原。
//釋放資源
__rslist.close();
_stmt.close();
__myconn.close();}
catch (Exception __e){
System.out.println("在運行[test3DAL]的List_Condition時候出現錯誤。");
__e.printStackTrace();
}
return pres;
}
 
/**
*存儲過程名稱:test3_Insert
*存儲過程參數:
*param t3id 【主鍵】
    t3name
    t_birthday
    myage
    isadmin
    myintro
    price
 *
*@return
*/
public OperationResult Insert(test3Model model){
OperationResult __ores=new OperationResult();
/*output參數定義*/
int t3id = 0 ;
DataRow returnInfo=new DataRow();
boolean status = false ;
String message = "" ;
/*output參數定義結束*/
/*調用存儲過程*/
 
try{
PooledConnection __myconn=DBPool.getConnection();
             CallableStatement _stmt=__myconn.prepareCall("{call test3_Insert(?,?,?,?,?,?,?,?,?)}");
 
      _stmt.setObject(1,model.t3name,Types.VARCHAR);
        _stmt.setObject(2,new Timestamp(model.t_birthday.getTime()),Types.DATE);
        _stmt.setObject(3,model.myage,Types.SMALLINT);
        _stmt.setObject(4,model.isadmin,Types.BOOLEAN);
        _stmt.setObject(5,model.myintro,Types.VARCHAR);
        _stmt.setObject(6,model.price,Types.FLOAT);
   _stmt.registerOutParameter(7,Types.INTEGER,-1);
_stmt.registerOutParameter(8, Types.BOOLEAN,1);
_stmt.registerOutParameter(9, Types.VARCHAR,200);
_stmt.execute();
 
/*取回參數*/
t3id=_stmt.getInt(7);
status=_stmt.getBoolean(8);
message=_stmt.getString(9);
 
__ores.id= t3id;
__ores.status=status;
__ores.message=message;
/*釋放資源*/
 
_stmt.close();
__myconn.close();}
catch (Exception __e){
__e.printStackTrace();
__ores.message=__e.toString();
}
return __ores;
}
 
/**
*存儲過程名稱:test3_Update
*存儲過程參數:
* t3id【主鍵】
    t3name
    t_birthday
    myage
    isadmin
    myintro
    price
 *
*@return
*/
public OperationResult Update(test3Model model){
OperationResult __ores=new OperationResult();
/*output參數定義*/
boolean status = false ;
String message = "" ;
/*output參數定義結束*/
/*調用存儲過程*/
DataTable res__datatable=new DataTable();
try{
PooledConnection __myconn=DBPool.getConnection();
CallableStatement _stmt=__myconn.prepareCall("{ call test3_Update( ?,?,?,?,?,?,?,?,?)}");
 
 
      _stmt.setObject(1,model.t3name,Types.VARCHAR);
        _stmt.setObject(2,new Timestamp(model.t_birthday.getTime()),Types.DATE);
        _stmt.setObject(3,model.myage,Types.SMALLINT);
        _stmt.setObject(4,model.isadmin,Types.BOOLEAN);
        _stmt.setObject(5,model.myintro,Types.VARCHAR);
        _stmt.setObject(6,model.price,Types.FLOAT);
   _stmt.setInt(7,model.t3id);
_stmt.registerOutParameter(8, Types.BOOLEAN,1);
_stmt.registerOutParameter(9, Types.VARCHAR,400);
_stmt.execute();
/*取回參數*/
status=_stmt.getBoolean(8);
message=_stmt.getString(9);
 
__ores.status=status;
__ores.message=message;
 
/*釋放資源*/
 
_stmt.close();
__myconn.close();}
catch (Exception __e){
__e.printStackTrace();
}
return __ores;
}
 
/**
*存儲過程名稱:test3_DeleteList
*存儲過程參數:
*@param ids    【參數名稱:ids    參數類型:nvarchar 對應java類型:String 長度:400   】
*
*@return
*/
public OperationResult DeleteList( String ids){
/*output參數定義*/
OperationResult __ores=new OperationResult();
boolean status = false ;
String message = "" ;
/*output參數定義結束*/
/*調用存儲過程*/
DataTable res__datatable=new DataTable();
try{
PooledConnection __myconn=DBPool.getConnection();
CallableStatement _stmt=__myconn.prepareCall("{ call test3_DeleteList( ?, ?, ?)}");
 
_stmt.setString(1,ids); 
_stmt.registerOutParameter(2, Types.BOOLEAN,1); 
_stmt.registerOutParameter(3, Types.VARCHAR,400);
_stmt.execute();
/*取回參數*/
status=_stmt.getBoolean(2);
message=_stmt.getString(3);
 
__ores.status=status;
__ores.message=message;
/*釋放資源*/
 
_stmt.close();
__myconn.close();}
catch (Exception __e){
__e.printStackTrace();
}
return __ores;
}
 
/**
*存儲過程名稱:test3_GetRecord
*存儲過程參數:
*@param t3id   【參數名稱:id    參數類型:int  對應java類型:int  長度:非字符類型 】
*
*@return DataTable對象。
*/
 
public test3Model GetRecord( int t3id ){
/*調用存儲過程*/
DataTable res__datatable=new DataTable();
test3Model model=new test3Model();
try{
PooledConnection __myconn=DBPool.getConnection();
CallableStatement _stmt=__myconn.prepareCall("{ call test3_GetRecord( ?)}");
 
_stmt.setInt(1,t3id);
ResultSet __rslist =_stmt.executeQuery();
res__datatable=DataTableHelper.rs2datatable(__rslist);
model=tryParseModel(res__datatable.get(0));
 
/*釋放資源*/
__rslist.close();
_stmt.close();
__myconn.close();}
catch (Exception __e){
__e.printStackTrace();
}
 
return model;
}
 
/**
*存儲過程名稱:test3_Top_Condition
*存儲過程參數:
*@param topN   【參數名稱:topN   參數類型:int  對應java類型:int  長度:非字符類型 】
*@param columns   【參數名稱:columns   參數類型:nvarchar 對應java類型:String 長度:800   】
*@param condition  【參數名稱:condition  參數類型:nvarchar 對應java類型:String 長度:800   】
*@param orderColumn  【參數名稱:orderColumn  參數類型:nvarchar 對應java類型:String 長度:800   】
*
*@return DataTable對象。
*/
public DataTable Top_Condition( int topN, String columns, String condition, String orderColumn ){
/*調用存儲過程*/
DataTable res__datatable=new DataTable();
try{
PooledConnection __myconn=DBPool.getConnection();
CallableStatement _stmt=__myconn.prepareCall("{ call test3_Top_Condition( ?, ?, ?, ?)}");
 
_stmt.setInt(1,topN);
 
_stmt.setString(2,columns);
 
_stmt.setString(3,condition);
 
_stmt.setString(4,orderColumn);
ResultSet __rslist =_stmt.executeQuery();
res__datatable=DataTableHelper.rs2datatable(__rslist);
 
/*釋放資源*/
__rslist.close();
_stmt.close();
__myconn.close();}
catch (Exception __e){
__e.printStackTrace();
}
 
return res__datatable;
}
 
public test3Model tryParseModel(DataRow drow){
test3Model model=new test3Model();
if(drow==null){
return model;
}
 
/*
return "boolean";
return "Date";
return "double";
return "float";
return "int";
return "long";
return "String";
return "Object";
*/
 
/*嘗試賦值*/
  model.t3id = drow.get("t3id").toInt();
   model.t3name = drow.get("t3name").toString();
   model.t_birthday = drow.get("t_birthday").toDate();
   model.myage = drow.get("myage").toInt();
   model.isadmin = drow.get("isadmin").toBoolean();
   model.myintro = drow.get("myintro").toString();
   model.price = drow.get("price").toFloat();
 return model;
}
 
public Listtest3Model> tryParseList(ListDataRow> dataList){
 Listtest3Model> modellist=new ArrayListtest3Model>();
  if(dataList==null){
  return modellist;
  }
 
  for(DataRow drow :dataList){
  modellist.add(tryParseModel(drow));
  }
 
  return modellist;
  }
}
 

這只是一份模板而已。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL timestamp踩坑記錄與填坑指南
  • PostgreSQL的upsert實例操作(insert on conflict do)
  • PostgreSQL 字符串拆分與合并案例
  • postgresql合并string_agg函數的實例
  • PostgreSQL 序列增刪改案例
  • postgresql重置序列起始值的操作
  • postgresql 實現得到時間對應周的周一案例

標簽:珠海 株洲 蚌埠 錦州 衡陽 來賓 晉城 烏海

巨人網絡通訊聲明:本文標題《postgreSQL的crud操作詳解》,本文關鍵詞  postgreSQL,的,crud,操作,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《postgreSQL的crud操作詳解》相關的同類信息!
  • 本頁收集關于postgreSQL的crud操作詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    日韩午夜激情电影| 欧美日韩第一区日日骚| 麻豆精品精品国产自在97香蕉| 亚洲欧洲在线观看av| 久久免费视频色| 日韩一级免费观看| 884aa四虎影成人精品一区| 91成人网在线| 欧美专区在线观看一区| 色综合天天综合色综合av | 一区在线播放视频| 国产精品久久久久久户外露出| 久久久不卡网国产精品一区| 久久蜜桃av一区精品变态类天堂 | 日韩欧美电影在线| 日韩一区二区三区免费看 | 色偷偷88欧美精品久久久| 99r精品视频| 欧美影片第一页| 欧美精品一级二级三级| 欧美一级艳片视频免费观看| 日韩欧美国产1| 国产调教视频一区| 亚洲四区在线观看| 亚洲一区二区三区不卡国产欧美| 天堂av在线一区| 久久91精品国产91久久小草| 国产999精品久久久久久| 99久久久国产精品| 欧美一区国产二区| 国产午夜精品久久久久久免费视| 亚洲欧美一区二区在线观看| 亚洲狠狠爱一区二区三区| 日韩精品国产欧美| 国产福利一区在线| 欧美色网一区二区| 亚洲电影中文字幕在线观看| 日韩中文字幕麻豆| 亚洲精品写真福利| 亚洲精品在线网站| 亚洲欧美日韩电影| 天天色天天爱天天射综合| 国产精品自拍在线| 欧美性xxxxxxxx| 欧美mv和日韩mv国产网站| 国产精品理伦片| 欧美96一区二区免费视频| 成人国产精品免费观看动漫| 911国产精品| 中文字幕一区在线观看| 日韩成人dvd| 91在线视频在线| 欧美成人激情免费网| 亚洲精品国产精华液| 国产盗摄女厕一区二区三区| 欧美日韩久久不卡| 一区二区三区四区蜜桃| 国产精品自在欧美一区| 欧美一级片免费看| 亚洲图片欧美色图| 99re在线视频这里只有精品| 精品国产人成亚洲区| 亚洲午夜久久久久久久久电影院| 成人国产在线观看| 欧美激情一区二区在线| 九色|91porny| 欧美精品vⅰdeose4hd| 亚洲精品免费在线播放| 成人白浆超碰人人人人| 337p粉嫩大胆色噜噜噜噜亚洲| 丝袜美腿亚洲综合| 欧美三电影在线| 中文字幕一区二区三区蜜月| 麻豆91在线播放免费| 不卡av免费在线观看| 精品国免费一区二区三区| 亚洲午夜电影在线观看| 99视频超级精品| 久久蜜臀精品av| 久久国产综合精品| 欧美日韩在线观看一区二区 | 日韩一区二区三区免费观看| 亚洲第一久久影院| 91国偷自产一区二区三区成为亚洲经典 | 亚洲成av人**亚洲成av**| 国产一区二区在线观看视频| 欧美日韩国产在线观看| 一区二区高清免费观看影视大全| 懂色av中文一区二区三区| 精品国内二区三区| 麻豆成人av在线| 欧美一级高清片| 首页国产丝袜综合| 欧美日本不卡视频| 亚洲女厕所小便bbb| caoporm超碰国产精品| 中文字幕电影一区| 成人午夜视频网站| 国产精品美女久久久久aⅴ国产馆| 捆绑调教一区二区三区| 日韩美女视频一区二区在线观看| 免费在线观看精品| 精品欧美一区二区三区精品久久| 免费观看久久久4p| 日韩免费观看高清完整版在线观看| 久久精品理论片| 亚洲精品一区二区三区蜜桃下载| 国产一区二区看久久| 国产女人aaa级久久久级| 国产福利视频一区二区三区| 欧美国产精品一区二区三区| 成人一区二区三区| 亚洲日本韩国一区| 欧美精选午夜久久久乱码6080| 中文字幕中文字幕在线一区| 欧美日韩黄视频| 黄页网站大全一区二区| 国产精品第四页| 欧美三级三级三级| 另类调教123区| 国产精品三级在线观看| 91污在线观看| 日韩电影在线一区二区三区| 欧美一区二区视频在线观看| 久久超碰97人人做人人爱| 国产精品久久久久精k8 | 日本一区二区免费在线观看视频| 一本色道久久综合亚洲91| 日产国产高清一区二区三区| 国产日韩精品久久久| 一本到三区不卡视频| 日韩av午夜在线观看| 中文字幕av一区二区三区免费看 | 久久久不卡影院| 欧美性生活久久| 国产一区欧美二区| 伊人婷婷欧美激情| 国产亚洲精品7777| 91精品国产一区二区| 国产69精品久久777的优势| 午夜成人在线视频| 中文字幕日韩欧美一区二区三区| 91亚洲国产成人精品一区二区三| 精彩视频一区二区| 亚洲国产视频一区二区| 久久日韩精品一区二区五区| 91视频免费播放| 激情综合网天天干| 亚洲美女视频在线观看| 久久人人超碰精品| 日韩精品在线网站| 欧美日韩国产乱码电影| 99视频精品全部免费在线| 国产永久精品大片wwwapp| 亚洲777理论| 有坂深雪av一区二区精品| 亚洲欧美日韩系列| 中文字幕不卡三区| 久久久亚洲国产美女国产盗摄 | 在线亚洲+欧美+日本专区| 日产欧产美韩系列久久99| 久久久av毛片精品| 欧美电影免费观看高清完整版| 欧美中文字幕不卡| 91精彩视频在线观看| 成人免费高清在线观看| 国产91在线看| 国产精品18久久久久| 日韩av高清在线观看| 亚洲国产视频a| 国产精品久久久久久久浪潮网站 | 香蕉乱码成人久久天堂爱免费| 亚洲视频 欧洲视频| 国产精品成人网| 国产精品动漫网站| 一区二区三区高清在线| 亚洲免费在线看| 亚洲精品国产无套在线观| 亚洲精品精品亚洲| 亚洲综合免费观看高清在线观看| 椎名由奈av一区二区三区| 亚洲欧洲综合另类在线| 国产午夜精品福利| 2017欧美狠狠色| 国产精品初高中害羞小美女文| 尤物av一区二区| 无码av免费一区二区三区试看| 日韩综合在线视频| 激情小说欧美图片| 成人av电影免费在线播放| 色综合久久久久久久| 欧美日韩不卡一区二区| 日韩欧美123| 国产精品国产精品国产专区不蜜| 亚洲免费观看高清| 日韩av高清在线观看| 高清久久久久久| 99精品欧美一区二区蜜桃免费 | 欧美色老头old∨ideo| 欧美日本一区二区在线观看|