目錄
JDBC概念:
JDBC保姆級(jí)連接步驟:
JDBC連接中用到的對(duì)象詳解:
1.DriverManager對(duì)象(驅(qū)動(dòng)管理對(duì)象)
2.Connection對(duì)象(連接對(duì)象)
3.Statement對(duì)象(執(zhí)行SQL語(yǔ)句的對(duì)象)
4.ResultSte對(duì)象(結(jié)果集)
JDBC概念:
JDBC的全稱是:Java數(shù)據(jù)庫(kù)連接(Java DataBase Connectivity),它是一套用于執(zhí)行SQL語(yǔ)句的Java API。應(yīng)用程序可以通過(guò)這套API聯(lián)系到關(guān)系型數(shù)據(jù)庫(kù),并使用SQL語(yǔ)句來(lái)完成對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的查詢、新增、更新和刪除等操作。
????不同種類的數(shù)據(jù)庫(kù)(如:MySQL、Oracle等)在其內(nèi)部處理數(shù)據(jù)的方式是不同的,如果直接使用數(shù)據(jù)庫(kù)廠商提供的訪問(wèn)接口操作數(shù)據(jù)庫(kù),應(yīng)用程序的可移植性就會(huì)變得很差。例如,用戶在當(dāng)前程序中使用的是MySQL提供的接口操作數(shù)據(jù)庫(kù),如果換成Oracle數(shù)據(jù)庫(kù)提供的接口,這樣代碼的改動(dòng)量就會(huì)非常大。有了JDBC后,這種情況就不復(fù)存在了因?yàn)樗蟾鱾€(gè)數(shù)據(jù)庫(kù)廠商按照統(tǒng)一的規(guī)范來(lái)提供數(shù)據(jù)庫(kù)驅(qū)動(dòng)(JDBC實(shí)現(xiàn)類),在程序中由JDBC和具體的數(shù)據(jù)庫(kù)驅(qū)動(dòng)聯(lián)系,所以用戶就不必直接與底層的數(shù)據(jù)庫(kù)交互,使得代碼的通用性更強(qiáng)。
簡(jiǎn)而言之:JDBC就是java定義的一套操作所有關(guān)系型數(shù)據(jù)庫(kù)的規(guī)則,其本質(zhì)就是:官方定義的一套操作所有關(guān)系型數(shù)據(jù)庫(kù)的規(guī)則,即接口;
JDBC保姆級(jí)連接步驟:
1.導(dǎo)入驅(qū)動(dòng)jar包
2.注冊(cè)驅(qū)動(dòng)
3.獲取數(shù)據(jù)庫(kù)連接對(duì)象? ?(connection)
4.定義SQL語(yǔ)句
5.獲取執(zhí)行SQL語(yǔ)句的對(duì)象? ?(statement)
6.執(zhí)行SQL語(yǔ)句,如有返回結(jié)果則需接受返回結(jié)果
7.處理結(jié)果集
8.釋放資源
示例:
package com.lele.dome;
import java.sql.*;
public class test02 {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//注冊(cè)驅(qū)動(dòng)
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
String user = "root";
String pas = "123456";
// 獲取連接對(duì)象
connection = DriverManager.getConnection(url,user,pas);
// 編寫SQL語(yǔ)句
String sql = "SELECT * FROM sc";
// 獲取SQL執(zhí)行對(duì)象
statement = connection.createStatement();
// 執(zhí)行SQL語(yǔ)句
resultSet = statement.executeQuery(sql);
// 處理結(jié)果集
while (resultSet.next()){ // 如果有下一個(gè)就為真(一行一行的取出)
int sno = resultSet.getInt("sno");
String clazz = resultSet.getString("clazz");
int score = resultSet.getInt("score");
System.out.println(sno + "\t" + clazz + "\t" + score);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
// 釋放資源
if (resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
JDBC連接中用到的對(duì)象詳解:
1.DriverManager對(duì)象(驅(qū)動(dòng)管理對(duì)象)
1.注冊(cè)驅(qū)動(dòng)
2.獲取數(shù)據(jù)庫(kù)連接
靜態(tài)方法:getconnection(URL,用戶名,密碼)
URL:指定連接路徑
jdbc:mysql://ip地址(域名):端口號(hào)//數(shù)據(jù)庫(kù)名稱
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
2.Connection對(duì)象(連接對(duì)象)
1、獲取執(zhí)行SQL語(yǔ)句的對(duì)象
Statement createStatement() 創(chuàng)建一個(gè)Statement對(duì)象,用于將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)。
PreparedStatement prepareStatement(String sql)創(chuàng)建一個(gè)PreparedStatement對(duì)象,用于將參數(shù)化的SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)。(這種方式用于解決SQL注入問(wèn)題)
2、管理事務(wù)
開(kāi)啟事務(wù):setAutoCommit(boolean autoCommit) :調(diào)用該方法設(shè)置參數(shù)為false,即開(kāi)啟事務(wù)
提交事務(wù):commit()
回滾事務(wù):rollback()
3.Statement對(duì)象(執(zhí)行SQL語(yǔ)句的對(duì)象)
執(zhí)行sql語(yǔ)句的對(duì)象(Statement:用于執(zhí)行靜態(tài)SQL語(yǔ)句并返回其生成的結(jié)果的對(duì)象。
常用的方法:
int executeUpdate(String sql):執(zhí)行DML(表中記錄的操作)語(yǔ)句,返回一個(gè)int值這個(gè)int值代表的就是這個(gè)SQL語(yǔ)句生效后,該表中受這句SQL語(yǔ)句影響的記錄的行數(shù)。如果返回值>0,則表示執(zhí)行成功,反之則失敗。執(zhí)行DDL語(yǔ)句,不會(huì)返回任何內(nèi)容(因?yàn)榉祷刂殿愋褪莍nt,所以會(huì)返回值0),當(dāng)然在實(shí)際開(kāi)發(fā)中我們很少會(huì)通過(guò)Java語(yǔ)言去操作DDL語(yǔ)句。
ResultSet executeQuery(String sql):執(zhí)行DQL(查詢)語(yǔ)句,返回單個(gè)ResultSet對(duì)象。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-472124.html
4.ResultSte對(duì)象(結(jié)果集)
執(zhí)行DQL語(yǔ)句時(shí),需要用Statement對(duì)象中的executeQuery()方法,該方法返回一個(gè)ResultSet集合。這個(gè)方法將查詢到的結(jié)果放到ResultSet集合中,集合里有個(gè)光標(biāo),默認(rèn)情況下光標(biāo)指向字段行。使用next()方法后,光標(biāo)會(huì)移動(dòng)到當(dāng)前行的下一行。讀一個(gè)
get數(shù)據(jù)類型(參數(shù))方法,用來(lái)獲取當(dāng)前行中某一列的值。
既可以通過(guò)列的編號(hào)(從1開(kāi)始)來(lái)獲取,也可以通過(guò)列的字段名來(lái)獲取值參數(shù)int表示通過(guò)列的編號(hào)來(lái)取值,參數(shù)String表示通過(guò)列的字段名來(lái)獲取值文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-472124.html
while(resultset.next){
get方法();
// 參數(shù)有兩種一種是通過(guò)下標(biāo)獲取,一種通過(guò)名稱獲取
}
package com.lele.dome;
import java.sql.*;
public class test02 {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//注冊(cè)驅(qū)動(dòng)
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
String user = "root";
String pas = "123456";
// 獲取連接對(duì)象
connection = DriverManager.getConnection(url,user,pas);
// 編寫SQL語(yǔ)句
String sql = "SELECT * FROM sc";
// 獲取SQL執(zhí)行對(duì)象
statement = connection.createStatement();
// 執(zhí)行SQL語(yǔ)句
resultSet = statement.executeQuery(sql);
// 處理結(jié)果集
while (resultSet.next()){ // 如果有下一個(gè)就為真(一行一行的取出)
int sno = resultSet.getInt("sno");
String clazz = resultSet.getString("clazz");
int score = resultSet.getInt("score");
System.out.println(sno + "\t" + clazz + "\t" + score);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
// 釋放資源
if (resultSet != null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
到了這里,關(guān)于數(shù)據(jù)庫(kù)——JDBC基本連接步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!