先介紹一些基本的SQL語法:
建立一個名為 demo 的資料庫:
CREATE DATABASE demo;
使用 demo 資料庫:
USE demo;
建立名為 book 的資料表:
CREATE TABLE book (
bookId INT PRIMARY KEY, //bookId 為主鍵
bookName VARCHAR(20), //書名
publisher VARCHAR(20), // 出版社
price INT // 價格
);
加入一筆資料到 book:
INSERT INTO book VALUES (1, 'J2EE 開發手冊', '雞豐', 500);
譬如最後的結果如下:
接下來可以撰寫一張 JSP 去讀取資料庫的內容,因為這邊只是單純的介紹如何讀取資料庫
所以直接將程式撰寫在 JSP 頁面裡,也缺乏模組化或透過 hibernate 來簡化
但最基本的連接資料庫即如下:
首先必須要有 JDBC 的驅動程式
將 JDBC 的 jar 置放在該 web application 的 /WEB-INF/lib 下
之後在 撰寫幾行固定的程式
Class.forName("com.mysql.jdbc.Driver") ; //載入驅動程式
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","XXX");
//透過 DriverManager 取得 Connection
//getConnection() 的參數就是設定了 url、使用者名稱、和密碼
//jdbc:mysql://localhost:3306/demo
//其中localhost 主機名稱 3306 連接埠 demo 資料庫名稱
// root 是 user XXX 是密碼
接下來要執行 SQL 語句來讀取資料庫,必須先取得 Statemant 物件,如下:
Statement stmt = conn.createStatement(); //用 Connection 物件呼叫 createStatement()
最後再透過 Statement 的 executeQuery() 方法,來執行查詢語句
ResultSet rst = stmt.executeQuery("SELECT * FROM book;");
呼叫後回傳的 ResultSet 物件,即為查詢後的結果
之後在用 next() 方法取得下一筆資料
while(rst.next())
{
//透過 ResultSet 物件的 getString() 和 getInt() 取得相對應的欄位值
out.println("<tr>");
out.println("<td>" + rst.getInt("bookId")+ "</td>");
out.println("<td>" + rst.getString("bookName")+ "</td>");
out.println("<td>" + rst.getString("publisher")+ "</td>");
out.println("<td>" + rst.getInt("price")+ "</td>");
out.println("</tr>");
}
因為這邊在設定 MySQL 的時候 還沒換成 UTF-8 的編碼
加上在 DriverManager.getConnection() 的時候
沒有告知要用何種編碼,譬如:
jdbc:mysql://localhost:3306/demo?user=root&password=XXX&useUnicode=true&characterEncoding=UTF8
&為 '&' 的替代字元
如果沒有進行以上的動作,則從 JSP 讀出來的中文字可能會變成亂碼
但可透過以下的方法調校:
String bookName = new String(rst.getString("bookName").getBytes("ISO-8859-1"), "BIG5");
new String() 建構子有很多覆載的形式,可以去 API 上看看。
沒有留言:
張貼留言