成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

postgreSQL的crud操作詳解

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

postgreSQL學(xué)習筆記

歡迎大家指出問題!

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

安裝一路下一步。

1.創(chuàng)建數(shù)據(jù)庫

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

2.刪除數(shù)據(jù)庫

​ dropdb database;
​ DROP DATABASE database_name;

3.創(chuàng)建表

​ create table 表名 (title varchar(255), content text);
//修改表名
alter table posts rename to 表名;
//查看表信息(結(jié)構(gòu))
\d 表名
//執(zhí)行這個sql文件
\i a.sql
//切換數(shù)據(jù)顯示方式(橫向和縱向顯示) 
\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 '這是一個學(xué)生信息表';

案例表:

4.刪除表

​ DROP TABLE students;

5.數(shù)據(jù)類型

數(shù)值型:

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

文字型: ​

char varchar text

布爾型: ​

boolean

日期型: ​

date time timestamp

特色類型: ​

Array inet(網(wǎng)口類型) JSON XML

6.添加表約束

unique:所在數(shù)據(jù)中值必須唯一

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

default:字段默認值

7.INSERT語句

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

8.數(shù)據(jù)抽出選項:

order by asc升序 desc降序

limit 限制返回數(shù)據(jù)條數(shù)

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

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

9.統(tǒng)計抽出數(shù)據(jù)

distinct 去重

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

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

10.方便的函數(shù)

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.變更表結(jié)構(gòu)

//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.操作多個表

//兩表的關(guān)聯(lián)查詢
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語句,把業(yè)務(wù)系統(tǒng)中常用的select語句簡化成一個類似于表的對象,便于簡單讀取和開發(fā)。 (對于經(jīng)常使用的select語句建立視圖便于編碼和管理)

//創(chuàng)建一個視圖(通過 \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.使用事務(wù)

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

PostgreSQL數(shù)據(jù)庫事務(wù)使用

begin 開啟事務(wù)

commit 提交

rollback 回滾

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

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

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

/******************************************************************
* 表名:test3
* Made by 碼農(nóng)下的天橋
******************************************************************/
--use MYDB;--你可以指定自己的數(shù)據(jù)庫
/******************************************************************
****************************各種常用查詢***************************
******************************************************************/
------------------------------------
--用途:復(fù)雜形式的查詢語句,用于查詢分頁數(shù)據(jù)。
--這個是泛用型的,假如你要根據(jù)用戶輸入去查詢,那么最好不要用這個了,
--以免出現(xiàn)sql注入。
--參數(shù)說明:
---_offset int 需要取的記錄的開始位置
---_limit int 需要獲取記錄的總條數(shù),針對分頁而言,就是分頁的pagesize。
---_columns varchar(800) 需要獲取的字段
---_where varchar(800) 需要過濾的條件譬如: where id10 可以帶where,不過建議不要帶。
---_orderby varchar(800) 需要進行排序的提交,譬如:order by id
---_totalCount int 返回總共記錄條數(shù)。
---_totalPages int 返回總共頁數(shù)。
------------------------------------
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,'*')));
--分析傳過來的參數(shù),構(gòu)造動態(tài)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 語句構(gòu)造
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;
--計算總共頁數(shù)
_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 '動態(tài)構(gòu)造語句為:%',_dymatic_sql;
return query EXECUTE _dymatic_sql;
END;
$$ language plpgsql VOLATILE;
------------------------------------
--用途:復(fù)雜形式的查詢語句,用于查詢多條記錄數(shù)據(jù)。
--這個是泛用型的,假如你要根據(jù)用戶輸入去查詢,那么最好不要用這個了,
--以免出現(xiàn)sql注入。
--參數(shù)說明:
---_offset int 需要取的記錄的開始位置
---_limit int 需要獲取記錄的總條數(shù),針對分頁而言,就是分頁的pagesize。
---_columns varchar(800) 需要獲取的字段
---_where varchar(800) 需要過濾的條件譬如: where id10 可以帶where,不過建議不要帶。
---_orderby varchar(800) 需要進行排序的提交,譬如:order by id
---_totalCount int 返回總共記錄條數(shù)。
------------------------------------
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,'*')));
--分析傳過來的參數(shù),構(gòu)造動態(tài)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 語句構(gòu)造
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;
--計算總共頁數(shù)
_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 '動態(tài)構(gòu)造語句為:%',_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;
------------------------------------
--用途:復(fù)雜形式的查詢語句,用于查詢前面第幾條記錄,這個就相當好了
--這個是泛用型的,假如你要根據(jù)用戶輸入去查詢,那么最好不要用這個了,
--以免出現(xiàn)sql注入。
--參數(shù)說明:
---_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,'*')));
--分析傳過來的參數(shù),構(gòu)造動態(tài)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 語句構(gòu)造
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 '動態(tài)構(gòu)造語句為:%',_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:='沒有指定需要刪除的數(shù)據(jù)!';
return;
end if;
_arr_ids:=tools_str2intarray(ids, ',');
_str_ids:=tools_stringify(_arr_ids,',');
--pkey為主鍵,自增的整數(shù), @ 表示判斷pkey是不是在數(shù)組里面。是不是很方便?
/*動態(tài)構(gòu)造執(zhí)行*/
--_str_sql:='DELETE FROM test3 where t3id in ('||_str_ids||') ;';
--EXECUTE _str_sql;
/*直接執(zhí)行*/
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;

對應(yīng)dal調(diào)用文件:

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工具生成的自動訪問數(shù)據(jù)庫的一個模板,作者為“碼農(nóng)下的天橋”
*生成的類名稱:
* @author 碼農(nóng)下的天橋
* @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
*存儲過程參數(shù):
*@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參數(shù)定義
int _total = 0 ;
int _pagesize = 0 ;
int _pageindex = 0 ;
int _totalpages = 0 ;
//output參數(shù)定義結(jié)束
//調(diào)用存儲過程
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);
//取回參數(shù)
_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); //返回游標必須在一個事務(wù)中,提交完以后將autocommit還原。
//釋放資源
__rslist.close();
_stmt.close();
__myconn.close();}
catch (Exception __e){
System.out.println("在運行[test3DAL]的List_Condition時候出現(xiàn)錯誤。");
__e.printStackTrace();
}
return pres;
}
 
/**
*存儲過程名稱:test3_Insert
*存儲過程參數(shù):
*param t3id 【主鍵】
    t3name
    t_birthday
    myage
    isadmin
    myintro
    price
 *
*@return
*/
public OperationResult Insert(test3Model model){
OperationResult __ores=new OperationResult();
/*output參數(shù)定義*/
int t3id = 0 ;
DataRow returnInfo=new DataRow();
boolean status = false ;
String message = "" ;
/*output參數(shù)定義結(jié)束*/
/*調(diào)用存儲過程*/
 
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();
 
/*取回參數(shù)*/
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
*存儲過程參數(shù):
* t3id【主鍵】
    t3name
    t_birthday
    myage
    isadmin
    myintro
    price
 *
*@return
*/
public OperationResult Update(test3Model model){
OperationResult __ores=new OperationResult();
/*output參數(shù)定義*/
boolean status = false ;
String message = "" ;
/*output參數(shù)定義結(jié)束*/
/*調(diào)用存儲過程*/
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();
/*取回參數(shù)*/
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
*存儲過程參數(shù):
*@param ids    【參數(shù)名稱:ids    參數(shù)類型:nvarchar 對應(yīng)java類型:String 長度:400   】
*
*@return
*/
public OperationResult DeleteList( String ids){
/*output參數(shù)定義*/
OperationResult __ores=new OperationResult();
boolean status = false ;
String message = "" ;
/*output參數(shù)定義結(jié)束*/
/*調(diào)用存儲過程*/
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();
/*取回參數(shù)*/
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
*存儲過程參數(shù):
*@param t3id   【參數(shù)名稱:id    參數(shù)類型:int  對應(yīng)java類型:int  長度:非字符類型 】
*
*@return DataTable對象。
*/
 
public test3Model GetRecord( int t3id ){
/*調(diào)用存儲過程*/
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
*存儲過程參數(shù):
*@param topN   【參數(shù)名稱:topN   參數(shù)類型:int  對應(yīng)java類型:int  長度:非字符類型 】
*@param columns   【參數(shù)名稱:columns   參數(shù)類型:nvarchar 對應(yīng)java類型:String 長度:800   】
*@param condition  【參數(shù)名稱:condition  參數(shù)類型:nvarchar 對應(yīng)java類型:String 長度:800   】
*@param orderColumn  【參數(shù)名稱:orderColumn  參數(shù)類型:nvarchar 對應(yīng)java類型:String 長度:800   】
*
*@return DataTable對象。
*/
public DataTable Top_Condition( int topN, String columns, String condition, String orderColumn ){
/*調(diào)用存儲過程*/
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;
  }
}
 

這只是一份模板而已。

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《postgreSQL的crud操作詳解》,本文關(guān)鍵詞  postgreSQL,的,crud,操作,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《postgreSQL的crud操作詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于postgreSQL的crud操作詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    精品视频一区二区在线| 天天骑天天干| 在线天堂中文| 美女免费视频一区二区| 精品一区二区三区免费毛片爱| 国产精品国产精品国产| 最新日韩欧美| 久久久久无码精品| 欧美性大战久久久久久久蜜臀| 色资源二区在线视频| www.午夜色大片| 精精国产xxxx视频在线| 日韩一区二区三区在线免费观看| 欧美一级片网址| 欧美特黄一区| 欧美啪啪免费视频| 久久精品久久精品亚洲人| 日韩精品影院| 亚洲黄色小说视频| 在线视频在线视频7m国产| 日韩午夜在线| 午夜婷婷在线观看| 国产亚洲精品激情久久| av在线免费观看网址| 黄色日韩精品| 亚洲韩国精品一区| 国产乱码精品一区二区三区五月婷| 午夜日本精品| 视频区小说区图片区| 美女搞黄视频在线观看| 中文字幕精品视频在线| av观看免费| 国产suv一区二区| 亚洲中午字幕| 天堂网av2014| 国产精品免费视频久久久| 亚洲精品视频久久| 亚洲在线精品视频| 日韩av电影国产| 青青草这里只有精品| 精品不卡一区| 日韩av一区二区在线观看| 欧美激情手机在线视频| 亚洲伊人伊成久久人综合网| 国产欧美日韩精品一区二区三区| 久久中文免费视频| 国产成人亚洲精品播放器下载| 久久精品国产第一区二区三区| 91福利区一区二区三区| 日韩av毛片| 熟妇女人妻丰满少妇中文字幕| 免费一级suv好看的国产网站| 美女精品一区最新中文字幕一区二区三区| 国产精品777777在线播放| 在线电影欧美日韩一区二区私密| 96sao在线精品免费视频| 青春草在线观看| 性欧美大胆高清视频| 625成人欧美午夜电影| 天堂成人在线| 精品日韩在线一区| www欧美在线| 成人网站免费观看| 国产日韩亚洲欧美在线| 日韩美女视频网站| 国产男男chinese网站| 五月婷婷免费视频| 国产精品.com| 亚洲天堂成人在线观看| 69影院欧美专区视频| 欧美3p在线观看| 97在线观看免费观看高清| 亚洲国产精品999| 一区二区在线观看免费| 给我看免费高清在线观看| 欧美性性性性性ⅹxxbbbb| 成人免费av资源| 一夜七次郎国产精品亚洲| 中文字幕日韩在线观看| 性xxxx奶大欧美高清| 涩涩涩999| 成年人在线免费看片| 6080午夜| 国产三级精品三级在线| 中文字幕一区二区精品区| 日产精品久久久| 黄网在线观看网址入口| 菠萝蜜一区二区| 欧美日韩国产欧美日美国产精品| 国产精品99久久久久久久久久久久| 日韩高清一级片| 九九国产精品视频| 视频国产一区| 日韩视频免费播放| 美国毛片一区二区三区| 成人小视频在线| 好吊操这里只有精品| 黄色亚洲网站| 精品一卡二卡三卡四卡日本乱码| 欧美日一区二区在线观看| 欧洲在线/亚洲| 99久久久国产精品| 不卡av在线网站| 日韩污视频在线观看| 精品国产乱码久久久久久鸭王1| 超碰在线观看免费版| 亚洲精品按摩视频| 国产探花在线精品| 国产一区在线观| 国产原创一区| 绯色av一区二区| 日日操夜夜爽| 一区二区三区| 高潮毛片无遮挡| 黄视频在线免费| 欧美日韩三区| 精品国产一区二区在线观看| 亚洲视频精品在线| 中文字幕视频在线免费欧美日韩综合在线看| 国产麻豆免费| 北条麻妃在线一区二区| 97dyy97影院理论片在线| 亚洲电影在线观看| 亚洲欧美成人网| 制服丝袜国产精品| 性生活视频网址| 欧美另类变人与禽xxxxx| 国产欧美久久久| 久久久精品国产免费观看同学| 久久av无码精品人妻系列试探| а√天堂资源官网在线资源| 亚洲视频一起| 亚洲国产成人av好男人在线观看| 一区二区三区在线高清| 影音先锋国产资源| 亚洲AV无码一区二区三区少妇| 91精品中文字幕一区二区三区| 在线观看国产成人| 一区二区三区四区在线不卡高清| 韩国一区二区三区四区| 黄色一级片在线看| 开心激情综合| 99久久99久久免费精品小说| 久久久综合av| 成人一区而且| 在线www天堂网在线| 欧美videos另类齐全| 日韩精品一区二区三区不卡| 香蕉视频网站在线观看| 欧美一区二区少妇| 先锋影音网一区| 久久a爱视频| 能在线观看的av| а√在线中文网新版地址在线| 韩国精品主播一区二区在线观看| 国产精品久久久久久久久鸭| 亚洲精品人妻无码| 亚洲最大激情网| 性色av一区二区三区| fc2成人免费视频| 99精品国产一区二区三区| 亚洲av首页在线| 国产秒拍福利视频露脸| 丝袜国产日韩另类美女| 欧美日韩国产观看视频| 天堂网在线中文| 俄罗斯一级**毛片在线播放| 正在播放国产对白害羞| 少妇光屁股影院| 亚洲成人a**址| 精品一区二区三区免费毛片爱| 91美女视频在线| 一区二区三区视频免费视频观看网站| 欧美r级电影在线观看| 色婷婷激情久久| 国产精品亚洲自拍| 久视频在线观看| 最近高清中文在线字幕在线观看| 91国偷自产一区二区三区成为亚洲经典| 草裙成人精品一区二区三区| 99国产精品久久| 欧美黑人欧美精品刺激| 国产精品欧美日韩一区二区| chien国产乱露脸对白| 欧美久久影院| 日韩精品第1页| jizzjizzjizzjizzjizzjizzjizz| 精品亚洲免费视频| 欧美资源在线观看| 亚洲欧洲精品一区二区三区不卡| 日本少妇精品亚洲第一区| 国产一区二区精品在线观看| 久久久久综合一区二区三区| 久久久久久人妻一区二区三区| jlzzjizz在线播放观看| 日韩国产高清视频在线| 高潮一区二区三区乱码| 中文字幕在线免费专区| 韩国成人漫画| 欧美俄罗斯性视频| 成人欧美一区二区三区在线| 无码国产精品久久一区免费| 久久久久久久欧美精品| 成人晚上爱看视频| 日韩三级毛片| 亚洲v精品v日韩v欧美v专区| 国产在线视频你懂的| 久久久久久91亚洲精品中文字幕| 欧美日韩国产一区二区三区地区| 国产亚洲欧美色| 日本一区二区视频在线观看| 成人av手机在线观看| 成人黄色国产精品网站大全在线免费观看| 日韩特黄一级片| 男人和女人啪啪网站| 午夜国产视频| 亚洲午夜久久久久久尤物| 男人插曲女人视频免费| 国产日韩av一区| 被男人吃奶添下面好舒服动态图| 经典三级一区二区三区视频| 亚洲天堂精品一区| www.三级.com| 亚洲v.com| dy888午夜| 久久久久久自在自线| 亚洲一区二区三区小说| 日本成人福利| 精品人妻一区二区三区含羞草| 99re热这里只有精品视频| 欧美日本三级| 色婷婷精品视频| 伊人久久大香线| 精品福利视频一区二区三区| 狠狠爱在线视频一区| 久久久久久久电影| 在线观看h网址| а√天堂资源国产精品| 国产精品日韩一区二区三区| 丁香花在线高清完整版视频| 九九热精品在线| 成人免费黄色小视频| 欧美黑人疯狂性受xxxxx野外| 黄色软件视频在线观看| 国产一区二区三区免费| 欧美午夜精品久久久久久久| 九草视频在线观看| 亚洲一区免费| www毛片com| 亚洲国产精品久久久久婷蜜芽| 在线视频精品一区| 黄色免费观看| 成人蜜桃视频| 亚洲第一精品在线观看| 欧美精品在线免费观看| 鲁鲁狠狠狠7777一区二区| bbbbbbbbbbb在线视频| 色偷偷偷在线视频播放| 欧美色图欧美色图| 亚洲精品国产综合久久| 国产大片在线观看| 91大神网址| 日本一区二区在线视频观看| 欧洲成人午夜精品无码区久久| 亚洲欧美日韩一区二区三区在线观看| 欧美.日韩.国产.一区.二区| 亚洲欧洲日韩综合| 亚洲黄页在线观看| 日韩精品―中文字幕| 国内精品久久久久影院薰衣草| 91官网在线观看| www.eeuss影院| 91福利国产精品| 久久丁香综合五月国产三级网站| 凹凸成人在线| 真实国产乱子伦对白在线| 女人帮男人橹视频播放| 中文字幕21页在线看| 国产对白在线| 亚洲精品天堂在线| 欧美重口另类videos人妖| 国产一区二区中文| 日韩中文字幕无砖| 日韩国产一区三区| 亚洲成av人片www| 国产三级短视频| 免费成人三级| 快射av在线播放一区| 日本午夜大片| 一本到不卡免费一区二区| 国产69精品久久久久9999人| 在线激情av| 日本黄色网网页| 在线看日韩精品电影| 亚洲s色大片在线观看| 一本大道久久加勒比香蕉| 亚洲乱妇老熟女爽到高潮的片| www成人免费观看网站| 成人亚洲欧美激情在线电影| 在线电影看在线一区二区三区| 美女久久久久久久久久久| 一区二区三区回区在观看免费视频| 99草草国产熟女视频在线| 色伊人久久综合中文字幕| 美女毛片一区二区三区四区| 国产伦精品一区二区| 国产福利视频导航| 日本少妇高潮喷水xxxxxxx| 超免费在线视频| 国产成人精品免费视| xx欧美xxx| 国产婷婷在线观看| 精品亚洲二区| 久久精品综合视频| 日韩欧美亚洲v片| 成年网站免费| 丝袜足脚交91精品| 欧美裸体男粗大视频在线观看| 自拍偷拍国产亚洲| 九九热视频免费| 一区二区久久精品66国产精品| 欧美sss在线视频| 9自拍视频在线观看| 日本天堂影院在线视频| 国内爆初菊对白视频| 天堂影院一区二区| 国色天香久久精品国产一区| av中文在线资源库|