Jsp與Mysql連接探究查錯
一、前言
在閱讀本文檔之前,你的Win2000下應該已經安裝好了Apache、JDK、Tomcat、PHP、
MySQL.如果你還沒有成功地安裝好這些軟件,你可以參閱Apache1.3.20在Windows下的使用、Windows下JDK1.3.1的安裝、Tomcat在Win2000下的安裝、PHP在Win2000下的安裝、MySQL在Win2000下的安裝進行安裝.
在本文檔中,我們并不準備對PHP、MySQL、JSP作過多的解釋,我們將假定你已經大致掌握了PHP、MySQL、JSP.我們僅僅是探討在Win2000下,使用PHP和JSP連接MySQL的方法.
二、MySQL的前期準備
在我們之前安裝的MySQL中,我們僅僅是使用了系統初始的root用戶.在本文中,我們不準備繼續使用root用戶,雖然我們是在一個試驗環境下工作,但是養成一個良好的習慣是至關重要的,因為我們將來面對的將可能是一個完全開放的Internet.和在絕大多數情況下一樣,MySQL中對root用戶的濫用也有可能導致MySQL的崩潰.
MySQL安裝后的初始情況有點怪怪的,要正確地增加用戶并設置用戶權限,我們有必要對mysql庫中的表User及DB進行清理.
首先,在命令行方式下進入c:/mysql/bin目錄,直接輸入mysql,你會進入MySQL的客戶端程序MYSQL(在下面,我們用MYSQL特指MySQL的客戶端程序,而在其他場合,我們將會使用MySQL).在“mysql>”提示符后輸入:
show
databases;
你會看到初始狀態下,MySQL下有兩個數據庫:mysql和test,test庫反正對我們也沒什么用,留著反而會混淆視聽,所以我們不妨將其刪除:
drop
database test;
有關用戶及其權限保存在mysql數據庫中,其中關鍵是db表和user表,現在,我們可以先將db表清空:
use
mysql;
delete from db;
然后我們對user庫進行清理,并進行刷新:
delete from user where
user='' or host='localhost';
flush
privileges;
現在,用quit退出MYSQL.
現在,你將不能直接輸入mysql進入MYSQL了(那種情況實際上是不需要用戶認證進入了MYSQL).你只能輸入mysql
-u root
-p.
如果之前你為root用戶設置了密碼,這時會提示你輸入密碼,如果你還沒有設置,直接按回車鍵就可以進入MYSQL了.
沒有口令的root用戶的存在是一個很恐怖的情況,你最好先退出客戶端程序用我們在MySQL在Win2000下的安裝中講述的方法為root設置一個口令后再進入MYSQL.
我們建立一個用于使用的新的數據庫:
create
database my_test;
在這個庫中建立一個數據表:
use my_test;
create table
my_test_table (test_column char(20) not null);
在這個表中增加一行:
insert
my_test_table values ('Hello,I'm
MySQL!');
現在我們用grant命令建立一個新的用戶yzysy,該用戶只對my_test這個庫有SELECT、UPDATE、INSERT以及DELETE的權限.該用戶的密碼也是yzysy:
grant
SELECT,UPDATE,INSERT,DELETE on my_test.* to yzysy identified by
'yzysy';
有關grant命令的詳細說明請參看MySQL用戶手冊.
第三用PHP連接MYsql省略
四、JSP連接MySQL
JSP連接MySQL要稍微復雜一點.
首先你必須從http://www.mysql.com/Downloads/Contrib/mm.mysql.jdbc-1.2c.tar.gz下載mm.mysql.jdbc-1.2c.tar.gz,然后將其解壓到本地硬盤的一個目錄下(我們使用的是c:/mm.mysql.jdbc-1.2c.
然后在CLASSPATH系統變量的最后添加c:/mm.mysql.jdbc-1.2c;(此處/應該是反斜杠)
創建一個JavaBean,名為DBconn.java,在Tomcat的/webapps/examples/WEB-INF/classes下建立一個mysqltest目錄,將該文件保存在這個目錄中,DBconn.java用來封裝與數據庫鏈接的操作.DBconn.java的內容如下:
package
Mysqltest;
import java.sql.*;
public class DBconn
{String
DBDriver="org.gjt.mm.mysql.Driver";
String
ConnStr="jdbc:mysql://localhost/my_test";
String MyUser="yzysy";
String
MyPassword="yzysy";
Connection conn = null;
ResultSet rs = null;
public
DBconn()
{try
{Class.forName(DBDriver);
}
catch(java.lang.ClassNotFoundException e)
{System.err.println("DBconn (): " + e.getMessage());
}
}
public
ResultSet executeQuery(String sql)
{rs = null;
try
{conn =
DriverManager.getConnection(ConnStr,MyUser,MyPassword);
Statement stmt =
conn.createStatement();
rs =
stmt.executeQuery(sql);
}
catch(SQLException ex)
{System.err.println("aq.executeQuery:"+ex.getMessage());
}
return
rs;
}
}
我們注意到在這段程序是只有
String
DBDriver="org.gjt.mm.mysql.Driver";
String
ConnStr="jdbc:mysql://localhost/my_test";
帶有MySQL的特色,其余的程序與其他JDBC應用并沒有什么不同.
利用JDK的Javac命令編譯DBconn.java形成相應的class文件.
在Tomcat的/webapps/examples/jsp目錄下建立Mysqltest.jsp文件.其內容如下:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page language="java" import="java.sql.*" %>
<%
ResultSet RS = DBconn1.executeQuery
("SELECT * FROM my_test_table");
while (RS.next()) {
out.print("" + RS.getString("test_column")
+"
");
}
RS.close();
%>
在這兒,你已經看不到任何MySQL的痕跡了.
現在在瀏覽器的地址欄中輸入http://localhost/examples/jsp/Mysqltest.jsp,你應該可以看到黑體的“Hello,I'm
MySQL!”.
五、結語
現在,你的Win2000下已經成功地搭建了一個零成本的Web
服務器.不過,我個人以為,在Win2000下只能作為一個開發環境,真正要投入使用,還有使用linux能得到更多的性能和安全上的保證.(End)
************************************************************
其實就錯了那一點,Mysql驅動程序的指向,我按其說的那樣做,結果Tomcat總是報沒有合適的驅動,
我為了驗證指向目標的目錄正確性,把《超級馬力兄弟》游戲放到這個目錄里,在DOS窗口輸入《超級馬力兄弟》游戲名,游戲可以找到,說明CLASSPATH設置正確,那就是說,JSP服務器沒有來這找,無論我怎么試都無濟于事,從此惡夢成了我的好朋友......
在我重新安裝好XPServer后我把mm.mysql.jdbc-1.2c目錄下的ORG目錄全部拷貝到Tomcat40CLASSES下,不承想竟然成功了:
所有由新奇世界 iNENS
提供http://vip.6to23.com/wocienyoung
因為驅動程序是String
DBDriver="org.gjt.mm.mysql.Driver"所以要把ORG整個目錄全考過來,至此整個連接調試完成,JSP真正是一次編寫處處使用,(順便說一句,我在Linux下用的是Resin,在Profile里面直接Export
Classprth就找到Mysql的驅動了)看來環境不同,什么就有可能不同,在此寫出來希望對那些增在尋求辦法的有所幫助.
[@more@]