[JSP] JSP連接MySQL初探

這篇算是因為網友詢問,才會有的一篇文章吧

 

最近也在看JSP的一些寫法

因為還沒有看很懂,所以這一篇一直都沒有寫

用Java跑網頁有二種型態

  • Servlet
  • JSP

Servlet可以算是JSP的前身,可以處理比較複雜的事情
JSP的寫法比較像PHP,那我們就從這裡開始吧

範例不難,但環境設定上頗麻煩的

——————————————————–

環境設定

再開始之前,先講一下環境設定

標題是連MySQL資料庫嘛,所以要有MySQL取得方式我就不細講了

有在寫PHP+MySQL的話,目前在使用的MySQL就大方的借過來用吧

 

 

若是使用整合環境(如appserv、wamp、xampp…等等)

就只需要補上JDK、Tomcat、MySQL Connecter,官方下載在這裡:

JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Tomcat

http://tomcat.apache.org/download-70.cgi

MySQL Connecter for Java

http://www.mysql.com/downloads/connector/j/

選擇你的作業系統看是x86還是x64,選擇對應的檔案安裝

然後用Next大法(一直Next),一路給他裝完

 

如果,你像我一樣覺得這樣裝很凌亂,或是說是新建環境,甚麼都沒有的話

可以採用新版的XAMPP 1.81

http://www.apachefriends.org/zh_tw/xampp.html

這個版本裡面就有附tomcat摟

少一個要補檔的對象

接下來只要下載JDK + MySQL Connecter就行摟!

 

 

個人是建議用JDK+XAMPP的配置,或是整合環境+JDK+官方tomcat

(對了,新版含tomcat的XAMPP不能跟tomcat混裝,路徑會錯亂…)

XAMPP他主要功能有包入Apache HTTP Server、MySQL Server、FileZilla FTP Server、Mail Server、Tomcat Server

細項有php、pear、perl、cgi、phpmyadmin、mbstring、gd….等等(糟糕離題了…)

 

反正,整合環境有他的好處,除了設定檔要自己設定之外

其他大多都設定好了

 

 

MySQL Connector的地方先說明一下

只要下載完畢,解壓縮

取出mysql-connector-java-5.1.22-bin.jar這個檔案就好,壓縮檔裡的其他資料可以不用

(筆者抓到的是Connector/J 5.1.22版本,所以檔案叫做mysql-connector-java-5.1.22-bin.jar

請依照你下載的版本做變化)

然後將它放到tomcat的目錄的lib裡,所以變成

官方Tomcat路徑:

C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\mysql-connector-java-5.1.22-bin.jar

XAMPP包含tomcat路徑:

C:\xampp\tomcat\lib\mysql-connector-java-5.1.22-bin.jar

 

環境變數

主要有點麻煩的是Java的環境設定

Windows環境變數的方法在這裡:

WinXP在我的電腦按滑鼠右鍵 -> 內容 -> (上方頁籤)進階 -> 環境變數

Win7是在開始 -> 我的電腦按右鍵 -> 內容 -> (在左側欄)進階系統設定 -> (上方頁籤)進階 -> 環境變數

 

要添加這些環境變數

純JAVA環境
———————
JAVA_HOME
C:\Program Files\Java\jdk1.6.0_35
CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre;%JAVA_HOME%\src
Path
.;%JAVA_HOME%\bin

JAVA環境+Tomcat網頁伺服器環境
———————
JAVA_HOME
C:\Program Files\Java\jdk1.6.0_35
CATALINA_HOME
(官方Tomcat路徑)
C:\Program Files\Apache Software Foundation\Tomcat 7.0
 
(XAMPP包含tomcat路徑)
C:\xampp\tomcat
(二者依環境,擇其一使用) 

CLASSPATH
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre;%JAVA_HOME%\src;%CATALINA_HOME%\lib\servlet-api.jar;%CATALINA_HOME%\lib\mysql-connector-java-5.1.22-bin.jar
Path
.;%JAVA_HOME%\bin

有些地方要注意

如果裡面有值的話(像是Path),打個分號 ; 再連接上去

藍字的地方是他的版本號,要依照你的版本做變化(查看一下該路徑是否有東西)

設定完畢要重新開機(使用者登出再登入)才會生效

這樣就設定完成了

 

弄到這裡可以先測試一下

phpmyadmin是否能正常連線MySQL?(代表php+MySQL正常)

tomcat是否正常啟動? http://localhost:8080/ 有沒有東西?

 

—————————————————————————-

建立範例DB

終於回到程式面了,可以開個資料庫名字叫test_jspdb

執行以下SQL;

CREATE TABLE IF NOT EXISTS `employee` 
`emp_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emp_name` varchar(100) NOT NULL,
`emp_age` int(11) NOT NULL,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;

INSERT INTO `employee` (`emp_id`, `emp_name`, `emp_age`) VALUES
(1, ‘mary’, 20)
(2, ‘amy’, 22);

 

資料表內容很簡單,就只有員工姓名,員工年齡而已

—————————————————————-

 

JSP範例

這時候可以建立一個連線的範例來做了

網站的根目錄在:

C:\xampp\tomcat\webapps\ROOT

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT

在那裡建立一個空檔案db_test.jsp然後貼上以下程式碼。

然後瀏覽 http://localhost:8080/db_test.jsp 看看能不能使用

如果出現can’t load mysql driver代表說MySQL Connector的設定有問題

查看檔案位置是否正確及環境變數設定是否有更新

 

 

 

<%@ page contentType=”text/html;charset=utf-8″%>

<%@ page import=”java.sql.*”%>
<%
try
{
//讀取mysqlDriver驅動程式
Class.forName(“org.gjt.mm.mysql.Driver”).newInstance();

try
{
//連接mysql資料庫

// 資料庫名稱”zend_test”,帳號”root”,密碼”123456″,
// 使用Unicode編碼”true”,字元集”UTF-8″
String db_user=”root”;
String db_pwd=”12345″;
String db_database=”test_jspdb”;
Connection conn= DriverManager.getConnection(“jdbc:mysql://localhost:3306/”+db_database+”?user=”+db_user+”&password=”+db_pwd+”&useUnicode=true&characterEncoding=UTF-8″);

try
{
//建立statement
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
try
{
//建立SQL查詢
String sql=”select * from album”;
ResultSet rs = stmt.executeQuery(sql);

%>

<h2>Employee</h2>
<table border=1>
<tr><th>id</th><th>artist</th><th>title</th></tr>
<%
//顯示資料

while(rs.next())
{
%>
<tr>
<td><%=rs.getString(“id”)%></td><td><%=rs.getString(“artist”)%></td><td><%=rs.getString(“title”)%></td>
</tr>
<%
}
%>
</table>
<%

// 關閉連線
rs.close();
rs = null;
stmt.close();
stmt = null;
conn.close();

}
catch (Exception ex)
{
out.println(“can’t read data”);
out.println(ex.toString());
}
}
catch (Exception e)
{
out.println(“can’t create statement”);
out.println(e.toString());
}
}
catch(Exception e)
{
out.println(“can’t content mysql database”);
out.println(e.toString());
}

}
catch(Exception e)
{
out.println(“can’t load mysql driver”);
out.println(e.toString());
}

%>

 

 寫法跟PHP差不多吧!有個重點要提一下

 

其餘的update insert delete指令可以這樣寫)

String sql = “INSERT INTO `employee` (`emp_name`, `emp_age`) VALUES
(‘mary’, 20),”;

// 執行SQL語法
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);

 

你可能會疑惑createStatement這個方法

ResultSet.TYPE_FORWARD_ONLY (預設值)

就只能使用next()方法取得下一筆(指標順序定位)

 

ResultSet.TYPE_SCROLL_INSENSITIVE與 ResultSet.TYPE_SCROLL_SENSITIVE

能使用afterLast()、previous()、absolute()、relative()其他方法

有 ResultSet.CONCUR_READ_ONLY與ResultSet.CONCUR_UPDATABLE兩個參數可以設定,前者表示只能讀取 ResultSet的資料,後者表示可以直接使用ResultSet來操作資料庫

(這個部份還沒有驗證,我想應該跟update insert delete指令無關)

 

如果有誤煩請指正

 

參考資料

http://caterpillar.onlyfun.net/Gossip/JavaGossip-V2/ResultSetCursor.htm

http://jjnnykimo.pixnet.net/blog/post/21585335-jsp%E9%80%A3%E7%B5%90mysql%E8%B3%87%E6%96%99%E5%BA%AB%E7%AF%84%E4%BE%8B

http://blog.yam.com/carl44/article/14825336

http://blog.alumni.nctu.edu.tw/plate/web/papermsg.jsp?UI=markcool&PI=96