java基礎第二十七天 資料庫

2021-08-07 11:35:27 字數 3026 閱讀 9430

statement 與 preparedstatement的區別:

1.語法不同

statement只支援靜態編譯,sql語句是寫死的。

preparedstatement支援預編譯,用?號來佔位。

2.效率不同

statement每次都要傳送一條sql語句,不支援快取,執行效率低。

preparedstatement支援預編譯,快取在資料庫,只需傳送引數,執行效率快。

3.安全性不同

statement容易被注入。

注入:狡猾的分子可以編寫特殊的sql語句來入侵資料庫。

preparedstatement預編譯的好處:

preparedstatement的預編譯可以使你可以通過設定不同的引數來查詢不同的目標,在資料庫端,只會儲存一段預編譯語句,但是如果你使用statement來傳送語句,每傳送一條,資料庫中就會存一條,這可能會造成占用大量記憶體。

preparedstatement還有批處理的功能

1、addbatch();

2、executebatch();

//示例**

for (int i = 0; i < 1000; i++)

}//最後一次批量執行

st.executebatch();

能夠呼叫儲存過程

connection conn = jdbcutil.getconnection();

string sql = "call addprocedure(?,?,?)";

callablestatement st = conn.preparecall(sql);

st.setint(1, 100);

st.setint(2, 200);

//註冊返回值型別

st.registeroutparameter(3, types.integer);

//執行查詢

st.executequery();

//獲取結果

int result = st.getint(3);

system.out.println(result);

資料庫連線池:

池子就是乙個容器(list,map,set)

容器裡面存放的是資料庫連線(已經連上資料庫的connection例項)

使用使用的時候從容器獲取乙個連線(datasource.getconnection())

運算元據庫(curd)

使用結束後,關閉連線(conn.close(),但不是真正的關閉連線,而是把連線還給連線池,怎麼實現呢,是由底層實現)

常用的資料庫連線池:

dbcp c3p0 druid
配置檔案

#連線設定

driverclassname=com.mysql.jdbc.driver

url=jdbc:mysql://localhost:3306/test

username=root

password=root

#initialsize=10

#maxidle=20

#minidle=5

#最大連線數量

maxactive=50

#是否在自動**超時連線的時候列印連線的超時錯誤

logabandoned=true

#是否自動**超時連線

removeabandoned=true

#超時時間(以秒數為單位)

#設定超時時間有乙個要注意的地方,超時時間=現在的時間-程式中建立connection的時間,如果maxactive比較大,比如超過100,那麼removeabandonedtimeout可以設定長一點比如180,也就是三分鐘無響應的連線進行**,當然應用的不同設定長度也不同。

removeabandonedtimeout=180

##maxwait代表當connection用盡了,多久之後進行**丟失連線

maxwait=1000

建立連線池

datasource = basicdatasourcefactory.createdatasource(properties);
配置檔案

driverclassname=com.mysql.jdbc.driver

url=jdbc:mysql://localhost:3306/test

username=root

password=root

initialsize = 10

maxactive= 50

maxidle= 20

minidle= 10

maxwait = 1000

poolpreparedstatements=true

建立連線池

datasource = druiddatasourcefactory.createdatasource(properties);
出現資料庫異常時,所執行的資料庫操作需要恢復操作之前的狀態,那麼jdbc是怎麼實現的呢?

jdbc事物管理

開啟事物  

conn.setautocommit(false);//預設是true,自動提交

需要手動提交

//curd...

//curd...

conn.commit();

出現異常

//回滾

conn.rollback();

最後釋放資源

**示例:

public class jdbctransaction 

catch(exception e) catch (sqlexception e1)

}finally}}

第二十七天

今天主要學習了linux的程序通訊 程序通訊可分為 管道通訊 訊號通訊 共享記憶體和訊息佇列 管道通訊 分無名管道和有名管道,無名管道一般用於父子程序之間 訊號通訊的產生方式 1.按鍵產生 2.硬體異常產生 除數為0,無效儲存訪問等 3.程序用kill函式給另乙個程序發訊號 4.使用者用kill命令...

學習第二十七天

一 this關鍵字 this關鍵字 this動態繫結物件 1 this所在的函式是否是通過new呼叫使用的,如果是指向當前new的物件 2 this是通過物件.函式名 使用,this指代當前呼叫的物件 3 this預設指代window,window指全域性物件 定義的全域性變數,預設定義window...

第二十七天 客服支援

問 產品穩定,產品也有亮點,培訓也上檔次,文件也齊全。確實,客服這回清閒了。那客服的作用是什麼呢?答 客服當然有用了。首先,對於上一講的需求,計算機室人員要交給客服部而不是直接交給開發部。客服部會首先把需求記錄進 需求與bug任務管理系統 內部溝通後,把需求能解決的解決,解決不了的送到開發部測試人員...