2011-09-17 35 views
2

我目前正在學習Java中的一些DataBase技巧,並且我發現了我正在閱讀的這本好書。 在某些時候,ITE鼓勵我去嘗試下面的類手動數據庫連接:HSQL驅動不工作?

import java.sql.DriverManager; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

public class DemoSelect { 

    public static void main (String[] args){ 

     //Connection parameters 
     String usr = "sa"; 
     String pwd = ""; 
     String driver = "org.hsqldb.jdbcDriver"; 
     String url = "jdbc:hsqldb:hsql://localhost/xdb"; 

     Connection con = null; 
     PreparedStatement pstm = null; 
     ResultSet rs = null; 

     try{ 

      //Starting up the driver 
      Class.forName(driver); 

      //Conecting 
      con = DriverManager.getConnection (url,usr,pwd); 

      //Writting a query 
      String sql = "SELECT empno, ename, hiredate, deptno FROM emp"; 

      //Setting up the SQL statement 
      pstm = con.prepareStatement(sql); 

      //Execute the SQL query 
      rs = pstm.executeQuery(); 

      //Iterating the results 
      while (rs.next()){ 

       //Simple method to show the data 
       System.out.print(rs.getInt("empno")+", "); 
       System.out.print(rs.getString("ename")+ ", "); 
       System.out.print(rs.getDate("hiredate")+", "); 
       System.out.println(rs.getInt("deptno")); 

      } 

     }catch (Exception e){ 

      e.printStackTrace(); 
      throw new RuntimeException(e); 

     }finally{ 

      try{ 

       //Closing all the opened resources 
       if (rs!=null) rs.close(); 
       if (pstm!=null) pstm.close(); 
       if (con!=null) con.close(); 

      }catch (Exception e){ 

       e.printStackTrace(); 
       throw new RuntimeException(e); 

      } 

     } 

    } 

} 

但是當我嘗試運行它,它在下面的描述產生一個錯誤:

java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:186) 
    at cap3.jdbc.DemoSelect.main(DemoSelect.java:25) 
Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException:  org.hsqldb.jdbcDriver 
     at cap3.jdbc.DemoSelect.main(DemoSelect.java:53) 
    Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:186) 
    at cap3.jdbc.DemoSelect.main(DemoSelect.java:25) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 0 seconds)` 

我可能會錯過什麼?

我使用的是NetBeans,我下載了HSQL驅動程序。我設法.jar文件導入到庫,我得到了以下錯誤代碼:

java.sql.SQLTransientConnectionException: java.net.ConnectException: Connection refused: connect 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source) 
at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source) 
at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source) 
at java.sql.DriverManager.getConnection(DriverManager.java:579) 
at java.sql.DriverManager.getConnection(DriverManager.java:221) 
at cap3.jdbc.DemoSelect.main(DemoSelect.java:28) 
Caused by: org.hsqldb.HsqlException: java.net.ConnectException: Connection refused: connect 
at org.hsqldb.ClientConnection.openConnection(Unknown Source) 
at org.hsqldb.ClientConnection.initConnection(Unknown Source) 
at org.hsqldb.ClientConnection.<init>(Unknown Source) 
... 6 more 
Caused by: java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 
at java.net.Socket.connect(Socket.java:579) 
at java.net.Socket.connect(Socket.java:528) 
at java.net.Socket.<init>(Socket.java:425) 
at java.net.Socket.<init>(Socket.java:208) 
at org.hsqldb.server.HsqlSocketFactory.createSocket(Unknown Source) 
... 9 more 
Exception in thread "main" java.lang.RuntimeException: java.sql.SQLTransientConnectionException: java.net.ConnectException: Connection refused: connect 
at cap3.jdbc.DemoSelect.main(DemoSelect.java:53) 
Caused by: java.sql.SQLTransientConnectionException: java.net.ConnectException: Connection refused: connect 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source) 
at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source) 
at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source) 
at java.sql.DriverManager.getConnection(DriverManager.java:579) 
at java.sql.DriverManager.getConnection(DriverManager.java:221) 
at cap3.jdbc.DemoSelect.main(DemoSelect.java:28) 
Caused by: org.hsqldb.HsqlException: java.net.ConnectException: Connection refused: connect 
at org.hsqldb.ClientConnection.openConnection(Unknown Source) 
at org.hsqldb.ClientConnection.initConnection(Unknown Source) 
at org.hsqldb.ClientConnection.<init>(Unknown Source) 
... 6 more 
Caused by: java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 
at java.net.Socket.connect(Socket.java:579) 
at java.net.Socket.connect(Socket.java:528) 
at java.net.Socket.<init>(Socket.java:425) 
at java.net.Socket.<init>(Socket.java:208) 
at org.hsqldb.server.HsqlSocketFactory.createSocket(Unknown Source) 
... 9 more 
Java Result: 1 
BUILD SUCCESSFUL (total time: 1 second) 
+0

有問題嗎? –

+0

請看我昨天的回覆以及1)確保HSQL已安裝並正在運行(我提供了鏈接),並且2)確保HSQL JDBC .jar文件在您的路徑/項目中。丟失的.jar文件是堆棧跟蹤的原因。 – paulsm4

回答

6

hsql驅動程序不在您的類路徑中。您必須以某種方式在classpath中包含該驅動程序jar文件。例如你可以用這種方式運行你的程序java -cp .;hsqldb.jar DemoSelect。使用:作爲分隔符而不是;如果你在* nix。

也文檔here

1

問:我能怎麼會丟失?

答:這聽起來像你錯過了HSQL驅動程序,或者甚至HSQL本身:)

問:你肯定HSQL成功安裝到您的系統上?這裏有一個很好的鏈接:

http://hsqldb.org/web/howto.html

問:你包括你的類路徑中的HSQL JDBC驅動程序?或者,如果您使用IDE,那麼「庫」設置是否包含HSQL JDBC驅動程序?

這裏有一個很好的鏈接添加第三方.jar文件(如HDBC)到Eclipse項目:

http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29

而這裏的不同HSQL選項的鏈接,你的JDBC連接:

http://hsqldb.org/doc/guide/ch04.html

您是使用Eclipse,Netbeans還是「其他」?

1

看到你的第二次嘗試時試圖連接到網絡服務器。所以你必須先啓動網絡服務器。

你可以按照我的回答在這篇文章中玩hsql服務器。

Concept of In Memory Database and how to see if my data is being populated in HSQL DB?

+0

「ClassNotFoundException」(即堆棧跟蹤)是因爲他沒有配置.jar(Netbeans無法找到「org.hsqldb.jdbcDriver」) – paulsm4

+0

嘿,我想他已經知道了。所以我只需要回答爲什麼第二次嘗試失敗。而我一步一步的答案將幫助任何人,即使他不是開發人員。 –

0

知識產權PC(如果應用程序託管)應使用以代替localhost/127.0.0.1

0

對我來說,問題是在類路徑中。我正在使用eclipse tomcat和hslqdb.jar。

選擇「運行配置...」 - > Tomcat服務器 - >類路徑 - >用戶條目 - >添加罐子

可能是你忘了添加的hsqldb.jar類路徑的服務器。

-1

只要添加你提到的東西沒有幫助。

「選擇‘運行配置...’ - > Tomcat服務器 - >類路徑 - >用戶條目 - >添加罐子」

這是一個良好的開端,但你必須還包括sqltool.jar。

+0

試着改變你的答案,它可以獨立。現在看起來它可以被視爲對@ Javier-del-Castillo的回答的評論,被刪除。 – bummi

相關問題