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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...