JDBC資料庫操作

来源:https://www.cnblogs.com/rongbin/archive/2018/07/30/9393401.html
-Advertisement-
Play Games

1.資料庫的連接方式: ①建立JDBC-ODBC橋接器 應用程式只需建立JDBC和ODBC之間的連接,和資料庫的連接由ODBC完成; 優點:使得JDBC有能力訪問幾乎所有類型的資料庫。 缺點:依賴於ODBC,移植性較差。 ②載入純Java資料庫驅動程式 優點:不依賴於平臺。 //驅動程式由資料庫廠家 ...


1.資料庫的連接方式:

①建立JDBC-ODBC橋接器

應用程式只需建立JDBC和ODBC之間的連接,和資料庫的連接由ODBC完成;

優點:使得JDBC有能力訪問幾乎所有類型的資料庫。

缺點:依賴於ODBC,移植性較差。

try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){
    System.out.println(e);
}

 

②載入純Java資料庫驅動程式

優點:不依賴於平臺。

//驅動程式由資料庫廠家提供

 

2.建立連接:

使用java.sql.Connection類聲明一個對象,再使用類DriverManager調用它的靜態方法getConnection創建連接對象:

try{
    Connection con=DriverManager.getConnection("jdbc:odbc:數據源名字","loginName","password");
}
catch(SQLException e){}

 

3.查詢操作:

使用Statement聲明一個SQL語句對象,讓連接對象con調用方法createStatment()創建SQL語句對象:

try{
    Statement sql=con.createStatement();
}
catch(SQLException e){}

查詢結果存放於ResultSet類聲明的對象中:

ResultSet rs=sql.executeQuery(SQL);

ResultSet對象的方法:

boolean next()

byte getByte(int columnIndex或String columnIndex)

Date getDate(int columnIndex或String columnIndex)

double getDouble(int columnIndex或String columnIndex)

float getFloat(int columnIndex或String columnIndex)

int getInt(int columnIndex或String columnIndex)

long getLong(int columnIndex或String columnIndex)

String getString(int columnIndex或String columnIndex)

 

(1)順序查詢:

①連接對象con調用getMetaData()返回一個DatabaseMetaData對象:

DatabaseMetaData metadata=con.getMetaData();

②MetaData對象再調用getColumns可以將表的欄位信息以行列的形式存儲在一個ResultSet對象中:

ResultSet tableMessage=metadata.getColumns(資料庫名,資料庫擴展名,表名,欄位名);

③游標獲取信息:

//游標初始位置在第1行之前

tableMessage對象調用next()使游標向下移動一行(順序查詢)

④控制游標:

Statement對象使用連接對象的createStatement(int type,int concurrency)方法可返回一個可滾動的結果集;

type的取值決定滾動方式:

ResultSet.TYPE_FORWORD_ONLY  //結果集的游標只能向下滾動;

ResultSet.TYPE_SCROLL_INSENSITIVE  //結果集的游標可以上下移動(當資料庫變化時,當前結果集不變);

ResultSet.TYPE_SCROLL_SENSITIVE  //結果集的游標可以上下移動(當資料庫變化時,當前結果集同步改變);

 

concurrency的取值決定是否可以用結果集更新資料庫:

ResultSet.CONCUR_READ_ONLY  //不能用結果集更新資料庫中的表;

ResultSet.CONCUR_UPDATABLE  //能用結果集更新資料庫中的表;

 

ResultSet對象的方法:

public boolean previous()

將游標向上移動,當移到結果集第一行之前時返回false;

public void beforeFirst()

將游標移動到結果集的初始位置,即在第一行之前;

public void afterLast()

將游標移到結果集最後一行之後;

public void first()

將游標移到結果集的第一行;

public void last()

將游標移到結果集的最後一行;

public boolean isAfterLast()

判斷游標是否在最後一行之後;

public boolean isBeforeFirst()

判斷游標是否在第一行之前;

public boolean isFirst()

判斷游標是否指向結果集的第一行;

public boolean isLast()

判斷游標是否指向結果集的最後一行;

public int getRow()

得到當前游標所指行的行號,行號從1開始,如果結果集沒有行,返回0;

public boolean absolute(int row)

將游標移到參數row指定的行(負值為倒數的行數);

 

(2)排序查詢:

SQL語句:SELECT * FROM  表名 ORDER  BY  欄位名

 

(3)模糊查詢:

SQL語句:SELECT * FROM  表名 WHERE 欄位名 LIKE '[含有的字元]%'
//%代表0個或多個字元

 

4.更新、添加與刪除操作:

更新:

SQL語句:UPDATE <表名> SET <欄位名> = 新值 WHERE <條件子句>
如:UPDATE goods  SET price = 3009 WHERE name='海爾電視機'
ResultSet結果集:
①結果集對象調用absolute()方法移動游標到第n行:
    rs.absolute(n);
②結果集對象調用以下方法更新第n行第p列的值:
    updateInt(String p,int x) , updateInt(int p,int x)
    updateLong(String p,long x) , updateLong(int p,long x)
    updateDouble(String p,double x) , updateDouble(int p,double x)
    updateString(String p,String x) , updateString(int p,String x)
    updateBoolean(String p,boolean x) , updateBoolean(int p,boolean x)
    updateDate(String p,Date x) , updateDate(int p,Date x)
③結果集對象調用updateRow()方法更新第n行記錄:
    rs.updateRow();

添加:

SQL語句:INSERT INTO 表(欄位列表) VALUES (對應的具體的記錄)
如:INSERT INTO goods(number,name,madeTime,price) VALUES ('A009','手機','2010-12-20',3976)
ResultSet結果集:
①結果集對象移動游標到插入行(暫存區域):
    rs.moveToInsertRow();
②結果集對象調用以下方法更新插入行的列值:
    rs.updateString(1,"c002");
    rs.updateDate(2,Date());
    rs.updateDouble(3,5356);
③結果集對象調用insertRow()方法向資料庫表中插入一行新紀錄:
    rs.insertRow();

刪除:

SQL語句:DELETE FROM <表名> WHERE <條件子句>
如:DELETE FROM goods WHERE number='B002'

 

5.預處理語句:

//將SQL語句解釋為資料庫底層的內部命令,直接讓資料庫去執行這個命令,提高了訪問資料庫的速度

連接對象con調用prepareStatement(String sql)方法對參數sql指定的SQL語句進行預編譯處理;

prepareStatement對象調用的方法:

ResultSet executeQuery()

boolean execute()

int executeUpdate()

 

對SQL進行預處理時可使用通配符"?"來代替欄位的值:

預處理語句設置通配符"?"的值的常用方法:

void setDate(int parameterIndex,Date x)

void setDouble(int parameterIndex,double x)

void setFloat(int parameterIndex,float x)

void setInt(int parameterIndex,int x)

void setLong(int parameterIndex,long x)

void setString(int parameterIndex,String x)

 

6.事務(一組SQL語句):

事務處理:應用程式保證事務中的SQL語句要麼全部都執行,要麼一個都不執行。

①連接對象con調用setAutoCommit(boolean autoCommite)方法,將參數autoCommit取值false來關閉自動提交模式;

②連接對象con調用commit()方法讓事務中的SQL語句全部生效;

③連接對象con調用rollback()方法處理事務失敗,即事務中任何一個SQL語句未能生效,拋出SQLException異常,調用rollback()方法撤銷事務所有的語句;

 

7.批處理:

Statement對象調用executeBatch()方法可以一次執行多條SQL語句;

事先讓Statement對象調用addBatch(String sql)方法將要執行的SQL語句添加到該對象中;

 

8.CachedRowSetImol類

//解決連接對象con關閉後,ResultSet對象中的數據消失問題(避免長時間占用資料庫的連接資源)

com.sun.rowset.CachedRowSetImol類(實現了CachedRowSet介面)

CachedRowSetImpl對象調用populate(Resultset rs)方法保存ResultSet對象中的數據:

如:ResultSet rs=sql.executeQuery(SQL);
  CachedRowSetImpl rowSet=new CachedRowSetImpl;
  rowSet.populate(rs);
  con.close();

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建實例: String str = new String();str = "String"; 1、char charAt(int index):返回指定索引位置的字元 2、String substring(int beginIndex):返回指定起始位置至字元串末尾的字元串 String subs ...
  • 前言 從文章的標題,就可以清晰地瞭解到,本文是來辨析三個容易將新手弄糊塗的技術名詞。如果,你一眼看過去就知道這三個名詞的區別及關係,那麼,這篇文章你可以不用繼續讀下去了;除非,你是想要看看我有什麼解釋的不對,來糾錯的(來找茬,哈哈),也歡迎留言。 名詞解釋 JPA(Java Persistence ...
  • 本文內容 OID查詢 對象導航查詢 HQL查詢 QBC查詢 SQL查詢 首發日期:2018-07-31 hibernate的查詢方式: hibernate有很多查詢方式 OID查詢 對象導航查詢: HQL查詢: QBC查詢: SQL查詢: OID查詢: OID查詢:基於唯一標識屬性(主鍵)來查詢 使... ...
  • 報錯信息部分截取: 錯誤根源: 排錯: 相信很多人都是這樣寫的init 文件的吧: 然後再叢manager啟動文件導入create_app 這樣寫了之後,那麼你就只能在視圖函數中執行資料庫操作了!!! 解決辦法: 方式一 直接實例化app 不要寫create_app函數了,在啟動文件中直接導入app ...
  • 一、單例模式存在的意義 在這裡的單例就是只有一個實例(這裡的實例就像在面向對象的時候,創建了一個對象也可以說創建了一個實例),只用一個實例進行程式設計,首先我們可以瞭解一下什麼時候不適合使用單例模式,比如我們需要使用類同時創建多個對象的時候,且每個對象中封裝了不同的數據的時候,就不能使用單例模式,就 ...
  • 前言 近日,看到Myabtis中組件中SqlSessionFactory由SqlSessionFactoryBuilder().build()生成時,且採用Builder模式,遂記錄學習之。 1、什麼是Builder模式? (1)對於複雜的對象,如果只是用構造方法創建的話,構造方法中會存在很多的邏輯 ...
  • 前言:這幾天的面試,感覺自己對spring 的整個掌握還是很薄弱。所以需要繼續加強。 這裡說明一下spring的這幾個面試題,但是實際的感覺還是不對的,這種問題我認為需要真正讀了spring的源碼後說出來的東西才有意義。這種面試的問法,也只能是面試的問法,對實際的掌握還是沒有絲毫意義的。所以我認為 ...
  • 1. 自己寫 filter 攔截來實現,但要註意的時,在WEB.XML 中配置 filter 的時候,請將這個 filter 放在第一位.2. 採用開源的實現 ESAPI library ,參考網址: https://www.owasp.org/index.php/Category:OWASP_En ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...