JDBC連線資料庫步驟

2021-10-09 06:57:13 字數 2781 閱讀 9278

//宣告資料庫驅動,資料來源的url,用於登入資料庫的賬戶和密碼(將其他功能封裝成方法的時候方便使用)

string driver = "資料庫驅動名稱";

string url = "資料庫連線位址"

string user = "用來連線資料庫的使用者名稱";

string pwd = "用來連線資料庫的密碼";

//載入資料庫驅動

class.forname(driver);

//根據url建立資料庫連線物件connection

connection con = drivermanage.getconnection(url,user,pwd);

//用資料庫連線物件建立statement物件(或preparestatement)

statement s = con.createstatement();

或preparestatement ps = con.preparestatement(sql);

//做資料庫的增刪改查工作

resultset rs = s.executequery();

//關閉結果集物件resultset,statement物件,connection物件,

rs.close();

s.close();

con.close();

//各個步驟的異常處理

1.statement每次執行sql語句,相關資料庫都要執行sql語句的編譯,preparedstatement是預編譯的

preparestatement會先初始化sql,先把這個sql提交到資料庫中進行預處理,多次使用可提高效率。 

createstatement不會初始化,沒有預處理,沒次都是從0開始執行sql.

2.

preparestatement要求預編譯的sql必須是格式固定,使用佔位符獲取引數。

效率比較高,防止sql注入,安全性較高。

statement對sql格式並無要求,因此比較靈活。但是preparestatement效率更高。

preparestatement可以替換變數 

在sql語句中可以包含?,可以用ps=conn.preparestatement("select * from cust where id=?");

int sid=1001;

ps.setint(1, sid);

rs = ps.executequery();

可以把?替換成變數。

而statement只能用

int sid=1001;

statement stmt = conn.createstatement();

resultset rs = stmt.executequery("select * from cust where id="+sid);

來實現。

什麼叫做防sql注入?

密碼輸入1' or '1'='1

string sql = " select * from 使用者表 where username='name' and pass='1' or '1'='1'";

我們會發現如何輸入什麼都是可以查詢到資訊,這樣不安全。

但是preparestatement不會

preparestatement物件防止sql注入的方式是把使用者非法輸入的單引號用\反斜槓做了轉義,從而達到了防止sql注入的目的

(只要使用者輸入的字串中有單引號,那mysql資料庫產商的setstring()這個函式,就會把單引號做轉義)

select * from admin where username = '' and password = ''這是sql語句 我們要傳2個引數,username的引數值是韋小寶,password的引數值是'; truncate table tablename;# 所以完整的語句是select * from admin where username = '韋小寶' and password = ''; truncate table tablename;#' 但是如果使用了preparestatement的話,會自動把引數值中的單引號進行轉義處理,前面已經說了,password的引數值是'; truncate table tablename;# 那麼自然會把引數值中的'單引號轉義成\'所以最終語句就會變成select * from admin where username = '韋小寶' and password = '\'; truncate table tablename;#'你說的#號後面的'單引號肯定不會被轉義成\' 這樣說吧,password = ''這是乙個整體,password = '在這對單引號中,如果出現了單引號才會才會被轉義',比如 password = '6666'這樣是ok的,不用轉義,比如password = 'abc6688'這樣也是是ok的,不用轉義, 比如password = 'abc'6688'這樣才會轉義,會把出現在兩個單引號中間的單引號轉義, 最後被轉義成了password = 'abc\'6688' 再比如password = 'haha'hehe669'955'這樣才會轉義,會把出現在兩個單引號中間的單引號轉義, 最後被轉義成了password = 'haha\'hehe669\'955' 左右兩邊的'單引號表示你要傳的引數是個字串,如果你傳的字串**現了'單引號,preparestatement會自動把你字串中的'單引號轉義成\',而statement不會自動把你字串中的'單引號轉義成\',這就是為什麼preparestatement可以防止sql注入的原因 

JDBC連線資料庫的步驟

1 載入驅動 class.forname oracle.jdbc.driver.oracledriver 2建立資料庫連線 connection conn drivermanager.getconnection string url,string user,string password strin...

JDBC連線資料庫的步驟

string user root string password 123 string url jdbc mysql localhost 3306 day14 1.載入驅動 class.forname com.mysql.jdbc.driver 不推薦使用這種方法 1,會載入驅動兩次 載入類一次,n...

使用JDBC連線資料庫的步驟

第一步,載入驅動 class.forname oracle.jdbc.driver.oracledriver 第二步,獲取連線的物件 stringurl jdbc oracle thin localhost 1521 orcl stringuser bbs stringpwd 123 connect...