[實作隨筆]設定JSP 和 ODBC的連結:
新增一個檔名為"db1.accdb"資料庫檔,
並假設檔案放在"d:/database".
Control Panel > System and Security > Administrative Tools -> Data Sources (ODBC)
根據以上順序,開啟OBDC Data Source Administrator視窗,
選擇
System DNS,(千萬別選錯喔).
接著按"Add",
選擇"Microsoft Access Driver (*.mdb,*.accdb)"後按Finish.
Data Source Name填一個名字,後續的資料庫存取都用這個名字.
與此同時,按"Select"選擇你剛剛新增的"db1.accdb"檔.
如前,應該是"d:/database/db1.accdb"
以上動作即完成設定JSP和ODBC的連接工作.
接著用以下的code測試資料庫系統是否能正常運作,
<%@ page contentType="text/html;charset=big5" %>
<%@ page import= "java.sql.*" %>
<html>
<head><title>Ex46</title></head><body>
<p align="center">
<font size="5"><b>Front Page of Ex46</b></font>
</p>
<center>
create new table "db1"
<%
String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String connectDB="jdbc:odbc:db1";
Class.forName(JDriver);
Connection con = DriverManager.getConnection(connectDB);
Statement stmt = con.createStatement();
String query = "create table Content ( "
+ "ID Text(20) PRIMARY KEY,"
+ "BKName Text(20),"
+ "Writer Text(10),"
+ "Price Number"
+ ")";
stmt.executeUpdate(query);
stmt.close();
con.close();
%>
</body>
</html>
如果沒有問題的話,執行以上的code後,應該就能在你的db1內新增一個table.
注意:
在環境建構完畢後,我發生了中文亂碼的問題,
首先我的OS是(英文版)win7+tomcat+(英文版)Ms access 20007,
在寫一個JSP網頁對access資料庫做讀取時,
從資料庫讀出來的繁中字元都變成亂碼,
嘗試了很多方法都無法解決,
於是我換了一個系統,
即用(中文版)XP+tomcat+(中文版)MS access 2007,
結果不必作任何設定,即完成中文資料的正確讀取.
所以在無計可施下,唯有先這樣.
猜想是英文版的Ms access 2007才會發生這種問題.
更新:
關於亂碼的問題終於解決了,參考這一篇:
http://www.javaworld.com.tw/jute/post/view?bid=6&id=274297&tpg=1&ppg=1&sty=0
<%@ page contentType="text/html;charset=big5" %>
<%@ page import= "java.sql.*" %>
<%@ page import= "java.io.*" %>
<html>
<head>
<title>Ex48</title></head><body>
<p align="left">
<font size="5"><b>Show</b></font>
</p>
<%
String JDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String connectDB="jdbc:odbc:BookStore";
StringBuffer sb = new StringBuffer();
Class.forName(JDriver);
Connection con = DriverManager.getConnection(connectDB);
Statement stmt = con.createStatement();
String sql= "select * from Content where myKey < 100";
if (stmt.execute(sql))
{
ResultSet rs = stmt.getResultSet();
ResultSetMetaData md = rs.getMetaData();
int colCount = md.getColumnCount();
sb.append("<TABLE CELLSPACING=10><TR>");
for (int i = 1; i <= colCount; i++)
sb.append("<TH>" + md.getColumnLabel(i));
while (rs.next())
{
sb.append("<TR>");
for (int i = 1; i <= colCount; i++)
{
sb.append("<TD>");
Object obj = rs.getObject(i);
if (obj != null){
sb.append(new String(obj.toString().getBytes(),"big5"));
}
else
sb.append(" ");
}
}
sb.append("</TABLE>\n");
}
else
sb.append("<B>Update Count:</B> " +
stmt.getUpdateCount());
String result= sb.toString();
out.print(result);
stmt.close();
con.close();
%>
</body>
</html>