一.介紹
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();
}
}
}