javaweb JDBC連接Mysql與Oracle的比較及啓示總結

今天從早晨開始打算做一個javaweb連接mysql的小項目,因爲此前學過Oracle,也瞭解到這兩個數據庫JDBC的方式大同小異,因此覺得沒什麼難度,卻沒想到遇到了很多問題,花費了數小時的時間才解決這些問題,下面簡單做一個總結,避免以後再遇到同樣的問題,也希望同學們以後不要跟我一樣碰到這些古怪的問題。。奮鬥

注:本文適合有javaweb基礎和Oracle基礎的童鞋參考,因爲只列出了比較,省略的大部分過程。

1、安裝MySql和SQLyog,SQLyog是MySql的一個不錯的可視化工具,使得MySql操作起來比Oracle更方便,這裏沒什麼問題,不多說。

2、導jar包,包名:mysql-connector-java-5.0.3-bin.jar,自己下載,沒有問題。

3、配置環境變量,這裏就有點問題了,因爲一開始有人說只用配置一個classpath就好,即剛纔第二步的jar包所放置的位置,我是把jar包隨便放到了一個盤裏,然後把路徑放到了系統變量的classpath裏。後來一查,有人說mysql還需要配path,即mysql安裝目錄裏面的bin文件夾的目錄,我的是:C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin,把這個配到path最後,別忘了加分號,配path是爲了使用命令指示符,在命令指示符裏輸入:mysql -u 用戶名 -p,回車後輸入密碼,就可以在黑框框裏面操作,如果回車後提示錯誤,說明path配錯了。

      經本人親測,貌似這兩個環境變量都可以不配,暫時也不影響javaweb項目操作mysql數據庫,本人才疏學淺,不知道以後會不會有隱患,還希望知道的大神予以指點,謝謝。

4、創建數據庫,使用SQLyog創建數據庫和表特別簡單,就像使用dreamweaver做html一樣,mysql使用的sql語句也和標準差不多,暫時夠用,不過需要注意,我第一次創建表的時候,是這樣寫的:

CREATE TABLE users (
  id int(4) NOT NULL  PRIMARY KEY AUTO_INCREMENT
  lname varchar(10) NOT NULL,
  lpass varchar(10) NOT NULL,
  age int(2) NOT NULL
);
注意:mysql裏沒有varchar2,只有varchar。

這樣寫確實可以創建數據表,不過我插入一條資料

INSERT INTO users(lname,lpass,age) vsalues('張三','123',10);

之後發現問題了:裏面的中文變成了許多問號,顯然是字符集的問題,解決辦法是,在創建表的時候,最後一行,在分號前,寫

ENGINE=InnoDB DEFAULT CHARSET=utf8;
在插入數據,問題解決。

5、bean層不用說,跟數據庫對上就行,dao層需要說一說,因爲需要準備Connection,PreparedStatement和ResultSet,一律導入java.sql.的那個類,儘管mysql也有對應的Connection和PreparedStatement類,不過最後還是要強轉回來,也就是說,沒差別大笑

6、其他幾個層該怎麼寫還是怎麼寫,沒差別,連接mysql的driver是

com.mysql.jdbc.Driver

重點需要說一下連接mysql的url,一開始看別人寫的是

jdbc:mysql://localhost:3306/數據庫名
後來全部寫好之後一測試,發現請求路徑沒問題,卻轉到了空白頁面,當時並不知道哪裏出了問題,就一句一句輸出檢查,發現從數據庫裏取出來的值很古怪,int類型的都是0,String類型的什麼也沒有。。但是由於resultset遊標非空,就一步一步往下走,沒有報錯,這就說明查到數據了,並沒有傳到jsp上,我在這裏停留了很久,最後終於找到了解決辦法:mysql的url應該是

jdbc:mysql://localhost:3306/數據庫名?useUnicode=true&characterEncoding=utf-8
又是字符編碼的問題,不知道是不是因爲數據表定義時,同樣也設置了字符編碼的原因。
至此,已經可以把後臺數據傳到前臺jsp,若本文的內容有錯誤,歡迎留言或聯繫我,謝謝。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章