目錄
一、JDBC概念
1.1Java操作數(shù)據(jù)庫的流程
1.2編寫代碼步驟
1.3具體操作
二、JDBC API詳解
2.1 DriverManager(驅(qū)動管理類) 作用
2.2 Connection(數(shù)據(jù)庫連接對象)作用:
2.3 Statement??
2.4 ResultSet (結(jié)果對象集)作用
2.5 PreparedStatement?
三、數(shù)據(jù)庫連接池實(shí)現(xiàn)
一、JDBC概念
1.1Java操作數(shù)據(jù)庫的流程
- 第一步:編寫Java代碼
- 第二步:Java代碼將SQL發(fā)送到MySQL服務(wù)端
- 第三步:MySQL服務(wù)端接收到SQL語句并執(zhí)行該SQL語句
- 第四步:將SQL語句執(zhí)行的結(jié)果返回給Java代碼
1.2編寫代碼步驟
- 創(chuàng)建工程,導(dǎo)入驅(qū)動jar包
- 注冊驅(qū)動
- 獲取連接
- 定義SQL語句
- 獲取執(zhí)行SQL對象
- 執(zhí)行SQL
- 處理返回結(jié)果
- 釋放資源
1.3具體操作
1.3.1 創(chuàng)建新的空的項(xiàng)目
1.3.2定義項(xiàng)目的名稱,并指定位置
?1.3.3 對項(xiàng)目進(jìn)行設(shè)置,JDK版本,編譯版本
?1.3.4 創(chuàng)建模塊,指定模塊的名稱及位置
?1.3.5 導(dǎo)入驅(qū)動包
將mysql的驅(qū)動包放在模塊下的lib(自己創(chuàng)建并命名的文件夾)目錄下,并將該jar添加為庫文件。
驅(qū)動包的下載:
- 1.打開 MySQL 官網(wǎng):https://www.mysql.com/ mysql官網(wǎng)
- 2.點(diǎn)擊 downloads,把頁面滾動到最下面,點(diǎn)擊 MySQL Community (GPL) Downloads
- 3.點(diǎn)擊 Connector/J
- 4.點(diǎn)擊 General Availability(GA) Releases,在 Select Operating System 下拉列表選擇 Platform Independ
?注意在添加庫文件時有三個選項(xiàng):
- Global Library : 全局有效
- Project Library : 項(xiàng)目有效
- Module Library : 模塊有效
根據(jù)自己的需求進(jìn)行選擇,這里我選擇的是模塊有效
1.3.6 在src下創(chuàng)建類
?然后編寫如下代碼:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class test01 {
public static void main(String[] args) throws Exception {
//1.注冊驅(qū)動
Class.forName("com.mysql.jdbc.Driver");
//2.獲取連接
String url ="jdbc:mysql://127.0.0.1:3306/dd1";
String username ="root";
String password ="root3340";
Connection conn = DriverManager.getConnection(url,username,password);
//3.定義sql
String sql ="update account set money =2000 where id =1";
//4.獲取執(zhí)行sql的對象
Statement stmt = conn.createStatement();
//5.執(zhí)行sql
int count= stmt.executeUpdate(sql);//返回值返回的是影響的行數(shù)
//6.處理返回結(jié)果
System.out.println(count);
//7.釋放資源
conn.close();
stmt.close();
}
}
二、JDBC API詳解
2.1 DriverManager(驅(qū)動管理類) 作用
2.1.1注冊驅(qū)動
registerDriver方法用于注冊驅(qū)動的
Class.forName("com.mysql.jdbc.Driver");
查看Driver類的源碼:
?注意:MySQL 5之后的驅(qū)動包,可以省略注冊驅(qū)動的步驟;
?自動加載jar包中META-INF/services/java.sql.Driver文件中的驅(qū)動類;
2.1.2 獲取數(shù)據(jù)庫連接
static Connection? ? ? ? ?getConnection(String url,String user,String password)
參數(shù):
- url:連接路徑
- 語法:jdbc:mysql://ip地址(域名):端口號/數(shù)據(jù)庫名稱?參數(shù)鍵值對1&參數(shù)鍵值對2...
- 實(shí)例:jbdc:mysql://127.0.0.1:3306/dd1
- user:用戶名
- password:密碼
2.2 Connection(數(shù)據(jù)庫連接對象)作用:
- 獲取執(zhí)行SQL的對象
- 管理事務(wù)
2.2.1 獲取執(zhí)行對象
- 普通執(zhí)行SQL對象:
- Statement createStatement()
- 預(yù)編譯SQL的執(zhí)行SQL對象:防止SQL注入:
- PreparedStatement prepareStatement(sql)
- 執(zhí)行存儲過程的對象
- CallableStatement prepareCall(sql)
2.2.2 事務(wù)管理
Connection接口中定義了3個對應(yīng)的方法
- 開啟事務(wù) void setAutoCommit(boolean autoCommit) 將此連接的自動提交模式設(shè)置為給定狀態(tài)。參與autoCommit表示是否自動提交事務(wù),true表示自動提交事務(wù),false表示手動提交事務(wù)。而開啟事務(wù)需要將該參數(shù)設(shè)為false。
- 提交事務(wù) void commit() 使自上次提交/回滾以來所做的所有更改為永久更改,并釋放此Connection對象當(dāng)前持有的所有數(shù)據(jù)庫鎖。
- 回滾事務(wù) void rollback() 撤銷當(dāng)前事務(wù)中所做的更改,并釋放此Connection對象當(dāng)前持有的所有數(shù)據(jù)庫鎖
2.3 Statement??
概述:Statement對象的作用就是用來執(zhí)行SQL語句,而針對不同類型的SQL語句使用的方法也不一樣。
- 執(zhí)行DDL、DML語句
- int executeUpdate(String sql) 執(zhí)行給定的SQL語句,這可能是INSERT,UPDATE或DELETE語句,或者不返回任何內(nèi)容,如SQL,DDL語句的SQL語句。
- 執(zhí)行DQL語句
- ResultSet executeQuery(String sql)? 執(zhí)行給定的SQL語句,該語句返回單個ResultSet對象。
2.4 ResultSet (結(jié)果對象集)作用
封裝SQL查詢語句的結(jié)果。
執(zhí)行DQL語句就會返回該對象,對應(yīng)執(zhí)行DQL語句的方法如下 :
ResultSet executeQuery(sql):執(zhí)行DQL語句,返回ResultSet 對象ResultSet對象提供了操作查詢結(jié)果數(shù)據(jù)的方法如下:
- ?boolean next()
- 將光標(biāo)從當(dāng)前位置向前移動一位
- 判斷當(dāng)前行是否為有效行;ture:有效行,當(dāng)前行有數(shù)據(jù);false:無效行,當(dāng)前行沒有數(shù)據(jù)
- xxx getxxx (獲取數(shù)據(jù))
- xxx:數(shù)據(jù)類型 如int getInt(參數(shù));String getString(參數(shù))參數(shù):int類型的參數(shù),列的編號,從1開始,String類型的參數(shù):列的名稱。
?2.5 PreparedStatement?
- 作用:預(yù)編譯SQL語句并執(zhí)行,防止SQL注入問題;
- SQL注入:SQL注入是通過操作輸入來修改事先定義好的SQL語句,用以達(dá)到執(zhí)行代碼對服務(wù)器攻擊的方式。
- 1.獲取PreparedStudent對象
- String sql ="select *from user where username ="root" and password ="1234";
- 通過Connection對象獲取,并傳入對應(yīng)sql語句;
- PreparedStatement pstmt = conn.preparedstatement(sql);
- 2.設(shè)置參數(shù)值
- PreparedStatement對象:setxxx(參數(shù)1:位置編號從1開始,參數(shù)2:xxx的值)xxx:數(shù)據(jù)類型;
- 3.執(zhí)行SQL語句:
- executeUpdate():執(zhí)行DDL語句和DML語句;
- executeQuery():執(zhí)行DQL語句;
//1:注冊驅(qū)動
Class.forName("com.mysql.jdbc.Driver");
//2:獲取連接
String url ="jbdc:mysql:///dd1?useSSL=false";
String username1 ="root";
String password1 ="1234";
Connection conn = DriverManager.getConnection(url,username1,password1);
//定義接收用戶輸入和用戶名和密碼:
String name ="zhangsan";
String pwd ="ffff";
//3:定義sql
String sql ="select *from tb_user where username=? and password=?";
//4.獲取PreparedStatement對象
PreparedStatement pstmt = conn.prepareStatement(sql);
//設(shè)置?
pstmt.setString(1,name);
pstmt.setString(2,pwd);
//5.執(zhí)行sql
ResultSet resultSet = pstmt.executeQuery();
//判斷是否成功與否
if(resultSet.next()){
System.out.println("登錄成功!");
}else{
System.out.println("登錄失敗");
}
//7.釋放資源
conn.close();
pstmt.close();
resultSet.close();
三、數(shù)據(jù)庫連接池實(shí)現(xiàn)
數(shù)據(jù)庫連接池簡介:
- 數(shù)據(jù)庫連接池是個容器,負(fù)責(zé)分配、管理數(shù)據(jù)庫連接(Connection)
- 它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個;
- 釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏
好處:
- 資源重用
- 提升系統(tǒng)響應(yīng)速度
- 避免數(shù)據(jù)庫連接遺漏
- 標(biāo)準(zhǔn)接口:DataSource;
- 接口提供的獲取連接的功能:Connection getConnection();
- 常見的數(shù)據(jù)庫連接池:DBCP、C3P0、Driud;
Driud使用
- 導(dǎo)入jar包
- 定義配置文件
- 加載配置文件
- 獲取數(shù)據(jù)庫連接池對象
- ?獲取連接
具體的步驟:
1.現(xiàn)在通過代碼實(shí)現(xiàn),首先需要先將druid的jar包放到項(xiàng)目下的lib下 并添加為庫文件

?2.編寫的配置文件如下:文章來源:http://www.zghlxwxcb.cn/news/detail-450780.html
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db1?
useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化連接數(shù)量
initialSize=5
# 最大連接數(shù)
maxActive=10
# 最大等待時間
maxWait=3000
3.使用的代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-450780.html
* Druid數(shù)據(jù)庫連接池演示
*/
public class DruidDemo {
? ?public static void main(String[] args) throws
Exception {
? ? ? ?//1.導(dǎo)入jar包
? ? ? ?//2.定義配置文件
? ? ? ?//3. 加載配置文件
? ? ? ?Properties prop = new Properties();
? ? ? ?prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
? ? ? ?//4. 獲取連接池對象
? ? ? ?DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
? ? ? ?//5. 獲取數(shù)據(jù)庫連接 Connection
? ? ? ?Connection connection = dataSource.getConnection();
? ? ? ?System.out.println(connection); //獲取到了連接后就可以繼續(xù)做其他操作了
? ? ?
); }}
到了這里,關(guān)于JDBC連接數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!