微型營(yíng)銷網(wǎng)站制作谷歌推廣費(fèi)用多少
java程序操作數(shù)據(jù)庫(kù)(JDBC)
JDBC:(Java DataBase Connectivity),就是使用Java語(yǔ)言操作關(guān)系型數(shù)據(jù)庫(kù)的一套API。
本質(zhì):
1.sun公司官方定義的一套操作所有關(guān)系型數(shù)據(jù)庫(kù)的規(guī)范、即接口。
2.各個(gè)數(shù)據(jù)庫(kù)廠商去實(shí)現(xiàn)這套接口,提供數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar包。
3.我們可以使用這套接口(JDBC)編程,真正執(zhí)行的代碼是驅(qū)動(dòng)jar包中的實(shí)現(xiàn)類。
01.入門程序:
1.需求:基于JDBC程序,執(zhí)行update語(yǔ)句(update user set age = 25 where id = 1)
2.步驟:
準(zhǔn)備工作:創(chuàng)建一個(gè)maven項(xiàng)目,引入依賴;并準(zhǔn)備數(shù)據(jù)庫(kù)表user
代碼實(shí)現(xiàn):編寫JDBC程序,操作數(shù)據(jù)庫(kù)
public void testUpdate() throws Exception {//1.注冊(cè)驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2.獲取數(shù)據(jù)庫(kù)連接//標(biāo)準(zhǔn)的 JDBC URL 格式:jdbc:mysql://hostname:port/databasenameString url="jdbc:mysql://localhost:3306/web01";//連接時(shí)一定注意這些數(shù)據(jù)不能錯(cuò)String username = "root";String password = "1234";Connection connection = DriverManager.getConnection(url, username, password);//3.獲取SQL語(yǔ)句執(zhí)行對(duì)象Statement statement = connection.createStatement();//4.執(zhí)行SQL
?int i = statement.executeUpdate("update user set age = 25 where id = 1");//DMLSystem.out.println("SQL執(zhí)行完畢影響的記錄數(shù)為:" + i);//5.釋放資源statement.close();connection.close();
}
02.JDBC-查詢數(shù)據(jù):
1.需求:基于JDBC執(zhí)行如下select語(yǔ)句,將查詢結(jié)果封裝到User對(duì)象中。
2.SQL:select * from user where username = 'daoqiao' and password = '123456'
3.ResultSet(結(jié)果集對(duì)象):ResultSet re = statement.executeQuery(),next():將光標(biāo)從當(dāng)前位置向前移動(dòng)一行,并判斷當(dāng)前行是否為有效行,返回值為Boolean,返回值為true表示有效行,當(dāng)前行有數(shù)據(jù),false為無效行,當(dāng)前行沒有數(shù)據(jù)。getXxx():獲取數(shù)據(jù),可以根據(jù)列的編號(hào)獲取,也可以根據(jù)列名獲取(推薦)。
@Testpublic void testSelect(){String URL = "jdbc:mysql://127.0.0.1:3306/web01";String USER ?= "root";String PASSWORD ?= "1234";
?Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;//封裝查詢返回的結(jié)果try{//1.注冊(cè)驅(qū)動(dòng)Class.forName("com.mysql.cj.jdbc.Driver");//2.打開鏈接conn = DriverManager.getConnection(URL,USER,PASSWORD);//3.執(zhí)行查詢String sql = "select id,username,password,name,age from user where username = ? AND password = ?";//預(yù)編譯SQLstmt = conn.prepareStatement(sql);stmt.setString(1,"daqiao");stmt.setString(2,"123456");rs = stmt.executeQuery();//4.處理結(jié)果集while (rs.next()){User user = new User(rs.getInt("id"),rs.getString("username"),rs.getString("password"),rs.getString("name"),rs.getInt("age"));System.out.println(user);
?}
?} catch (Exception e) {e.printStackTrace();} finally {//5.關(guān)閉資源try{if(rs!=null) rs.close();if(stmt!=null) stmt.close();if (conn!=null) conn.close();} catch (SQLException se){se.printStackTrace();}}
?}
?
03.預(yù)編譯SQL
優(yōu)勢(shì)一:可以防止SQL注入,更安全。
SQL注入:通過控制輸入來修改實(shí)現(xiàn)定義好的SQL語(yǔ)句,以達(dá)到執(zhí)行代碼對(duì)服務(wù)器進(jìn)行攻擊的方法。
優(yōu)勢(shì)二:性能更高。