[ java ] JDBC 連線


Posted by tzutzu858 on 2020-10-10

概述 :

  1. 載入 JDBC driver
  2. DriverManager 註冊
  3. 連線
  4. 建立 Statement 物件,便可以用 Statement.executeQuery() 去下 SQL 語句
  5. next() 讀取

step 0 : 讀取 .properties 文件,連線帳密寫在這裡

通常連線的帳密不會寫在程式碼,在 Java 中,Java 支持 .properties 文件的讀寫,java.util.Properties 類別為我們操作
因此在做電商網站時我把帳密連線寫在 config.properties ,然後記得這個檔案不要 git 管理,可以在 .gitignore 裡面加入

    static Properties info = new Properties();

    static {
        //獲得屬性文件輸入流
        InputStream in = DBhelp.class.getClassLoader().getResourceAsStream("config.properties");

        try {
            //從文件讀取到變數 info
            info.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

step 1 : 載入 JDBC driver

Class.forName(com.mysql.jdbc.Driver);

PrintWriter out=response.getWriter();
        try {   //載入JDBC driver

            Class.forName(com.mysql.jdbc.Driver);
        }
        catch(Exception e){

            out.print("<h1>無法載入驅動程式</h1>");
            return;
        }

Class.forName()

使用 Class 的靜態 forName() 方法實現動態加載類別,就是動態載入 Class。
平常在寫 new 一個 class 時,Aaa aaa = new Aaa(); 一定要有 Aaa 這個 class,但如果是Class.forName("Aaa") 的時候, 就不需要先有 Aaa.class
JDBC 要使用 Class.forName("JDBC Driver") 的主要原因是 DriverManager 需要先註冊 Driver
DriverManager.registerDriver(Driver driver) ;


step 2 : 建立資料連結和 Statement 物件

建立資料連結後,要和資料庫進行互動是使用 JDBC StatementPreparedStatement 讓我們可以傳送 SQL 命令並從資料庫進行接收資料的方法和屬性
這邊蠻像 PHP mysqli() 做的事情。

 try   
        {
            dbCon = DriverManager.getConnection(url,user,password);
            stmt = dbCon.createStatement();
        }
 catch(SQLException e)
        {
            out.println("與資料來源連結錯誤");
            return;
        }

step 3 : 用.executeQuery() 使用 sql 語句,和 next() 讀取

PHP 那邊 query (SQL 語句)後用 fetch_assoc() 讀取資料

rs = stmt.executeQuery("SELECT * FROM users WHERE id=1");
rs.next();
out.print("<div>"+ rs.getString("username") +"</div>");
out.print("成功了");
  • executeQuery 執行 SELECT 語句,用於產生單個結果集(ResultSet)的語句

  • executeUpdate 執行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數據定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。
    如果 SQL 語句中有 ? 占位符,那麽在設置好占位符中的值後,必須使用 executeUpdate() 執行

  • execute 可執行任何SQL語句,但比較麻煩,返回一個 boolean 值

上面內容參考文章 : execute、executeUpdate、executeQuery三者的區別(及返回值)


step 4 : 關掉

stmt.close();
dbCon.close();









Related Posts

Props  觀念與使用

Props 觀念與使用

17. Iterator

17. Iterator

使用 Hugo 建立一個 Blog

使用 Hugo 建立一個 Blog


Comments