日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JDBC(Java Data Base Connectivity,java数据库连接)

發(fā)布時間:2025/1/21 java 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC(Java Data Base Connectivity,java数据库连接) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

JDBC是一種用于執(zhí)行SQL語句的Java API,可以為多種關系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。

Java數(shù)據(jù)庫連接體系結構是用于Java應用程序連接數(shù)據(jù)庫的標準方法,JDBC對Java程序員而言是API,對實現(xiàn)與數(shù)據(jù)庫連接的服務提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標準的接口,并為數(shù)據(jù)庫廠商及第三方中間件廠商實現(xiàn)與數(shù)據(jù)庫的連接提供了標準方法。

通常一個數(shù)據(jù)庫廠商在推出自己的數(shù)據(jù)庫產(chǎn)品的時候都會提供一套訪問數(shù)據(jù)庫的API,這些API可以用各種語言的形式提供,客戶端應用程序調用這些API來訪問數(shù)據(jù)庫。每一個廠商提供的API都不相同,導致了使用某一個特定的數(shù)據(jù)庫的程序不能移植到另一個數(shù)據(jù)庫上。JDBC以Java類庫來取代數(shù)據(jù)庫廠商的專有API,客戶端只需要調用JDBC API,由JDBC驅動程序(第三方數(shù)據(jù)庫廠商實現(xiàn)Java JDBC標準而定義的特定于某一數(shù)據(jù)庫操作的API)去處理與數(shù)據(jù)庫的通信。

應用:

使用某種數(shù)據(jù)庫持久化數(shù)據(jù)要導入相應的數(shù)據(jù)庫驅動包。
主要數(shù)據(jù)庫JDBC驅動的類名:
SQL Server:com.microsoft.jdbc.sqlserver.SQLServerDriver
MySQL:com.mysql.jdbc.Driver
Oracle:oracle.jdbc.driver.OracleDriver

1、首先我們一般要加載并注冊數(shù)據(jù)庫驅動,有以下三種方式可以做到這一點:
???? ①、Class.forName("JDBC驅動類名") //通過反射機制加載注冊驅動,常用
???? ②、System.setProperty("jdbc.driver","JDBC驅動類名");//設置系統(tǒng)屬性指定數(shù)據(jù)庫驅動
???? ③、DriverManager.registerDriver(new com.mysql.jdbc.Driver());

???? 總結:推薦①,和②兩種方式。
???? 原因:③在編譯時需要導入對應的lib。①,②不需要。
???? 第②種方式的話,可以同時導入多個jdbc驅動,中間用冒號“:”分開
???? 比如System.setProperty("jdbc.drivers","XXXDriver:XXXDriver:XXXDriver");
???? 這樣就一次注冊了三個數(shù)據(jù)庫驅動

???? 在調用Class.forName(“XXXDriver”)時,完成了將具體的驅動程序向JDBC API中驅動管理器DriverManager
???? 的注冊,該 注冊方法在類構造完成前完成,一般使用靜態(tài)語句塊,
???? 通過查看MySQL的驅動實現(xiàn)com.mysql.jdbc.Driver類可以看到

static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");} }
???? 在調用DriverManager的getConnection方法時,一般先在已注冊的驅動中查找可以了解此URL的驅動,
???? 然后調用該驅動的connect方法,從而建立連接,返回的連接都是一個實現(xiàn)java.sql.Connection接口的具體類。

???? JDBC標準中的Driver接口:
????

???? 它是任何數(shù)據(jù)庫提供商的驅動類必須實現(xiàn)的接口,驅動類必須實現(xiàn)該接口中的所有方法!

???? MySQL驅動類Driver源碼:?

package com.mysql.jdbc;import java.sql.SQLException;/*** The Java SQL framework allows for multiple database drivers. Each driver* should supply a class that implements the Driver interface* * <p>* The DriverManager will try to load as many drivers as it can find and then* for any given connection request, it will ask each driver in turn to try to* connect to the target URL.* * <p>* It is strongly recommended that each Driver class should be small and* standalone so that the Driver class can be loaded and queried without* bringing in vast quantities of supporting code.* * <p>* When a Driver class is loaded, it should create an instance of itself and* register it with the DriverManager. This means that a user can load and* register a driver by doing Class.forName("foo.bah.Driver")*/ public class Driver extends NonRegisteringDriver implements java.sql.Driver {// ~ Static fields/initializers// ---------------------------------------------//// Register ourselves with the DriverManager//static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}/*** Construct a new driver and register it with DriverManager*/public Driver() throws SQLException {// Required for Class.forName().newInstance()} }

2、從DriverManager中的到一個DBMS連接,DriverManager類是整個JDBC的起點!利用它可以創(chuàng)建連接,
???? 從而完成后續(xù)的操作。調用DriverManager類的getConnection(String url, String user, String pwd)建立到
???? 數(shù)據(jù)庫的連接,返回一個連接對象。

???? 常見的url:
???? SQL Server :jdbc:microsoft:sqlserver://localhost:1443;databasename=數(shù)據(jù)庫名
???? Oracle :jdbc:oracle:thin:@localhost:1521:ORCL(數(shù)據(jù)庫實例名)
???? MySQL :jdbc:mysql://localhost:3306:/databasename
???? Jdbc-odbc橋 :jdbc:odbc:test(test為odbc數(shù)據(jù)源名稱)

public class DBUtil {private static String url = "jdbc:mysql://localhost:3306/spring";private static String user = "root";private static String pwd = "mysql5";private static Connection conn = null;static {try {//使用Class.forName()加載并注冊JDBC驅動程序Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() {try {//加載 Driver 類并在 DriverManager 類中注冊后,它們即可用來與數(shù)據(jù)庫建立連接。//當調用 DriverManager.getConnection 方法發(fā)出連接請求時,//DriverManager 將檢查每個驅動程序,查看它是否可以建立連接。conn = DriverManager.getConnection(url, user, pwd);} catch (SQLException e) {e.printStackTrace();} return conn;}public static void closeConn() {try {conn.close();} catch (SQLException e) {e.printStackTrace();}} }

3、訪問數(shù)據(jù)庫進行CRUD操作,對數(shù)據(jù)庫操作的接口類一般都位于java.sql包和javax.sql包下。
???? 數(shù)據(jù)庫連接被用于向數(shù)據(jù)庫服務器發(fā)送命令和SQL語句。

常用的數(shù)據(jù)庫操作接口類:

DriverManager:

public class DriverManager extends Object

管理一組 JDBC 驅動程序的基本服務。
在調用 getConnection 方法時,DriverManager 會試著從初始化時加載的那些驅動程序以及使用與當前 applet 或應用程序相同的類加載器顯式加載的那些驅動程序中查找合適的驅動程序。

Connection:

public interface Connection extends Wrapper

與特定數(shù)據(jù)庫的連接(會話)。在連接上下文中執(zhí)行 SQL 語句并返回結果。
注:在配置 Connection 時,JDBC 應用程序應該使用適當?shù)?Connection 方法,比如 setAutoCommit 或 setTransactionIsolation。在有可用的 JDBC 方法時,應用程序不能直接調用 SQL 命令更改連接的配置。默認情況下,Connection 對象處于自動提交模式下,這意味著它在執(zhí)行每個語句后都會自動提交更改。如果禁用了自動提交模式,那么要提交更改就必須顯式調用 commit 方法;否則無法保存數(shù)據(jù)庫更改。

Statement:

public interface Statement extends Wrapper

用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結果的對象。
Statement 對象用來將 SQL 語句發(fā)送到數(shù)據(jù)庫。不帶參數(shù)的 SQL 語句通常使用 Statement 對象執(zhí)行。如果多次執(zhí)行相同的 SQL 語句,使用 PreparedStatement 對象可能更有效。

PreparedStatement:

public interface PreparedStatement extends Statement

表示預編譯的 SQL 語句的對象。
SQL 語句被預編譯并存儲在 PreparedStatement 對象中。然后可以使用此對象多次高效地執(zhí)行該語句。因此多次執(zhí)行的 SQL 語句經(jīng)常創(chuàng)建為 PreparedStatement 對象,以提高效率。
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
resultset rs = pstmt.executequery();

ResultSet:

public interface ResultSet extends Wrapper

表示數(shù)據(jù)庫結果集的數(shù)據(jù)表,通常通過執(zhí)行查詢數(shù)據(jù)庫的語句生成。
ResultSet 對象具有指向其當前數(shù)據(jù)行的光標。最初,光標被置于第一行之前。next 方法將光標移動到下一行;因為該方法在 ResultSet 對象沒有下一行時返回 false,所以可以在 while 循環(huán)中使用它來迭代結果集。


轉載于:https://my.oschina.net/xiaomaoandhong/blog/60795

總結

以上是生活随笔為你收集整理的JDBC(Java Data Base Connectivity,java数据库连接)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美中文字幕在线播放 | 哪里可以免费看av | 人妻熟女一区二区aⅴ水野 91在线观看视频 | 中文在线а√天堂官网 | 国产精品8 | 海角社区登录 | 一本色道综合久久欧美日韩精品 | 免费网站看av | 欧美一区二区三区四区在线观看 | 天天干,夜夜爽 | www.久久av | 亚洲啊v | 性欧美大战久久久久久久久 | 国产又粗又长又硬免费视频 | 日韩av一区二区三区四区 | 午夜国产精品视频 | 午夜精品久久99蜜桃的功能介绍 | 中文字幕在线视频日韩 | 成人免费在线视频网站 | 亚洲视频2| 中文字av| 美女在线观看www | 欧美日韩爱爱 | 国产av自拍一区 | 深夜福利免费在线观看 | 9999re| 欧美日韩一区二区电影 | 国产a国产 | 精产国品一二三产区m553麻豆 | 欧美成人aa| 免费在线观看黄色片 | 国产美女网| 蜜桃视频成人 | 蜜桃成人在线观看 | 高清中文字幕av | 久草香蕉在线 | 欧美在线视频不卡 | 久久激情网| 国产乱色精品成人免费视频 | jizz欧美大全| 五月天堂网 | 无遮挡在线观看 | 黄色1级大片 | 厨房性猛交hd | 亚洲国产日韩一区二区 | 欧美精品久久久久久久多人混战 | 久久久免费看片 | 欧美日韩伦理片 | 一级视频在线播放 | 亚洲区视频在线观看 | 极品尤物魔鬼身材啪啪仙踪林 | 岛国伊人 | 筱田优av| 337p色噜噜 | 老司机免费视频 | 久久久久国产视频 | 少妇免费看 | 久久伊人操 | 狠狠躁18三区二区一区传媒剧情 | 日本特级黄色片 | www精品一区二区三区 | 色婷婷视频在线 | 日韩视频免费观看高清完整版 | 亚洲欧美色图在线 | 91超碰在线 | 日韩a在线播放 | 亚洲国产第一页 | 在线视频亚洲色图 | 伊人免费在线观看高清版 | 欧美三级午夜理伦三级老人 | 免费无遮挡无码永久在线观看视频 | 2021狠狠操 | jlzzjlzz国产精品久久 | 深夜在线| 日韩福利视频 | 成年人在线免费看 | 亚洲精品日产精品乱码不卡 | 久久黄色视屏 | 天天草夜夜草 | 爱爱视频网站免费 | 91精品国产高潮对白 | 成片免费观看 | 国产一区精品在线观看 | 在线免费观看欧美大片 | 二区视频在线 | 天堂成人在线 | 亚洲av综合色区无码二区爱av | 久色视频在线 | 亚洲va欧美 | 熟女少妇一区二区 | 国产不卡a| 丁香七月激情 | 午夜精品网站 | 激情五月综合网 | 殴美一级特黄aaaaaa | 色综合天天网 | 成人黄色视屏 | 亚洲美女毛片 | 免费观看日韩毛片 |