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

歡迎訪問 生活随笔!

生活随笔

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

java

Java JDBC

發布時間:2023/12/10 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java JDBC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java JDBC

JDBC(Java Database Connectivity)是一個獨立于特定數據庫管理系統、通用的SQL數據庫存取和操作的公共接口(一組API),定義了用來訪問數據庫的標準Java類庫,使用這個類庫可以以一種標準的方法、方便地訪問數據庫資源。

JDBC API

JDBC API 是一系列的接口,它使得應用程序能夠進行數據庫聯接,執行SQL語句,并且得到返回結果。

Driver接口

?Java.sql.Driver 接口是所有JDBC 驅動程序需要實現的接口。這個接口是提供給數據庫廠商使用的,不同數據庫廠商提供不同的實現

?在程序中不需要直接去訪問實現了Driver接口的類,而是由驅動程序管理器類(java.sql.DriverManager)去調用這些Driver實現

JDBC編程步驟:

  • 加載驅動
  • 獲得數據庫連接
  • 創建Statement對象
  • 對結果集進行處理
  • 關閉相關的連接對象
  • 加載與注冊JDBC 驅動

    ?加載 JDBC 驅動需調用Class類的靜態方法forName(),向其傳遞要加載的JDBC 驅動的類名

    ?DriverManager 類是驅動程序管理器類,負責管理驅動程序

    ?通常不用顯式調用DriverManager 類的 registerDriver() 方法來注冊驅動程序類的實例,因為Driver接口的驅動程序類都包含了靜態代碼塊,在這個靜態代碼塊中,會調用DriverManager.registerDriver() 方法來注冊自身的一個實例

    建立連接

    ?可以調用DriverManager 類的 getConnection() 方法建立到數據庫的連接

    ?JDBCURL 用于標識一個被注冊的驅動程序,驅動程序管理器通過這個URL 選擇正確的驅動程序,從而建立到數據庫的連接。

    ?JDBCURL的標準由三部分組成,各部分間用冒號分隔。

    –jdbc:<子協議>:<子名稱>

    –協議:JDBCURL中的協議總是jdbc

    –子協議:子協議用于標識一個數據庫驅動程序

    –子名稱:一種標識數據庫的方法。子名稱可以依不同的子協議而變化,用子名稱的目的是為了定位數據庫提供足夠的信息

    示例:

    //對于 Oracle 數據庫連接,采用如下形式: jdbc:oracle:thin:@localhost:1521:sid //對于 SQLServer 數據庫連接,采用如下形式: jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid //對于 MYSQL 數據庫連接,采用如下形式: jdbc:mysql://localhost:3306/sid

    訪問數據庫

    • Statement
    • PrepareStatement
    • CallableStatement
    Statement

    ?通過調用 Connection對象的 createStatement 方法創建該對象

    ?該對象用于執行靜態的SQL 語句,并且返回執行結果

    ?Statement接口中定義了下列方法用于執行SQL 語句:

    ? –ResultSet excuteQuery(Stringsql)

    ? –int excuteUpdate(Stringsql)

    ResultSet

    ?通過調用 Statement對象的excuteQuery()方法創建該對象

    ?ResultSet 對象以邏輯表格的形式封裝了執行數據庫操作的結果集,ResultSet接口由數據庫廠商實現

    ?ResultSet 對象維護了一個指向當前數據行的游標,初始的時候,游標在第一行之前,可以通過ResultSet對象的next()方法移動到下一行

    ?ResultSet 接口的常用方法:

    Num方法描述
    描述byte getByte(int columnIndex)返回指定字段的字節值
    Date getDate(int columnIndex)返回指定字段的日期值
    3Float getFloat(int columnIndex)返回指定字段的浮點值
    4int getInt(int columnIndex)返回指定字段的整數值
    5String getString(int columnIndex)返回指定字段的字符串值
    6double getDouble(String columnName)返回指定字段的雙精度值
    7long getLong(String columnName)返回指定字段的long型整值
    8boolean next()返回是否還有下一字段

    PreparedStatement

    ?可以通過調用Connection對象的 preparedStatement() 方法獲取 PreparedStatement 對象

    ?PreparedStatement 接口是 Statement的子接口,它表示一條預編譯過的SQL 語句

    ?PreparedStatement 對象所代表的SQL 語句中的參數用問號(?)來表示,調用PreparedStatement 對象的 setXXX() 方法來設置這些參數. setXXX() 方法有兩個參數,第一個參數是要設置的SQL 語句中的參數的索引(從 1 開始),第二個是設置的SQL 語句中的參數的值

    PreparedStatement vs Statement

    ?代碼的可讀性和可維護性.

    ?PreparedStatement 能最大可能提高性能:

    –DBServer會對預編譯語句提供性能優化。因為預編譯語句有可能被重復調用,所以語句在被DBServer的編譯器編譯后的執行代碼被緩存下來,那么下次調用時只要是相同的預編譯語句就不需要編譯,只要將參數直接傳入編譯過的語句執行代碼中就會得到執行。

    –在statement語句中,即使是相同操作但因為數據內容不一樣,所以整個語句本身不能匹配,沒有緩存語句的意義.事實是沒有數據庫會對普通語句編譯后的執行代碼緩存.這樣每執行一次都要對傳入的語句編譯一次.

    –(語法檢查,語義檢查,翻譯成二進制命令,緩存)

    ?PreparedStatement 可以防止 SQL 注入

    DatabaseMetaData類

    ?DatabaseMetaData
    類中提供了許多方法用于獲得數據源的各種信息,通過這些方法可以非常詳細的了解數據庫的信息:

    –getURL():返回一個String類對象,代表數據庫的URL。

    –getUserName():返回連接當前數據庫管理系統的用戶名。

    –isReadOnly():返回一個boolean值,指示數據庫是否只允許讀操作。

    –getDatabaseProductName():返回數據庫的產品名稱。

    –getDatabaseProductVersion():返回數據庫的版本號。

    –getDriverName():返回驅動驅動程序的名稱。

    –getDriverVersion():返回驅動程序的版本號。

    ResultSetMetaData類

    ?可用于獲取關于 ResultSet 對象中列的類型和屬性信息的對象:

    –getColumnName(int column):獲取指定列的名稱

    –getColumnCount():返回當前ResultSet 對象中的列數。

    –getColumnTypeName(int column):檢索指定列的數據庫特定的類型名稱。

    –getColumnDisplaySize(int column):指示指定列的最大標準寬度,以字符為單位。

    –isNullable(int column):指示指定列中的值是否可以為null。

    –isAutoIncrement(int column):指示是否自動為指定列進行編號,這樣這些列仍然是只讀的。

    總結

    以上是生活随笔為你收集整理的Java JDBC的全部內容,希望文章能夠幫你解決所遇到的問題。

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