網(wǎng)站首頁 編程語言 正文
JDBC俗稱java數(shù)據(jù)庫連接(java database connectivity) 我們使用IDEA開發(fā)工具,準備工作如下: pom.xml配置mysql:<!--配置mysql驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> 完成以上配置即可在.java文件中進行操作了 首先我們應該清楚知道java開發(fā)工具連接數(shù)據(jù)庫有什么好處 1、將數(shù)據(jù)放數(shù)據(jù)庫能更好的保存數(shù)據(jù),數(shù)據(jù)庫里的數(shù)據(jù)也更好操作管理 2、可以用java語言操縱sql語句去調用數(shù)據(jù)庫數(shù)據(jù)到程序中 3、JDBC是有SUM提供的一套API,是使用java連接數(shù)據(jù)的一套標準API接口,各個數(shù)據(jù)庫提供上都實現(xiàn)了這一條接口提供了 連接其提供的數(shù)據(jù)庫產品的實現(xiàn)類(以jar包形式,又稱為連接該數(shù)據(jù)庫的驅動包) 使用JDBC連接數(shù)據(jù)庫分為以下三步: 1、加載驅動: Class.forName("數(shù)據(jù)庫包名") 2、連接數(shù)據(jù)庫:DriverManager.getConnection("數(shù)據(jù)庫url(每種數(shù)據(jù)庫有指定格式)",用戶名,密碼); 3、獲取執(zhí)行對象:有兩種方式,一種是預編譯執(zhí)行對象prepareStatement(sql語句);還有一種是直接編譯創(chuàng)建createStatement(sql語句); 前兩步是固定操作(隨著數(shù)據(jù)庫的改變而改變),我們重點學習第3步驟 首先我們介紹執(zhí)行sql語句的方法有: execute是執(zhí)行DDL(create、drop、alter)語句; executeUpdate是執(zhí)行DML(delete、update、insert)語句; 返回int數(shù)據(jù),插入N條數(shù)據(jù)成功返回值就返回成功值N executeQuery是執(zhí)行DQL(select)語句;返回結果集ResultSet,可以查詢表中get對應字段信息。 1、createStatement用法: Statement st = Connection連接對象.createStatement(); int num = st.executeUpdate(sql語句); ResultSet rs = st.executeQuery(sql語句); while(ResultSet返回值結果集.next()){ 字段類型 name = get[字段類型](字段名/字段位置); ... }; 執(zhí)行方法:① 創(chuàng)建Statement執(zhí)行對象。 ② 執(zhí)行Statement執(zhí)行對象方法execute(傳入拼接好的sql語句)。 ③ 多次執(zhí)行同一條語句每次執(zhí)行的是將整個執(zhí)行對象發(fā)送給數(shù)據(jù)庫服務器(耗性能) ④ 判斷返回值要是碰到DQL語句executeQuery的話返回ResultSet結果集還需要進行操作。 ⑤ ResultSet結果集拿取數(shù)據(jù)首先要獲取下一個行next()(這是mysql的操作,一次只能拿取一行信息,數(shù)據(jù)庫不同拿取操作和內容也不徑相同)。 ⑥ 可以通過next()拿取一行數(shù)據(jù)來獲取字段信息。當然我們可加個while循環(huán)判斷就可以拿取查詢的全部行信息了。 ⑦ 在next拿到數(shù)據(jù)行之后,使用get字段類型("字段名"/字段位置)來獲取當前一行中某個字段(相當于指定行指定列找到單元格一樣),不同的字段需要不同的類型接收。 2、prepareStatement用法: String sql = "sql語句 可變參數(shù)用?表示[不能代表字段或表來使用,只能做一 ????????????????????????????????個參數(shù)變量]" PreparedStatement ps = Connection連接對象.prepareStatement(sql); ps.set[字段類型](第幾個?號位置,傳入字段數(shù)據(jù)); ... int返回值 = ps.execteUpdate(); ResultSet返回值結果集 = ps.execteQuery(); while(ResultSet返回值結果集.next()){ 字段類型 name = get[字段類型](字段名/字段位置); ... }; 執(zhí)行方式:① 先將帶參(占位符?)的sql語句prepareStatement預處理(同條sql語句只執(zhí)行一次,在不斷變化的是參數(shù)值) ② 將參數(shù)用set方式給?占位符傳遞,可以不同的位置多次傳遞,傳遞對象是判斷條件中的字面量或者字段值,但是不能將占位符看做表來使用。 ③ 用不同的execte執(zhí)行方法執(zhí)行不同的sql語句,預編譯時傳了sql語句,且返回值也不同。 ④ 判斷返回值要是碰到DQL語句executeQuery的話返回ResultSet結果集還需要進行操作。 ⑤ ResultSet結果集拿取數(shù)據(jù)首先要獲取下一個行next()(這是mysql的操作,一次只能拿取一行信息,數(shù)據(jù)庫不同拿取操作和內容也不徑相同)。 ⑥ 可以通過next()拿取一行數(shù)據(jù)來獲取字段信息。當然我們可加個while循環(huán)判斷就可以拿取查詢的全部行信息了。 ⑦ 在next拿到數(shù)據(jù)行之后,使用get字段類型("字段名"/字段位置)來獲取當前一行中某個字段(相當于指定行指定列找到單元格一樣),不同的字段需要不同的類型接收。 如此我們可以兩者區(qū)分得出以下結論: 1、PreparedStatement的sql語句可通過?占位來傳參。Statement是通過字符串拼接的方式傳遞參數(shù)。 兩者最大的區(qū)別是什么呢? 2、?占位傳參的話是需要指定?號位置和傳入對應參數(shù)指定字段類型的。而字符串拼接是連sql句都可以傳入進去(易被sql注入風險)直接更改執(zhí)行語句。 3、在執(zhí)行性能上,如果執(zhí)行N條相同的sql語句時Statement(傳n條執(zhí)行語句)執(zhí)行效率是比不上PreparedStatement(傳n條語句的每個占位符實參)的。 4、多次執(zhí)行同一條[傳參]sql語句的話不建議使用Statement,無論從語法可讀性、安全考慮還是性能考慮都應該使用預編譯執(zhí)行方式PreparedStatement。 數(shù)據(jù)庫連接池 pom配置:<!-- 數(shù)據(jù)庫連接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> Druid是阿里提供的數(shù)據(jù)庫連接池。 連接池的主要作用: 1、控制連接數(shù)量 2、重用連接 常用操作語法: DruidDataSource dds = new DruidDataSource(); //設置連接池 //設置連接池數(shù)據(jù)庫的基本信息: dds = new DruidDataSource(); //實例化連接池對象 dds.setUrl(數(shù)據(jù)庫Url地址(不同的數(shù)據(jù)庫有不同的地址)); dds.setUsername(數(shù)據(jù)庫用戶名); dds.setPassword(數(shù)據(jù)庫密碼); dds.setInitialSize(初始線程數(shù)); dds.setMaxActive(最大連接數(shù)(當初始線程數(shù)不夠用時才使用)); //就可以開始連接數(shù)據(jù)庫了 Connection connection = dds.getConnection(可以設置連接超時間隔時間);
原文鏈接:https://blog.csdn.net/qq_48475590/article/details/127041394
相關推薦
- 2022-05-25 使用@Builder導致的無法創(chuàng)建無參構造方法
- 2022-01-14 path.join()和path.resolve()區(qū)別
- 2021-12-15 幾個小技巧幫你實現(xiàn)Golang永久阻塞_Golang
- 2022-06-12 Python中property屬性的用處詳解_python
- 2022-04-08 WPF布局及布局容器介紹_基礎應用
- 2023-03-03 一文詳解Go?Http?Server原理_Golang
- 2022-11-05 Android實現(xiàn)折線圖小工具_Android
- 2023-07-06 接口冪等性的通用解決方案golang版
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支