從屌絲到架構(gòu)師的飛越(數(shù)據(jù)庫(kù)篇)-JDBC使用

一.介紹

JDBC(Java DataBase Connectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API坡贺,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn)宏胯,它由一組用Java語(yǔ)言編寫的類和接口組成洗贰。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開發(fā)人員能夠編寫數(shù)據(jù)庫(kù)應(yīng)用程序,同時(shí)遵蚜,JDBC也是個(gè)商標(biāo)名。

有了JDBC奈惑,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語(yǔ)句就是一件很容易的事吭净。換言之,有了JDBC API肴甸,就不必為訪問(wèn)Mysql數(shù)據(jù)庫(kù)專門寫一個(gè)程序寂殉,為訪問(wèn)Oracle數(shù)據(jù)庫(kù)又專門寫一個(gè)程序,或?yàn)樵L問(wèn)Informix數(shù)據(jù)庫(kù)又編寫另一個(gè)程序等等原在,程序員只需用JDBC API寫一個(gè)程序就夠了友扰,它可向相應(yīng)數(shù)據(jù)庫(kù)發(fā)送SQL調(diào)用彤叉。同時(shí),將Java語(yǔ)言和JDBC結(jié)合起來(lái)使程序員不必為不同的平臺(tái)編寫不同的應(yīng)用程序村怪,只須寫一遍程序就可以讓它在任何平臺(tái)上運(yùn)行姆坚,這也是Java語(yǔ)言“編寫一次,處處運(yùn)行”的優(yōu)勢(shì)实愚。

二.知識(shí)點(diǎn)介紹

1、JDBC的連接模式?

2兔辅、JDBC常用類

3腊敲、JDBC操作流程

三.上課對(duì)應(yīng)視頻的說(shuō)明文檔

1、JDBC的連接模式

(1)加載驅(qū)動(dòng)(對(duì)應(yīng)數(shù)據(jù)庫(kù)维苔,下載對(duì)應(yīng)的jar包)

(2)MySQL數(shù)據(jù)庫(kù) Class.forName("org.gjt.mm.mysql.Driver").newInstance();

String url ="jdbc:mysql://localhost:3306/myDB?user=

soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"

//myDB為數(shù)據(jù)庫(kù)名

Connection conn= DriverManager.getConnection(url);

(3)Oracle8/8i/9i數(shù)據(jù)庫(kù)(thin模式)

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl為數(shù)據(jù)庫(kù)的SID

String user="test";

String password="test";

Connection conn= DriverManager.getConnection(url,user,password);

2碰辅、JDBC常用類

(1)DriverManager:

DriverManager是JDBC的管理層,作用于用戶和驅(qū)動(dòng)程序之間介时。

DriverManager跟蹤可用的驅(qū)動(dòng)程序没宾,并在數(shù)據(jù)庫(kù)和相應(yīng)的驅(qū)動(dòng)程序之間建立連接。

DriverManager處理驅(qū)動(dòng)程序登陸時(shí)間限制沸柔、跟蹤消息的顯示等循衰。

(2)Connection:

Connection與特定數(shù)據(jù)庫(kù)的連接(會(huì)話),在連接上下文中執(zhí)行 SQL 語(yǔ)句并返回結(jié)果。

DriverManager的getConnection()方法建立在JDBC URL中定義的數(shù)據(jù)庫(kù)Connection連接上:

Connection con= DriverManager.getConnection(url,login,password);

(3)Statement

用于執(zhí)行靜態(tài) SQL 語(yǔ)句并返回它所生成結(jié)果的對(duì)象褐澎。

一般情況下使用connection.createStatement()方法可以得到Statement實(shí)例会钝。

A、三種Statement對(duì)象:

Statement:用于執(zhí)行不帶參數(shù)的簡(jiǎn)單SQL 語(yǔ)句

PreparedStatement:用于執(zhí)行帶或不帶IN參數(shù)的預(yù)編譯SQL語(yǔ)句

CallableStatement:用于執(zhí)行對(duì)數(shù)據(jù)庫(kù)現(xiàn)有存儲(chǔ)過(guò)程的調(diào)用工三。

B迁酸、常用的Statement方法:

execute():運(yùn)行語(yǔ)句,返回是否有結(jié)果集俭正。(有:true奸鬓,無(wú):false)

executeQuerty():運(yùn)行查詢語(yǔ)句,返回ResultSet結(jié)果集掸读。

executeUpdate():運(yùn)行更新操作串远,返回更新的行數(shù)。

C寺枉、PreparedStatement

第一步:通過(guò)連接獲得PreparedStatement對(duì)象抑淫,用占位符(?)的sql語(yǔ)句構(gòu)造。

PrepareStatement pstm=con.prepareStatement(“select * from userinfo where id=?”);

第二步:設(shè)置參數(shù)

pstm.setString(1,”ganbin”);

第三步:執(zhí)行SQL語(yǔ)句

rs=pstm.excuteQuery();

(4)ResultSet

Statement執(zhí)行SQL語(yǔ)句時(shí)返回ResultSet結(jié)果集姥闪。

ResultSet提供的檢索不同類型字段的方法始苇,常用的有:

getString():獲得在數(shù)據(jù)庫(kù)里是varchar、char等數(shù)據(jù)類型的對(duì)象筐喳。

getFloat():獲得在數(shù)據(jù)庫(kù)里是Float類型的對(duì)象催式。

getDate():獲得在數(shù)據(jù)庫(kù)里面是Date類型的數(shù)據(jù)函喉。

getBoolean():獲得在數(shù)據(jù)庫(kù)里面是Boolean類型的數(shù)據(jù)。

getObject():在Sql中無(wú)對(duì)應(yīng)類型荣月,獲得序列化對(duì)象管呵。

3、JDBC操作流程

(1) 加載對(duì)應(yīng)數(shù)據(jù)庫(kù)(mysql,db2,oracle,sqlServer等)的驅(qū)動(dòng)jar包

(2) 加載驅(qū)動(dòng):Class.forName("");

(3) 創(chuàng)建連接:

Connection?DriverManger.getConnection(url,name,password);

(4) 創(chuàng)建 SQL語(yǔ)句

A哺窄、 增(insert into)捐下、刪(delete),修改(update)

B萌业、 查詢(select)

(5) 加載SQL

PreparedStatement?conn.prepareStatement(sql);

(6) 補(bǔ)齊SQL中的通配符

ps.setString(1, "男");//setString()表示字段類型,1表示位置坷襟,"男"表示對(duì)應(yīng)的值

ps.setInt(2, 20);

(7) 執(zhí)行SQL

A、 有返回值

ResultSet rs=ps.executeQuery();

B生年、 沒(méi)有返回值

ps.executeUpdate();

案例:

(1) 加載驅(qū)動(dòng)創(chuàng)建鏈接

代碼示例:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

/* JDBC連接

* (1)導(dǎo)入驅(qū)動(dòng)jar包婴程,不同數(shù)據(jù)庫(kù)有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

public static void main(String[] args) {

// TODO Auto-generated method stub

Connection conn=null;//得到數(shù)據(jù)庫(kù)連接對(duì)象

try {

Class.forName("org.gjt.mm.mysql.Driver"); // 加載驅(qū)動(dòng)

System.out.println("加載驅(qū)動(dòng)");

conn=DriverManager.getConnection(

"jdbc:mysql://localhost:3306/ww", "root", "root");// 獲取連接

System.out.println("獲取連接");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

(2) 完成增加操作

代碼示例:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

/* JDBC連接

* (1)導(dǎo)入驅(qū)動(dòng)jar包,不同數(shù)據(jù)庫(kù)有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Connection conn=null;//得到數(shù)據(jù)庫(kù)連接對(duì)象

try {

Class.forName("org.gjt.mm.mysql.Driver"); // 加載驅(qū)動(dòng)

System.out.println("加載驅(qū)動(dòng)");

conn=DriverManager.getConnection(

"jdbc:mysql://localhost:3306/ww", "root", "root");// 獲取連接

System.out.println("獲取連接");

//表的操作抱婉,都是SQL

String sql="insert into students(name,xh,sex,age) values(?,?,?,?)";

PreparedStatement ps=conn.prepareStatement(sql);//加載SQL

ps.setString(1, "李四");

ps.setInt(2, 0001);

ps.setString(3, "女");

ps.setInt(4,19);

//PreparedStatement 加載SQL語(yǔ)句档叔,可以操作有參的SQL

//Statement 操作無(wú)參

ps.executeUpdate();//執(zhí)行查詢語(yǔ)句并接收結(jié)果

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

(3) 完成修改操作

代碼示例:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

/* JDBC連接

* (1)導(dǎo)入驅(qū)動(dòng)jar包,不同數(shù)據(jù)庫(kù)有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Connection conn=null;//得到數(shù)據(jù)庫(kù)連接對(duì)象

try {

Class.forName("org.gjt.mm.mysql.Driver"); // 加載驅(qū)動(dòng)

System.out.println("加載驅(qū)動(dòng)");

conn=DriverManager.getConnection(

"jdbc:mysql://localhost:3306/ww", "root", "root");// 獲取連接

System.out.println("獲取連接");

//表的操作蒸绩,都是SQL

String sql="update students name=? where id=?";

PreparedStatement ps=conn.prepareStatement(sql);//加載SQL

ps.setString(1, "李四");

ps.setInt(2, 1);

//PreparedStatement 加載SQL語(yǔ)句衙四,可以操作有參的SQL

//Statement 操作無(wú)參

ps.executeUpdate();//執(zhí)行查詢語(yǔ)句并接收結(jié)果

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

(4) 完成刪除操作

代碼示例:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

/* JDBC連接

* (1)導(dǎo)入驅(qū)動(dòng)jar包,不同數(shù)據(jù)庫(kù)有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Connection conn=null;//得到數(shù)據(jù)庫(kù)連接對(duì)象

try {

Class.forName("org.gjt.mm.mysql.Driver"); // 加載驅(qū)動(dòng)

System.out.println("加載驅(qū)動(dòng)");

conn=DriverManager.getConnection(

"jdbc:mysql://localhost:3306/ww", "root", "root");// 獲取連接

System.out.println("獲取連接");

//表的操作患亿,都是SQL

String sql="delete from students where id=? ";

PreparedStatement ps=conn.prepareStatement(sql);//加載SQL

ps.setInt(1, 9);

//PreparedStatement 加載SQL語(yǔ)句届搁,可以操作有參的SQL

//Statement 操作無(wú)參

ps.executeUpdate();//執(zhí)行查詢語(yǔ)句并接收結(jié)果

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

(5) 完成查詢操作

代碼示例:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

/* JDBC連接

* (1)導(dǎo)入驅(qū)動(dòng)jar包,不同數(shù)據(jù)庫(kù)有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Connection conn=null;//得到數(shù)據(jù)庫(kù)連接對(duì)象

try {

Class.forName("org.gjt.mm.mysql.Driver"); // 加載驅(qū)動(dòng)

System.out.println("加載驅(qū)動(dòng)");

conn=DriverManager.getConnection(

"jdbc:mysql://localhost:3306/ww", "root", "root");// 獲取連接

System.out.println("獲取連接");

//表的操作窍育,都是SQL

String sql="select * from students where sex=? and age>?";

PreparedStatement ps=conn.prepareStatement(sql);//加載SQL

ps.setString(1, "男");

ps.setInt(2, 20);

//PreparedStatement 加載SQL語(yǔ)句卡睦,可以操作有參的SQL

//Statement 操作無(wú)參

ResultSet rs=ps.executeQuery();//執(zhí)行查詢語(yǔ)句并接收結(jié)果

while(rs.next()){

System.out.println(rs.getString("name")+"? "+rs.getInt("age"));

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市漱抓,隨后出現(xiàn)的幾起案子表锻,更是在濱河造成了極大的恐慌,老刑警劉巖乞娄,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞬逊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡仪或,警方通過(guò)查閱死者的電腦和手機(jī)确镊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)范删,“玉大人蕾域,你說(shuō)我怎么就攤上這事。” “怎么了旨巷?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵巨缘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我采呐,道長(zhǎng)若锁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任斧吐,我火速辦了婚禮又固,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘煤率。我一直安慰自己口予,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布涕侈。 她就那樣靜靜地躺著,像睡著了一般煤辨。 火紅的嫁衣襯著肌膚如雪裳涛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天众辨,我揣著相機(jī)與錄音端三,去河邊找鬼。 笑死鹃彻,一個(gè)胖子當(dāng)著我的面吹牛郊闯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛛株,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼团赁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谨履?” 一聲冷哼從身側(cè)響起欢摄,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笋粟,沒(méi)想到半個(gè)月后怀挠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡害捕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年绿淋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尝盼。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吞滞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盾沫,到底是詐尸還是另有隱情冯吓,我是刑警寧澤倘待,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站组贺,受9級(jí)特大地震影響凸舵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜失尖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一啊奄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掀潮,春花似錦菇夸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至薯鼠,卻和暖如春择诈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背出皇。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工羞芍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人郊艘。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓荷科,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纱注。 傳聞我的和親對(duì)象是個(gè)殘疾皇子畏浆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容