小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

jdbc程序編寫步驟和原理

 以怪力亂神 2019-01-15

首先要加載數(shù)據(jù)庫相應(yīng)的驅(qū)動(dòng),以mysql為例

下載mysqljava驅(qū)動(dòng),例如 mysql-connector-java-8.0.1

這就是mysql的驅(qū)動(dòng),把它放到項(xiàng)目當(dāng)中建立依賴,就可以使用相關(guān)API操作mysql數(shù)據(jù)庫了

 

先來一個(gè)簡單的使用示例(并不規(guī)范)

public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1.注冊(cè)驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");// 推薦方式

// 2.建立連接
String url = "jdbc:mysql://localhost:3306/jdbc";
String user = "root";
String password = "";
Connection conn = DriverManager.getConnection(url, user, password);

// 3.創(chuàng)建語句
Statement st = conn.createStatement();

// 4.執(zhí)行語句
ResultSet rs = st.executeQuery("select * from user");

// 5.處理結(jié)果
while (rs.next()) {
System.out.println(rs.getObject(1) + "\t" + rs.getObject(2) + "\t"
+ rs.getObject(3) + "\t" + rs.getObject(4));
}

// 6.釋放資源
rs.close();
st.close();
conn.close();

}

從現(xiàn)在開始正式介紹jdbc

 

1.注冊(cè)驅(qū)動(dòng)(介紹三種方式)

 

由于只有先通過DriverManager注冊(cè)驅(qū)動(dòng),才能獲得數(shù)據(jù)庫連接,所以第一步要先注冊(cè)驅(qū)動(dòng)

注冊(cè)驅(qū)動(dòng)的關(guān)鍵就是

DriverManager.registerDriver(所使用的數(shù)據(jù)庫對(duì)應(yīng)的驅(qū)動(dòng)類);

推薦方式

Class.forName("com.mysql.jdbc.Driver");

這種方式為什么能注冊(cè)驅(qū)動(dòng)呢?因?yàn)檫@行代碼表示類加載器加載com.mysql.jdbc.Driver這個(gè)類,而加載這個(gè)了這類就要執(zhí)行這個(gè)類的靜態(tài)代碼塊,我們看這個(gè)類的靜態(tài)代碼塊就會(huì)一目了然

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}

static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}

我們可以看到靜態(tài)代碼塊中執(zhí)行了注冊(cè)驅(qū)動(dòng)的代碼

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

 

這段代碼其實(shí)注冊(cè)了兩次驅(qū)動(dòng),registerDriver方法本身就是注冊(cè)驅(qū)動(dòng)的關(guān)鍵代碼,而方法中new的新對(duì)象又是Driver對(duì)象,Driver類一旦加載其靜態(tài)代碼塊又注冊(cè)一次驅(qū)動(dòng)。因此產(chǎn)生了垃圾驅(qū)動(dòng),所以不推薦使用這種方式。(而且其實(shí)僅僅new出對(duì)象也注冊(cè)了驅(qū)動(dòng),不需要使用registerDriver方法

 

System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

 

這種方式為什么能像第一種方式一樣注冊(cè)驅(qū)動(dòng)呢?因?yàn)?/span>DriverManager類會(huì)初始化,而在初始化的過程中會(huì)查詢系統(tǒng)屬性,如下

private static void loadInitialDrivers() {
String drivers;
try {
drivers = AccessController.doPrivileged(new PrivilegedAction<String>() {
public String run() {
return System.getProperty("jdbc.drivers");
}
});
} catch (Exception ex) {
drivers = null;
}
//...
}

這種方式可以同時(shí)注冊(cè)多個(gè)驅(qū)動(dòng),只需要在setProperty方法的第二個(gè)參數(shù)中添加就好,多個(gè)驅(qū)動(dòng)之間用冒號(hào)隔開。

  

 

 

2.建立連接

 

需要數(shù)據(jù)庫url,用戶名和密碼才能建立連接

 

示例

String url="jdbc:mysql://localhost:3306/tdb?useSSL=false";
String userName="loubth";
String password="loubth";
Connection conn= DriverManager.getConnection(url,userName,password);

注意urllocalhost是默認(rèn)主機(jī)名,3306是默認(rèn)端口,如果你也是使用默認(rèn)主機(jī)名和端口的話可以省略這部分讓url寫成String url = "jdbc:mysql:///jdbc";(注意jdbc是數(shù)據(jù)庫名字不是非要寫jdbc



url格式

JDBC:子協(xié)議://主機(jī)名:端口/數(shù)據(jù)庫名?屬性名=屬性值&...

 

3.創(chuàng)建語句

 

示例

Statement statement=conn.createStatement();

Statement 對(duì)象用來承接sql語句

  

4.執(zhí)行語句

 

示例

ResultSet resultSet=statement.executeQuery("SELECT * FROM tt");

調(diào)用executeQuery方法執(zhí)行sql語句獲得結(jié)果集

 

5.處理結(jié)果

 

示例

while(resultSet.next()){
System.out.println(resultSet.getObject(1)+":"+resultSet.getObject(2));
}

rs.next()代表移動(dòng)到結(jié)果集的下一條記錄

rs.getObject(1)獲得第一項(xiàng)

 

6.釋放資源

 

從后往前依次釋放資源(數(shù)據(jù)庫連接要盡量晚建立早釋放,減小數(shù)據(jù)庫壓力)

 

resultSet.close();
statement.close();
conn.close();

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多