1. 程式人生 > >jdbc學習03

jdbc學習03

http://www.yiibai.com/jdbc/jdbc_quick_guide.html


JDBC是什麼?

JDBC API是一個Java API,可以訪問任何型別表列資料,特別是儲存在關係資料庫中的資料。JDBC代表Java資料庫連線。

JDBC庫中所包含的API任務通常與資料庫使用:

  • 連線到資料庫

  • 建立SQL或MySQL語句

  • 在資料庫中執行SQL或MySQL查詢

  • 檢視和修改記錄

 

先決條件:

學習JDBC,需要在以下兩個主題有一定的瞭解:

  1. JAVA核心程式設計

  2. SQL或MySQL資料庫

JDBC - 環境設定:

請確認您已完成以下設定:

  1. 核心JAVA安裝

  2. SQL 或 MySQL資料庫安裝

除上述者外,需要建立一個數據庫,為本程測試專案使用。假設這是EMP,在同一個資料庫上建立表Employees。

建立JDBC應用程式:

參與建立一個JDBC應用程式,本教程中按六個步驟進行:

匯入包:

這需要你有軟體包包含了資料庫程式設計所需的JDBC類。大多數情況下,使用import java.sql.* 就足夠了,如下所示:

//STEP 1. Import required packages
import java.sql.*;

註冊JDBC驅動程式:

這需要初始化驅動程式,這樣就可以開啟與資料庫的通訊通道。以下是程式碼片段實現這一目標:

//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

開啟一個連線:

這需要使用DriverManager.getConnection()方法來建立一個Connection物件,它代表一個物理連線的資料庫,如下所示:

//STEP 3: Open a connection
//  Database credentials
static final String USER = "username";
static final String PASS = "password";
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);

執行一個查詢:

這需要使用一個物件型別Statement或PreparedStatement構建,並提交一個SQL語句到資料庫。如下:

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

如果有一個SQL UPDATE,INSERT或DELETE語句,那麼需要下面的程式碼片段:

//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);

從結果集中提取資料:

這一步是必需的情況下,從資料庫中獲取資料。可以使用適當的ResultSet.getXXX()方法來檢索的資料結果如下:

//STEP 5: Extract data from result set
while(rs.next()){
    //Retrieve by column name
    int id  = rs.getInt("id");
    int age = rs.getInt("age");
    String first = rs.getString("first");
    String last = rs.getString("last");

    //Display values
    System.out.print("ID: " + id);
    System.out.print(", Age: " + age);
    System.out.print(", First: " + first);
    System.out.println(", Last: " + last);
}

清理環境:

應該明確地關閉所有的資料庫資源,對依賴於JVM的垃圾收集如下:

//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();

第一個JDBC 程式:

基於上面的步驟,我們可以有以下綜合示例程式碼,我們可以用它作為模板而寫JDBC程式碼:
此示例程式碼已被寫入基於對環境和資料庫環境一章中設定完成。

//STEP 1. Import required packages
import java.sql.*;

public class FirstExample {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);

      //STEP 5: Extract data from result set
      while(rs.next()){
         //Retrieve by column name
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");

         //Display values
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //STEP 6: Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
      //finally block used to close resources
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      }// nothing we can do
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end FirstExample - by www.yiibai.com

現在讓我們來編譯上面的例子如下:

C:\>javac FirstExample.java
C:\>

當你執行FirstExample的,它會產生以下結果:

C:\>java FirstExample
Connecting to database...
Creating statement...
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

SQLException方法:

一個SQLException既可以發生在驅動程式和資料庫。當這樣的異常時,SQLException型別的物件將被傳遞到catch子句。
通過SQLException物件有以下幾種方法可用於獲取更多的關於異常的資訊:

方法 描述
getErrorCode() 獲取與異常關聯的錯誤號。
getMessage() 獲取的JDBC驅動程式的錯誤處理錯誤訊息的驅動程式,或獲取Oracle錯誤號和訊息的資料庫錯誤。
getSQLState() 獲取XOPEN SQLSTATE字串。對於JDBC驅動程式錯誤,沒有有用的資訊,從該方法返回。對於一個數據庫錯誤,五位的XOPEN SQLSTATE程式碼返回。這種方法可以返回null。
getNextException() 獲取異常鏈中的下一個Exception物件。
printStackTrace() 列印當前的異常,或可丟擲,並回溯到標準錯誤流。
printStackTrace(PrintStream s) 列印此丟擲物件及其回溯到指定的列印流。
printStackTrace(PrintWriter w) 列印此丟擲物件及其回溯您指定列印作家。

通過利用從Exception物件提供的資訊,可以捕獲一個異常,並適當地繼續執行程式。這是一個try塊中的一般形式:

try {
   // Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
   // Your exception handling code goes between these 
   // curly braces, similar to the exception clause 
   // in a PL/SQL block.
}
finally {
   // Your must-always-be-executed code goes between these 
   // curly braces. Like closing database connection.
}

JDBC - 資料型別:

下表總結了預設的JDBC資料型別的Java資料型別轉換,當呼叫PreparedStatement或CallableStatement物件的setXXX()方法,或ResultSet.updateXXX()方法。

SQL JDBC/Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
CHAR java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
BIT boolean setBoolean updateBoolean
NUMERIC java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT byte setByte updateByte
SMALLINT short setShort updateShort
INTEGER int setInt updateInt
BIGINT long setLong updateLong
REAL float setFloat updateFloat
FLOAT float setFloat updateFloat
DOUBLE double setDouble updateDouble
VARBINARY byte[ ] setBytes updateBytes
BINARY byte[ ] setBytes updateBytes
DATE java.sql.Date setDate updateDate
TIME java.sql.Time setTime updateTime
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
BLOB java.sql.Blob setBlob updateBlob
ARRAY java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
STRUCT java.sql.Struct SetStruct updateStruct

JDBC3.0的增強支援BLOB,CLOB,ARRAY,REF資料型別。的ResultSet物件UPDATEBLOB(),updateCLOB(),updateArray()和updateRef()方法,使您可以在伺服器上直接操作相應的資料。

setXXX()和updateXXX()方法,可以轉換成特定的Java型別到特定的JDBC資料型別。setObject()和updateObject()方法,幾乎所有的Java型別對映到JDBC資料型別。

ResultSet物件提供相應的getXXX()方法為每個資料型別來檢索列值。每一種方法,可以使用與列名或由它的序號位置。

SQL JDBC/Java setXXX getXXX
VARCHAR java.lang.String setString getString
CHAR java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
BIT boolean setBoolean getBoolean
NUMERIC java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT byte setByte getByte
SMALLINT short setShort getShort
INTEGER int setInt getInt
BIGINT long setLong getLong
REAL float setFloat getFloat
FLOAT

相關推薦

jdbc學習03

http://www.yiibai.com/jdbc/jdbc_quick_guide.html JDBC是什麼? JDBC API是一個Java API,可以訪問任何型別表列資料,特別是儲存在關係資料庫中的資料。JDBC代表Java資料庫連線。 JDBC庫中所包

【spark 深入學習 03】Spark RDD的蠻荒世界

解釋 不難 特性 bsp resid 易懂 優化 方式 序列 RDD真的是一個很晦澀的詞匯,他就是伯克利大學的博士們在論文中提出的一個概念,很抽象,很難懂;但是這是spark的核心概念,因此有必要spark rdd的知識點,用最簡單、淺顯易懂的詞匯描述。不想用學術話的語言來

JSP、Servlet、JDBC學習筆記

html con bat 什麽 cal servlet das www 所有 WEB的學習 * 服務器 * 網絡的架構(面試題) * C/S client/server 客戶端/服務器端 例子:QQ 快播 暴風影音 * 優點:交互性好,服務器壓力小。 * 缺點:客戶端更新了

jQuery 學習03——HTML:捕獲、設置、添加元素、刪除元素、CSS類、CSS()方法、尺寸

baidu bject 字段 document color 一個 元素 顯示 cnblogs jQuery - 獲取內容text()、html() 以及 val()和屬性attr() jQuery 中非常重要的部分,就是操作 DOM 的能力。 DOM = Document

python學習03-數據類型

默認 1.5 mos borde 基本數據類型 order end mod 技術分享 一、基本數據類型——數字 布爾型 bool型只有兩個值:True和False 之所以將bool值歸類為數字,是因為我們也習慣用1表示True,0表示False。 以下是布爾

Java學習03-進制學習

數據 依次 span 記錄 gpo 十進制 pre 余數 ava 計算機中是以二進制來進行數據傳遞的,二進制分為二進制、八進制、十進制、十六進制 而他們之間如何進行轉換呢,二進制作為元,其他進制都是經二進制進行換算的,所以無論什麽進制之間的轉換都是先轉換為二進制,再由二進制

Go語言學習03

spa int == AD 訪問 關鍵字 print ack 得到 Go語言-數組類型 一個數組(Array)就是一個可以容納若幹類型相同的元素的容器。這個容器的大小(即數組的長度)是固定的,且是體現在數組的類型字面量之中的。比如,我們聲明了一個數組類型: type MyN

python3自動化學習03

變量 中斷函數 需要 拷貝 result pen vars show engine 概要:深淺拷貝、函數、lambda、內置函數、文件操作 一、深淺拷貝 1.對於字符串、數字來說,賦值、深拷貝、淺拷貝的結果是一樣的,都是用的內存中的同一個地址。 如下圖所示: 1 i

JDBC學習筆記

unicode oca nco serve utf-8 enc mys val class 今天在連接JDBC時,出現了錯誤 最開始的URL是這樣寫的 Connection conn = DriverManager.getConnection("jdbc:mysql://l

小記----JDBC學習了解

序言 inf ron 大數 bubuko c學習 分享 接口 包裝 JDBC   使用java程序去連接數據庫。   JDBC是一種執行sql語句的java API;   JDBC由一組用java序言編寫的類和接口組成;   JDBC提供了一種操作數據的標準;   JDBC

redis學習-03

事務 令行 slave exe 如果 服務 運行 主庫 開啟 1、開啟事務 multi 2、關閉事務 discard 3、提交 EXEC 4、監控 watch 5、主從配置 配從不配主,slaveof主庫IP主庫端口 是否以守護進程運行如果以守護

HTML 學習03

footer inf eee black NPU tag 無序列表 單擊 單選框 HTML 表格 表格由 <table> 標簽來定義。每個表格均有若幹行(由 <tr> 標簽定義),每行被分割為若幹單元格(由 <td> 標簽定義)。字母 t

JSP學習-03

-s 有一個 數字 屬性 簡單 必須 strong base brush JSP 動作元素 與JSP指令元素不同的是,JSP動作元素在請求處理階段起作用。JSP動作元素是用XML語法寫成的。 利用JSP動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁

OpengGl學習03 渲染管線

渲染管線(rendering pipeline):它是一系列資料處理過程,並且將應用程式的資料轉換到最終渲染的影象。流程如下: OpenGL首先接收使用者提供的幾何資料(頂點和幾何圖元),並且將他們輸入到一些列著色器階段中進行處理,包括:頂點著色、細分著色(它本身包含兩個著色器),以及最後的幾

jdbc學習02

JDBC連線方法,並實現增刪改查,此為巨集觀過程,未涵蓋具體的語法語句 //STEP 1. Import required packages import java.sql.*; public class FirstExample { // JDBC driver name and

javaWeb中的JDBC學習入門

學習引薦地址:https://www.cnblogs.com/xdp-gacl/p/3946207.html  一、JDBC的相關概念介紹   1.1 資料庫驅動     其實就好比我們平時使用到的獨立音效卡、網絡卡之類的外部裝置,新插到電腦上並不能正常使用,必須要安裝與之對應的驅動程式方可正

Spring 學習03

一、上節內容回顧 1 註解ioc操作 (1)使用註解建立物件 - 四個註解 (2)使用註解注入屬性 - 兩個註解 2 aop (1)aop原理 (2)aop術語 - 切入點 - 增強 - 切面 3 spring的aop操作 (1)基於aspectj的xml方式 二、今天內容介紹

MongDB學習03:資料基本操作

文件 組成 集合;集合 組成 資料庫。 文件 如同python中dict. 資料庫操作是使用JavaScript shell進行操作 資料庫操作 檢視所有資料庫 show dbs use 切換資料操作,也是建立資料庫命令 use test 資料庫刪除

JDBC學習與模式應用[20181107]

問題:1.下圖中的list<Master>和ArrayList<Master>的意思   為什麼放在裡面?   筆記:學習和練習程式碼在day14中 一、JDBC -》概述:JDBC(Java Data Base Connectivity,ja

多執行緒學習-03

執行緒通訊 生產者消費者問題(英語:Producer-consumer problem),也稱有限緩衝問題(英語:Bounded-buffer problem),是一個多執行緒同步問題的經典案例。 該問題描述了兩個(多個)共享固定大小緩衝區的執行緒——即所謂的“生產者”和“消費者”——在實際執行