更新時(shí)間:2021-01-27 17:08:03 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1279次
JDBC(Java Database Connectivity)提供了一種與平臺(tái)無(wú)關(guān)的用于執(zhí)行SQL語(yǔ)句的標(biāo)準(zhǔn)Java API,可以方便地實(shí)現(xiàn)多種關(guān)系型數(shù)據(jù)庫(kù)的統(tǒng)一操作,它由一組用Java語(yǔ)言編寫的接口和類組成JDBC本身提供的是一套數(shù)據(jù)庫(kù)操作標(biāo)準(zhǔn),而這些標(biāo)準(zhǔn)又需要數(shù)據(jù)庫(kù)廠商實(shí)現(xiàn),所以針對(duì)每一個(gè)數(shù)據(jù)庫(kù)廠商都會(huì)提供一個(gè)JDBC驅(qū)動(dòng)程序,目前比較常見的JDBC驅(qū)動(dòng)程序可分為以下4類:
JDBC-ODBC橋驅(qū)動(dòng)。直接利用微軟的ODBC(Open Database Connectivity)進(jìn)行數(shù)據(jù)庫(kù)的連接操作,但是這種操作性能較低。
JDBC本地驅(qū)動(dòng)。直接使用各個(gè)數(shù)據(jù)庫(kù)生產(chǎn)商提供的JDBC驅(qū)動(dòng)程序,但是因?yàn)槠渲荒軕?yīng)用在特定的數(shù)據(jù)庫(kù)上,會(huì)喪失程序的可移植性,不過(guò)這樣操作的性能較高。
JDBC網(wǎng)絡(luò)驅(qū)動(dòng)。將JDBC轉(zhuǎn)換為與DBMS無(wú)關(guān)的網(wǎng)絡(luò)協(xié)議,之后又被某個(gè)服務(wù)器轉(zhuǎn)換為一種DBMS協(xié)議。這種網(wǎng)絡(luò)服務(wù)器中間件能夠?qū)⑺募僇ava客戶機(jī)連接到多種不同的數(shù)據(jù)庫(kù)上,所用的具體協(xié)議取決于提供者。通常,這是最靈活的JDBC驅(qū)動(dòng)程序。
本地協(xié)議純JDBC驅(qū)動(dòng)。將JDBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)絡(luò)協(xié)議。這將允許從客戶機(jī)器上直接調(diào)用DBMS服務(wù)器。
MySQL數(shù)據(jù)庫(kù)
MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。在MySQL官網(wǎng)下載安裝包,安裝好之后配置好環(huán)境變量就可以使用了。
MySQL常用命令
連接MySQL數(shù)據(jù)庫(kù) | mysql -u 用戶名 -p;然后輸入密碼 |
創(chuàng)建數(shù)據(jù)庫(kù) | create database 數(shù)據(jù)庫(kù)名稱 |
刪除數(shù)據(jù)庫(kù) | drop database 數(shù)據(jù)庫(kù)名稱 |
使用數(shù)據(jù)庫(kù) | use 數(shù)據(jù)庫(kù)名稱 |
創(chuàng)建數(shù)據(jù)庫(kù)表 | create table 表名稱(字段名稱 字段類型 默認(rèn)值 約束) |
刪除數(shù)據(jù)庫(kù)表 | drop table 表名稱 |
查看表結(jié)構(gòu) | desc 表名稱 |
查看全部數(shù)據(jù)庫(kù) | show databases |
查看一個(gè)數(shù)據(jù)庫(kù)的全部表 | show tables |
SQL語(yǔ)法基礎(chǔ)
SQL(Structured Query Language,結(jié)構(gòu)查詢語(yǔ)言)是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫(kù)語(yǔ)言。SQL通常用于與數(shù)據(jù)庫(kù)的通信。SQL功能強(qiáng)大,概括起來(lái)可以分成以下幾組:DML(Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言),用于檢索或者修改數(shù)據(jù);DDL(Data Definition Language,數(shù)據(jù)定義語(yǔ)言),用于定義數(shù)據(jù)的結(jié)構(gòu),如創(chuàng)建、修改或者刪除數(shù)據(jù)庫(kù)對(duì)象;DCL(Data Control Language,數(shù)據(jù)控制語(yǔ)言),用于定義數(shù)據(jù)庫(kù)用戶的權(quán)限。
SQL常用語(yǔ)法
增加數(shù)據(jù) | insert into 表名稱【(字段1,字段2,……,字段n)】 values(值1,值2,……,值n);(【】表示可選項(xiàng)) |
刪除數(shù)據(jù) | delete from 表名稱 【刪除條件】 |
更新數(shù)據(jù) | update 表名稱 set 字段1=值1,……,字段n=值n 【where 更新條件】 |
查詢數(shù)據(jù) |
select {*|column alias} from 表名稱 別名 【where 條件】 【limit 開始行,取出的數(shù)據(jù)個(gè)數(shù)】 |
需要注意的是,在增加數(shù)據(jù)時(shí),如果是字符串,則一定要用“‘”括起來(lái);如果是日期,則按照標(biāo)準(zhǔn)的日期格式進(jìn)行插入(MySQL中的日期使用yyyy-mm-dd的格式保存,所以在插入數(shù)據(jù)時(shí),必須按照此種格式插入)。
在刪除數(shù)據(jù)時(shí),最好指定刪除的條件,如果沒有指定,則表示刪除一張表中的全部數(shù)據(jù)。
與刪除語(yǔ)句一樣,修改時(shí)也需要指定修改條件,否則數(shù)據(jù)表的全部記錄都將被修改。
連接數(shù)據(jù)庫(kù)
要使用MySQL數(shù)據(jù)庫(kù)進(jìn)行開發(fā),首先去官網(wǎng)下載驅(qū)動(dòng),然后將MySQL數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序配置到classpath中。
加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序是JDBC操作的第一步,由于已經(jīng)將數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序直接配置到了classpath中,所以,此時(shí)可以直接進(jìn)行加載。MySQL中的數(shù)據(jù)庫(kù)驅(qū)動(dòng)路徑是com.mysql.jdbc.Driver。得到驅(qū)動(dòng)程序路徑之后,即可利用Class類進(jìn)行驅(qū)動(dòng)程序的加載。
連接及關(guān)閉數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序可以正常加載,就可以利用DriverManager類連接數(shù)據(jù)庫(kù)。在DriverManager中,提供的主要操作就是得到一個(gè)數(shù)據(jù)庫(kù)的連接,getConnection()方法就是取得連接對(duì)象,此方法返回的是Connection對(duì)象,不管使用哪種方式連接,都必須提供一個(gè)數(shù)據(jù)庫(kù)的連接地址。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ExampleDatabase {
//定義MySQL的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
//定義MySQL數(shù)據(jù)庫(kù)的連接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/test";
//MySQL數(shù)據(jù)庫(kù)的連接用戶名
public static final String DBUSER = "root";
//MySQL數(shù)據(jù)庫(kù)的連接密碼
public static final String DBPASS = "root";
public static void main(String[] args) {
Connection con = null;
try {
//加載驅(qū)動(dòng)程序
Class.forName(DBDRIVER);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
//連接MySQL數(shù)據(jù)庫(kù)時(shí),要寫上連接的用戶名和密碼
con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
}
catch (SQLException e) {
e.printStackTrace();
}
System.out.println(con);
try {
//關(guān)閉數(shù)據(jù)庫(kù)
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
執(zhí)行數(shù)據(jù)庫(kù)的更新操作
數(shù)據(jù)庫(kù)連接后,就可以進(jìn)行數(shù)據(jù)庫(kù)的具體操作,要使用Statement接口完成,此接口可以使用Connection接口中提供的createStatement()方法實(shí)例化。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ExampleDatabase {
//定義MySQL的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
//定義MySQL數(shù)據(jù)庫(kù)的連接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/test";
//MySQL數(shù)據(jù)庫(kù)的連接用戶名
public static final String DBUSER = "root";
//MySQL數(shù)據(jù)庫(kù)的連接密碼
public static final String DBPASS = "root";
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
//數(shù)據(jù)庫(kù)插入語(yǔ)句
String insertSQL = "insert into user (id, name, age) values (3, 'key', 23)";
//數(shù)據(jù)庫(kù)修改語(yǔ)句
String alterSQL = "update user SET name='jon' where id=8";
//數(shù)據(jù)庫(kù)刪除語(yǔ)句
String deleteSQL = "delete from user where id=5";
try {
//加載驅(qū)動(dòng)程序
Class.forName(DBDRIVER);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
//連接MySQL數(shù)據(jù)庫(kù)時(shí),要寫上連接的用戶名和密碼
con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
//實(shí)例化Statement對(duì)象
stmt = con.createStatement();
//執(zhí)行數(shù)據(jù)庫(kù)更新操作
stmt.executeUpdate(insertSQL);
stmt.executeUpdate(alterSQL);
stmt.executeUpdate(deleteSQL);
}
catch (SQLException e) {
e.printStackTrace();
}
System.out.println(con);
try {
//關(guān)閉操作
stmt.close();
//關(guān)閉數(shù)據(jù)庫(kù)
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
數(shù)據(jù)庫(kù)查詢操作
使用SQL的select語(yǔ)句可以查詢出數(shù)據(jù)庫(kù)的全部結(jié)果,在JDBC的操作中數(shù)據(jù)庫(kù)的所有查詢記錄將使用ResultSet進(jìn)行接收,并使用ResultSet顯示內(nèi)容。要進(jìn)行數(shù)據(jù)庫(kù)查詢操作,需要使用Statement接口定義的executeQuery()方法,此方法返回值類型就是一個(gè)ResultSet的對(duì)象,此對(duì)象中存放了所有的查詢結(jié)果。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class ExampleDatabase {
//定義MySQL的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
//定義MySQL數(shù)據(jù)庫(kù)的連接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/test";
//MySQL數(shù)據(jù)庫(kù)的連接用戶名
public static final String DBUSER = "root";
//MySQL數(shù)據(jù)庫(kù)的連接密碼
public static final String DBPASS = "root";
public static void main(String[] args) {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
//數(shù)據(jù)庫(kù)查詢語(yǔ)句
String sql = "select id , name, age from user";
try {
//加載驅(qū)動(dòng)程序
Class.forName(DBDRIVER);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
//連接MySQL數(shù)據(jù)庫(kù)時(shí),要寫上連接的用戶名和密碼
con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
//實(shí)例化Statement對(duì)象
stmt = con.createStatement();
//執(zhí)行數(shù)據(jù)庫(kù)查詢操作
rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString(2);
int age = rs.getInt("age");
System.out.print("id:" + id + " ");
System.out.print("name:" + name + " ");
System.out.println("age:" + age);
}
}
catch (SQLException e) {
e.printStackTrace();
}
System.out.println(con);
try {
//關(guān)閉結(jié)果集
rs.close();
//關(guān)閉操作
stmt.close();
//關(guān)閉數(shù)據(jù)庫(kù)
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
ResultSet中的所有數(shù)據(jù)都可以通過(guò)getString()方法獲得。
PreparedStatement
PreparedStatement是Statement的子接口,屬于預(yù)處理操作。與直接使用Statement不同的是,PreparedStatement在操作時(shí),是先在數(shù)據(jù)表中準(zhǔn)備好了一條SQL語(yǔ)句,但是此SQL語(yǔ)句的具體內(nèi)容暫時(shí)不設(shè)置,而是之后再進(jìn)行設(shè)置。由于PreparedStatement對(duì)象已預(yù)編譯過(guò),所以其執(zhí)行速度要高于Statement對(duì)象。在開發(fā)中不建議使用Statement,而是使用PreparedStatement。
Java視頻學(xué)習(xí):
動(dòng)力節(jié)點(diǎn)Java JDBC視頻教程,本套視頻教程中講解了Java語(yǔ)言如何連接數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行增刪改查操作,適合于已經(jīng)學(xué)習(xí)過(guò)Java編程基礎(chǔ)以及數(shù)據(jù)庫(kù)的同學(xué)。Java教程中闡述了接口在開發(fā)中的真正作用,JDBC規(guī)范制定的背景,JDBC編程六部曲,JDBC事務(wù),JDBC批處理,SQL注入,行級(jí)鎖等。
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“JDBC連接MySQL數(shù)據(jù)庫(kù)的視頻教程”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743