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任務管理系統 內部溝通後,把需求能解決的解決,解決不了的送到開發部測試人員...