MySql與oracle的JDBC測試程式

來源:互聯網
上載者:User
文章目錄
  • 2.1串連MySql資料庫執行個體
  • 2.2MySqlJDBC執行個體解析(ps:2011-11-17補充)
  • 3.1串連oralce資料庫執行個體
  • 3.2MyOracleJDBC執行個體解析
0.參考文獻

參考1:http://dustin.iteye.com/blog/44291

1.前言

測試資料庫是否正確串連時j2ee開發首先要做的事情,因為如果資料庫連接不正確,後期的錯誤就無法正確判定。所有得先排除資料庫連接錯誤。下面將詳細介紹一下mysql與oracle資料庫連接的測試程式

2.mysql資料庫連接執行個體

首先我們給出mysql資料庫連接的代碼執行個體,然後再通過這個代碼進行詳細解析,代碼執行個體如下:

2.1串連MySql資料庫執行個體View Code

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class MySqlJDBC {    public static void main(String args[]) {        try {            /*             * 方法一: 載入MYSQL JDBC驅動程式             */            // Class.forName("org.gjt.mm.mysql.Driver");            /*             * 方法二: 載入MYSQL JDBC驅動程式             */             Class.forName("com.mysql.jdbc.Driver");            /*             * 方法三:建立com.mysql.jdbc.Driver執行個體             */            // com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();            /*             * 方法四:建立com.mysql.jdbc.Driver執行個體             */            // new com.mysql.jdbc.Driver();            System.out.println("Success loading Mysql Driver!");        } catch (Exception e) {            System.out.print("Error loading Mysql Driver!");            e.printStackTrace();        }        try {            Connection connect = DriverManager.getConnection(                    "jdbc:mysql://localhost:3306/test", "root", "123456");            // 串連URL為 jdbc:mysql//伺服器位址/資料庫名 // 後面的2個參數分別是登陸使用者名稱和密碼            System.out.println("Success connect Mysql server!");            Statement stmt = connect.createStatement();            ResultSet rs = stmt.executeQuery("select * from userinfo");            while (rs.next()) {                System.out.println(rs.getString("username"));            }        } catch (Exception e) {            System.out.print("get data error!");            e.printStackTrace();        }    }}

運行結果如下所示:

Success loading Mysql Driver!Success connect Mysql server!zhangsanlisi
2.2MySqlJDBC執行個體解析(ps:2011-11-17補充)

大家可能都看出個大概來了,我們只需要在調用DriverManager的getConnection方法之前,保證相應的Driver類已經被載入到 jvm中,並且完成了類的初始化工作就行了,而具體是怎樣實現這個功能卻是沒有講究的。上面四種方法都可以實現這個功能,因此程式可以正常運行。我們通常看到的都是使用方法二來載入Driver類到JVM中。這也是大多數教材中所採用的方法

但是經過我的測試,即使沒有將com.mysql.jdbc.Driver載入到JVM中,程式也能夠正常運行,程式如下所示:View Code

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class MySqlJDBC {    public static void main(String args[]) {        try {            Connection connect = DriverManager.getConnection(                    "jdbc:mysql://localhost:3306/test", "root", "123456");            // 串連URL為 jdbc:mysql//伺服器位址/資料庫名 // 後面的2個參數分別是登陸使用者名稱和密碼            System.out.println("Success connect Mysql server!");            Statement stmt = connect.createStatement();            ResultSet rs = stmt.executeQuery("select * from userinfo");            while (rs.next()) {                System.out.println(rs.getString("username"));            }        } catch (Exception e) {            System.out.print("get data error!");            e.printStackTrace();        }    }}

運行結果為:

Success connect Mysql server!zhangsanlisi

如果將程式中載入的mysql-connector-java-5.1.18-bin.jar去掉,再次運行程式報錯,錯誤如下所示:

get data error!java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test

報錯是正常的,後面oracle也會包類似的錯誤,這裡先列出來以便後面進行比較。

3.串連oracle資料庫執行個體

同樣,我們首先給出oracle資料庫連接的代碼執行個體

3.1串連oralce資料庫執行個體View Code

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import oracle.jdbc.driver.OracleDriver;public class MyOracleJDBC {    public static void main(String args[]) {        try {            /*             * 方法一: 載入Oracle JDBC驅動程式             */             Class.forName("oracle.jdbc.driver.OracleDriver");            /*             * 方法二:建立oracle.jdbc.driver.OracleDriver執行個體             */            //oracle.jdbc.driver.OracleDriver driver = new oracle.jdbc.driver.OracleDriver();                        /*             * 方法三:建立oracle.jdbc.driver.OracleDriver執行個體             */            //new oracle.jdbc.driver.OracleDriver();            System.out.println("Success loading Oracle Driver!");        } catch (Exception e) {            System.out.print("Error loading Oracle Driver!");            e.printStackTrace();        }        try {            Connection connect = DriverManager.getConnection(                    "jdbc:oracle:thin:@localhost:1521:ORCL", "test", "test");            System.out.println("Success connect Oracle server!");            Statement stmt = connect.createStatement();            ResultSet rs = stmt.executeQuery("select * from userinfo");            while (rs.next()) {                System.out.println(rs.getString("username"));            }        } catch (Exception e) {            System.out.print("get data error!");            e.printStackTrace();        }    }}

通過上述代碼我們發現和串連mysql資料庫的代碼執行個體相差不多。不同之處基本有連點,分別是:

  1. 載入的Driver名稱不同,oracle載入的Driver是oracle.jdbc.driver.OracleDriver,mysql載入的Driver是com.mysql.jdbc.Driver
  2. 串連資料的url不同,oracle串連資料庫url是jdbc:oracle:thin:@localhost:1521:ORCL,mysql串連資料庫url是jdbc:mysql://localhost:3306/test
注意點:在mysql資料庫下建立資料名叫做test,裡面建立了一張表叫做userinfo。而在oracle中則是在預設資料庫orcl中建立使用者test,在test使用者下建立表userinfo。
3.2MyOracleJDBC執行個體解析上述的三種方法同樣都能夠載入Driver。如果我們也像前面MySqlJDBC執行個體那樣不載入Driver會出現什麼情況呢。假設我們注釋掉所有載入Driver的語句,代碼如下所示:View Code

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import oracle.jdbc.driver.OracleDriver;public class MyOracleJDBC {    public static void main(String args[]) {        try {            Connection connect = DriverManager.getConnection(                    "jdbc:oracle:thin:@localhost:1521:ORCL", "test", "test");            System.out.println("Success connect Oracle server!");            Statement stmt = connect.createStatement();            ResultSet rs = stmt.executeQuery("select * from userinfo");            while (rs.next()) {                System.out.println(rs.getString("username"));            }        } catch (Exception e) {            System.out.print("get data error!");            e.printStackTrace();        }    }}

再次執行此程式,會出錯,提示錯誤如下:

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:ORCL    at java.sql.DriverManager.getConnection(DriverManager.java:602)    at java.sql.DriverManager.getConnection(DriverManager.java:185)    at edu.sjtu.erplab.jdbc.MyOracleJDBC.main(MyOracleJDBC.java:33)get data error!

這表示必須得先將oracle.jdbc.driver.OracleDriver載入到JVM中以後才能建立資料庫連接。

疑問:至今不明白為什麼mysql資料庫連接可以不需要 Class.forName("com.mysql.jdbc.Driver");4.上述測試案例中demo資料庫的user表
CREATE TABLE `userinfo` (  `userid` int(10) NOT NULL AUTO_INCREMENT,  `username` varchar(20) DEFAULT NULL,  PRIMARY KEY (`userid`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;-- ------------------------------ Records of userinfo-- ----------------------------INSERT INTO userinfo VALUES ('1', 'zhangsan');INSERT INTO userinfo VALUES ('2', 'lisi');
5.org.gjt.mm.mysql.Driver 和com.mysql.jdbc.Driver的區別

從MysqlJdbc.java中我們看到有兩種方式載入MySql JDBC驅動程式,分別是

Class.forName("org.gjt.mm.mysql.Driver"); //方法一: 載入MYSQL JDBC驅動程式Class.forName("com.mysql.jdbc.Driver");//方法二: 載入MYSQL JDBC驅動程式

這兩種方法都能夠載入MYSQL JDBC驅動程式,那麼到底有何區別呢?其實org.gjt.mm.mysql.Driver是早期的MySQL JDBC驅動程式,但它不是MySQL公司的,後來MySQL將MM的JDBC驅動收為官方的JDBC驅動,並將其改名為com.mysql.jdbc.Driver,在最新版本的mysql jdbc驅動中,為了保持對老版本的相容,仍然保留了org.gjt.mm.mysql.Driver這個路徑的引用,但是實際上org.gjt.mm.mysql.Driver中調用了com.mysql.jdbc.Driver,因此現在這兩個驅動沒有什麼區別。

View Code

//org.gjt.mm.mysql.Driver的原始碼import java.sql.SQLException;/*** Here for backwards compatibility with MM.MySQL** @author Mark Matthews*/public class Driver extends com.mysql.jdbc.Driver {//~ Constructors//-----------------------------------------------------------/*** Creates a new instance of Driver** @throws SQLException*             if a database error occurs.*/  public Driver() throws SQLException  {      super();  }}

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.