2013年10月20日 星期日

[Java]連結資料庫查詢表單-使用XAMPP底下的MySQL


下午閒來無事試試看本來拿來寫PHP的XAMPP底下的MySQL來當練習資料庫存取的對象

使用JDBC可能會有ClassNotFoundException跟SQLException

看你要catch還是throws在這邊是選擇thorws的方式

Class.forName表示你要載入的JDBC驅動

在這因為是用MySQL所以是com.mysql.jdbc.Driver

url、user、password這三個字串分別紀錄資料庫路徑還有登入的帳號密碼

其中讓我搞很久的是資料庫路徑的部份

本來我以為是用我在網頁上看到的//localhost/phpmyadmin/路徑

目標是存取student資料庫底下的students資料表

但一直出現資料表不存在

我也疑惑說「奇怪他是在哪裡選擇資料庫名稱的?」

後來才發現原來他的路徑就包含了你要選取的資料表名稱

所以應該是//localhost/student才代表這台本機的MySql底下的student資料庫

try (Connection conn = DriverManager.getConnection(url, user, password))

這段是Java7新增的功能

本來的你資料庫開啟後需要用close()來關閉連線

但在Java7簡化了這個步驟直接寫到try裡面

執行完之後就會自動幫你close

Connection是資料庫連線的代表物件

可以在DriverManager.getConnection物件生成的時候輸入三個建構參數登入MySQL

conn.isClosed()則是用來判斷資料庫的狀態是否關閉

conn.createStatement()回傳一個Statement的物件來讓你可以輸入SQL語法

在此以用SELECT撈出資料我要的資料

stmt.executeQuery()會回傳查詢結果也就是ResultSet物件

ResultSet底下的next()會依序走訪ResultSet物件裡面每一列資料直到回傳false

在此假設我要印出資料庫欄位cID=7的那列資料

所以用if判斷getInt("cID")這欄是否為7

getInt()也可以傳入數字代表第幾欄的資料(注意!是從1開始算起)

也有getString()、getDouble()等方式讀取欄位資料

有興趣的人可以到java.sql.ResultSet這個interface底下查有哪些讀取的方法


import java.sql.*;

public class JDBC {
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/student";
String user = "root";
String password = "1111";

try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.printf("資料庫已%s%n", conn.isClosed() ? "關閉" : "開啟");
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM students");
while (result.next()) {
if (result.getInt("cID") == 7) {
System.out.printf("cID=%d\n", result.getInt(1));
System.out.printf("cName=%s\n", result.getString(2));
System.out.printf("cSex=%s\n", result.getString(3));
System.out.printf("cBirthday=%s\n", result.getString(4));
System.out.printf("cEmail=%s\n", result.getString(5));
System.out.printf("cPhone=%s\n", result.getString(6));
System.out.printf("cAddr=%s\n", result.getString(7));
}
}
}
}
}



最後結果如下

沒有留言:

張貼留言