oracle學習筆記(六) JDBC使用

来源:https://www.cnblogs.com/kexing/archive/2019/04/25/10770470.html
-Advertisement-
Play Games

JDBC使用 1. 導包 直接使用IDEA導入依賴包即可 新建一個lib,把jar包放在這裡 2. 載入驅動 3. 創建Connection對象 連接資料庫,從而獲得Connection對象 PS:查看實例名 1. 開始 運行 輸入 2. 找到服務 3. 後面的就是我們的oracle資料庫的實例名 ...


JDBC使用

1. 導包

直接使用IDEA導入依賴包即可
新建一個lib,把jar包放在這裡

2. 載入驅動

Class.forName("oracle.jdbc.driver.OracleDriver");

3. 創建Connection對象

連接資料庫,從而獲得Connection對象

String url = "jdbc:oracle:thin:@localhost:1521:ORCL";//具體的實例名可以查看自己的服務管理,有個
Connection conn = DriverManager.getConnection(url,"scott","tiger");//後面的兩個參數分別為連接資料庫的用戶名和密碼

PS:查看實例名

  1. 開始->運行->輸入services.msc
  2. 找到服務
  3. 後面的就是我們的oracle資料庫的實例名

4. 創建Statement對象

Statement stmt = conn.createStatement();
  • Statement: 普通語句類型,只能執行一條完整的語句
  • PreparedStatement: 預編譯語句,它支持占位符“?”, 如:select * from emp WHERE ename LIKE ? and sal>?
  • CallableStatement: 支持存儲過程的調用

PreparedStatementCallableStatement都是繼承Statement,比Statement要強大
補充鏈接:
PreparedStatement的使用
CallableStatement的使用(待補充)

5. 執行SQL語句

//執行查詢語句,會返回有個結果集ResultSet
ResultSet rs = stmt.executeQuery("select * from student");

6. 使用ResultSet獲取資料庫數據

//遍歷結果集, 每次調用next方法時會使結集的游標後移,最初游標位於第一行之前
//Student累是我們寫的一個bean類,就是把資料庫中的每一條數據當作為一個對象,每一列都當作為Student類的屬性
while (rs.next()){ 
    //第迴圈一次封裝一條記錄
    Student student = new Student();
    student.setNum(rs.getInt("num"));
    student.setName(rs.getString("name"));
    //獲取其它欄位rs.getXxx("列名") Xxx表示相應的數據類型
    //或者也可以re.getXxx(int columnNum) 參數為第幾列
    //如果不知道列的具體類型,也可以使用rs.getObject
}

oracle與java的類型對應

oracle java
varchar/varchar(2) String
int int
number double
date date

7. 關閉

依次關閉ResultSet Statement Connection

補充

  • 一般將連接方法和關閉方法封裝為靜態方法調用,連接方法和關閉方法封裝在JdbcUtil工具類中
  • 開啟資料庫鏈接的三個參數一般我們不會更改,所以我們直接寫死在資源文件裡面
    1. 設置編碼UTF-8,使用中文字元就會自動轉為Unicode
    2. ResourceBundle文件一般要在src同目錄,否則會出現java.lang.NoClassDefFoundError異常,代碼如下

      jdbc.url = jdbc:oracle:thin:@localhost:1521:ORCL
      jdbc.driver = oracle.jdbc.driver.OracleDriver
      jdbc.username = stars
      jdbc.password = stars

      ResourceBundle bundle = ResourceBundle.getBundle("資源文件名");
      String s = bundle.getString("keyName");//getString("username")..
      }
  • 寫一個Dao類,其中有update,save,delete,find等方法,從而實現對資料庫的增刪改查

JdbcUtil工具類:

package homework;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

/**
 * @author StarsOne
 * @date Create in  2019/4/24 0024 22:18
 * @description
 */
class JdbcUtil {
    private static final String DRIVER = getValue("jdbc.driver");
    private static final String URL = getValue("jdbc.url");
    private static final String USERNAME = getValue("jdbc.username");
    private static final String PASSWORD = getValue("jdbc.password");

    static{
        try {
            //註冊資料庫驅動程式
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            System.err.println("註冊資料庫驅動程式失敗。" + e.getMessage());
        }
    }

    /**
     * 獲取資料庫連接
     * @return 一個Connection
     */
    public static Connection getConnection() {
        try {
            Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            return  conn;
        } catch (SQLException e) {
            System.err.println("a獲得數據連接失敗。" + e.getMessage());
        }
        return null;
    }


    /**
     * 關閉
     * @param conn
     * @param stmt
     * @param rs
     */
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            //關閉資料庫的資源的順序最好與使用的順序相反
            if(rs != null){
                rs.close();
            }
            if(stmt != null){
                stmt.close();
            }
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 讀取屬性文件中的信息
     *
     * @param key
     * @return
     */
    private static String getValue(String key) {
        // 資源包綁定
        ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
        return bundle.getString(key);
    }


    public static void main(String[] args) {
        System.out.println(getValue("jdbc.driver"));
        System.out.println(getConnection());
    }
}

StudentDao.java

我的代碼還沒有補全,使用的Statement語句

package homework;

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * @author StarsOne
 * @date Create in  2019/4/24 0024 22:24
 * @description
 */
class StudentDao {


    /**
     * 添加一個
     * @param student
     */
    public void save(Student student) {
        String name = student.getName();
        int num = student.getNum();
        Connection connection = null;
        Statement statement = null;
        try {
            connection = JdbcUtil.getConnection();

            statement = connection.createStatement();

            //拼接SQL語句,把數據插入到資料庫中
            statement.execute("insert into STUDENT value(" + num + "," + name + ") ");
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement, null);
        }
    }

    public void update(Student student) {

    }

    /**
     * 刪除指定編號的學生
     * @param num
     */
    public void delete(Integer num) {

        Connection connection = null;
        Statement statement = null;
        try {
            connection = JdbcUtil.getConnection();

            statement = connection.createStatement();

            //拼接SQL語句,把數據插入到資料庫中
            boolean flag = statement.execute("delete from  STUDENT where num = " + num);
            if (flag) {
                System.out.println("刪除成功!");
            } else {
                System.out.println("刪除失敗!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement, null);
        }
    }
    /**
     * 主鍵查詢
     * @param number
     */
    public void findByPK(Integer number) {

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet=null;
        try {
            connection = JdbcUtil.getConnection();

            statement = connection.createStatement();

            //查詢query,返回一個數據集
             resultSet = statement.executeQuery("select * from STUDENT where num =" + number);
            while (resultSet.next()) {
                int num = resultSet.getInt("num");
                String name = resultSet.getString("name");
                String sex = resultSet.getString("sex");
                int age = resultSet.getInt("age");
                Date birthdate = resultSet.getDate("birthdate");
                double grade = resultSet.getDouble("grade");
                //新建一個對象
                new Student(num, age, grade, name, sex, birthdate);

            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement, resultSet);
        }
    }

    /**
     * 查詢全部
     * @return
     */
    public List<Student> findAll() {
        List<Student> list = new ArrayList<>();
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet=null;
        try {
            connection = JdbcUtil.getConnection();

            statement = connection.createStatement();

            //查詢query,返回一個數據集
            resultSet = statement.executeQuery("select * from STUDENT" );
            while (resultSet.next()) {
                int num = resultSet.getInt("num");
                String name = resultSet.getString("name");
                String sex = resultSet.getString("sex");
                int age = resultSet.getInt("age");
                Date birthdate = resultSet.getDate("birthdate");
                double grade = resultSet.getDouble("grade");
                //新建一個對象
                list.add(new Student(num, age, grade, name, sex, birthdate));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(connection, statement, resultSet);
        }
        return list;
    }

}

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

-Advertisement-
Play Games
更多相關文章
  • 45款星光和光暈PS筆刷(45 Lens Flare & Stars Photoshop)是一套應用於Photoshop的星光和光暈PS筆刷,包含45款不同效果的筆畫樣式,應用的時候,如果需要,還可以疊加,從而生成成百上千的不同視覺效果的圖片,作為裝飾元素應用在數位處理上非常棒! 您如果需要這樣的一 ...
  • win7防火牆例外設置方法 控制面板(右上角選擇查看方式為大圖標) 防火牆 高級設置 高級設置 出站規則 最右邊 新建規則“新建出站規則嚮導”,在嚮導的第一步,選擇要創建的防火牆規則類型,選擇第二個“埠”。 win7防火牆添加埠方法 Win7的防火牆做了比較大升級 設置已經分為入站和出站。下麵以 ...
  • 一、 先搞清楚自己電腦的類型: A MBR傳統bios+單硬碟 B MBR傳統bios+雙硬碟(SSD固態硬碟+機械硬碟) C UEFI新式bios+單硬碟 D UEFI新式bios+雙硬碟(SSD固態硬碟+機械硬碟) E 以上任意一種情況+電腦有特殊獨立顯卡(這種情況一般不考慮,只有少數電腦會遇到 ...
  • 1、問題:There is no valid Xilinx installation that this Update can be applied to. 解決方法一:下載的是更新包,如果設備沒有預裝vivado的情況下就會出現這種問題;可以下載完整版本(Full Product Installa ...
  • 1.刪除資料庫中的自建用戶;2.在sql中"安全性","登錄名",新建個登錄名,名稱是用戶名,採用sql身份驗證,去掉密碼策略, 選擇頁下選擇“用戶映射”,選擇資料庫;3.打開資料庫,選擇“安全性”,在新建的用戶上,“屬性”,“常規”,資料庫角色成員選擇db_owner. ...
  • [toc] 什麼是字元集(character set) 字元的二進位編碼方式 二進位編碼到一套字元的映射 二進位 編碼 字元 校對規則(collation) 在字元集內用於比較字元的一套規則 ASCII碼 1個位元組由8個二進位位組成 1個位元組可表示256種不同的狀態(256個不同符號) ASCII碼 ...
  • ### 數據源之json``` val jsonPath = "" spark.read.json(jsonPath) //方式一 spark.read.format("json").load(jsonPath) //方式二```### 數據源之parquet``` val parqPath = "... ...
  • SQL Server安裝後,根據對應的業務場景,資料庫實例的部分選項需要調整,例如實例的最大記憶體、tempdb 文件的增長量、Job執行記錄數等等,但這一步經常被大家忽略掉。 其實很多選項初始化都可以通過腳本實現,一件執行。下麵是一些常見選項初始的例子,僅供大家參考。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...