preparedstatement
properties
dbcp連線池
事務是為了解決sql語句執行出問題的情況,比如張三需要給王五轉500元錢,需要完成張三的餘額減500,王五的餘額加500,sql執行完張三的更新操作後出現了異常,就不會再繼續執行sql,王五的餘額不會增加,最終的結果為張三減少五百,王五的餘額不發生改變。
使用setautocommit(false)方法開啟事務,就是將自動提交功能關閉。
使用rollback()在出現異常後回滾到開啟事務階段
使用commit()方法提交執行結果
如:
public
class
jdbc_02_transaction
catch
(exception throwables)
catch
(sqlexception e)
throwables.
printstacktrace()
;}finally
}}
使用preparedstatement可以防止sql注入問題,安全性更高。
sql注入問題:在拼接sql時,有一些sql的特殊關鍵字參與字串的拼接。會造成安全性問題
如:輸入使用者隨便,輸入密碼:a』 or 『a』 = 'a。
sql語句使用?作為佔位符
select
*from
user
where username = ? and password = ?;
使用set***(引數1,引數2)方法來為?賦值。
引數1:?的位置編號 從1 開始
引數2:?的值
使用配置檔案jdbc.properties檔案為jdbc提高需要的引數值。
使用方法:
public
class
propertiesutil
private
static properties properties = null;
public
static properties getproperties()
catch
(ioexception e)
}return properties;
}}
public
class
dbutil
public
static
void
close
(autocloseable obj)
catch
(exception e)}}
}
常用於解決高併發問題。
更快的系統響應速度:資料庫連線池在初始化過程中,往往就已經建立了若干個資料庫連線物件放到池中備用這時,連線的初始化工作已完成,對於業務請求處理而言,直接利用現有的可用連線,避免了資料庫連線初始化和釋放過程的時間,從而縮減了系統整體的響應時間
統一的連線管理,避免資料庫連線遺漏:在較為完備資料庫連線池中,可以根據預先的連線占用超時設定,強制**占用連線,從而避免了常規資料庫連線操作中可能出現的資源洩露情況
public
class
basicdatasourceutil
private
static basicdatasourceutil bdsu = null;
//注意解決高併發問題,所以單例一定是執行緒安全的
public
static basicdatasourceutil getinstance()
}}return bdsu;
}//獲取連線池
public basicdatasource getbasicdatasource()
}
public
class
jdbc_03_bdsutest
catch
(sqlexception e)
finally
}}
事務 事務併發
最近工作非常鬱悶,天天被領導盯著。主要是系統近來死鎖發生在頻率很高。最終,經過大家的共同努力,我們成功的定位並解決了問題,所以把過程中學習的知識與經驗分享一下 問題背景 系統中有乙個賬戶模組,負責管理和維護會員的各種資金及明細,對外的功能涉及資金的增加與扣減等。通過監控系統發現,當外圍系統併發訪問和...
事務 唯讀事務
b 沒有事務 b 保證了sql語句級別的讀一致性。即在一條sql語句執行期間,它只會看到執行前點的資料狀態,而不會看到執行期間資料被其他sql改變的狀態。存在的問題 比如你做乙個報表查詢,在執行完第一條sql的時候,執行第二條查詢sql,而這個之間有資料被改變了,第二條資料查詢就有可能不一致 b 唯...
事務 事務操作 事務隔離級別
事務是邏輯上的一組操作,要麼都執行,要麼都不執行。例如 銀行轉賬,a轉賬1000元給b,這個轉賬就涉及到兩個操作 將a餘額減去1000元,將b餘額加上1000元。但是外一在轉賬的過程中銀行的系統奔潰,導致a只減了,b沒有加,這樣就出錯了。事務就是要保證這兩個操作,要麼都成功,要麼都失敗。事務必須同時...