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

一.介紹

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

有了JDBC,向各種關系數(shù)據(jù)發(fā)送SQL語句就是一件很容易的事。換言之,有了JDBC API,就不必為訪問Mysql數(shù)據(jù)庫專門寫一個程序,為訪問Oracle數(shù)據(jù)庫又專門寫一個程序,或為訪問Informix數(shù)據(jù)庫又編寫另一個程序等等,程序員只需用JDBC API寫一個程序就夠了,它可向相應數(shù)據(jù)庫發(fā)送SQL調(diào)用。同時,將Java語言和JDBC結(jié)合起來使程序員不必為不同的平臺編寫不同的應用程序,只須寫一遍程序就可以讓它在任何平臺上運行,這也是Java語言“編寫一次,處處運行”的優(yōu)勢。

二.知識點介紹

1、JDBC的連接模式?

2、JDBC常用類

3、JDBC操作流程

三.上課對應視頻的說明文檔

1、JDBC的連接模式

(1)加載驅(qū)動(對應數(shù)據(jù)庫,下載對應的jar包)

(2)MySQL數(shù)據(jù)庫 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ù)庫名

Connection conn= DriverManager.getConnection(url);

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

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

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

String user="test";

String password="test";

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

2、JDBC常用類

(1)DriverManager:

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

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

DriverManager處理驅(qū)動程序登陸時間限制、跟蹤消息的顯示等。

(2)Connection:

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

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

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

(3)Statement

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

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

A、三種Statement對象:

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

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

CallableStatement:用于執(zhí)行對數(shù)據(jù)庫現(xiàn)有存儲過程的調(diào)用。

B、常用的Statement方法:

execute():運行語句,返回是否有結(jié)果集。(有:true,無:false)

executeQuerty():運行查詢語句,返回ResultSet結(jié)果集。

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

C、PreparedStatement

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

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

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

pstm.setString(1,”ganbin”);

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

rs=pstm.excuteQuery();

(4)ResultSet

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

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

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

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

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

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

getObject():在Sql中無對應類型,獲得序列化對象。

3、JDBC操作流程

(1) 加載對應數(shù)據(jù)庫(mysql,db2,oracle,sqlServer等)的驅(qū)動jar包

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

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

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

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

A、 增(insert into)、刪(delete),修改(update)

B、 查詢(select)

(5) 加載SQL

PreparedStatement?conn.prepareStatement(sql);

(6) 補齊SQL中的通配符

ps.setString(1, "男");//setString()表示字段類型,1表示位置,"男"表示對應的值

ps.setInt(2, 20);

(7) 執(zhí)行SQL

A、 有返回值

ResultSet rs=ps.executeQuery();

B、 沒有返回值

ps.executeUpdate();

案例:

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

代碼示例:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

/* JDBC連接

* (1)導入驅(qū)動jar包,不同數(shù)據(jù)庫有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

public static void main(String[] args) {

// TODO Auto-generated method stub

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

try {

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

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

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)導入驅(qū)動jar包,不同數(shù)據(jù)庫有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

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

try {

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

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

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語句,可以操作有參的SQL

//Statement 操作無參

ps.executeUpdate();//執(zhí)行查詢語句并接收結(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)導入驅(qū)動jar包,不同數(shù)據(jù)庫有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

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

try {

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

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

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語句,可以操作有參的SQL

//Statement 操作無參

ps.executeUpdate();//執(zhí)行查詢語句并接收結(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)導入驅(qū)動jar包,不同數(shù)據(jù)庫有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

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

try {

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

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

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語句,可以操作有參的SQL

//Statement 操作無參

ps.executeUpdate();//執(zhí)行查詢語句并接收結(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)導入驅(qū)動jar包,不同數(shù)據(jù)庫有不同jar包

* (2)代碼介入

* */

public class JdbcLj {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

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

try {

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

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

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語句,可以操作有參的SQL

//Statement 操作無參

ResultSet rs=ps.executeQuery();//執(zhí)行查詢語句并接收結(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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容