2013-03-14 97 views
0

我在学习如何使用jdbc。 通常连接到Sybase数据库在Solaris上使用:在solaris中使用jdbc连接到sybase

isql -Usa -Pxxxxxx -Dxxxxxx 

其得到由above.and连接到数据库,我可以rightaway执行查询。

现在我正在尝试使用java做类似的事情。

下面是我的代码。

public class SKRSample 
{ 
    public static void main(String args[]) 
    { 
    try 
     { 
     Class.forName("com.sybase.jdbc.SybDriver"); 
     } 
    catch (ClassNotFoundException cnfe) 
     { 
     System.err.println("Error loading driver: " + cnfe); 
     } 
    try 
     { 
     String host = "172.16.65.33"; 
     String dbName = "bsmdb"; 
     int port = 1234; 
     String url = "jdbc:sybase:Tds:" + host + ":" + port + ":" + "?SERVICENAME=" + dbName; 

     for (int n = 0; n<args.length; n++) { 
     if (args[n].equals("-u")) user = args[++n]; 
     else if (args[n].equals("-p")) password = args[++n]; 
     else throw new IllegalArgumentException("Unknown argument."); 
     } 
     Connection con = DriverManager.getConnection(url, user, password);//here is the error. 

代码的最后一行是存在运行时错误的地方。

我编译的代码,如下execueted:

setenv LOGIN "sa" 
setenv PASSWORD "xxxxxxx" 
javac SKRSample.java 
java SKRSample -u $LOGIN -p $PASSWORD 

我得到的错误是:

Unexpected exception : java.sql.SQLException: No suitable driver found for jdbc:sybase:Tds:172.16.65.33:1234:?SERVICENAME=bsmdb, sqlstate = 08001 

我有一个疑问,无论是主机不正确或端口不正确或我正在构建的网址是不正确的。如果根本不正确,可以获取主机名。如果问题存在,如何获取端口号。 但我不确定这个问题。任何人都可以给我一些关于问题出在哪里的问题。

+0

请问这是[标签:sybase-asa],[标签:sybase-ase],[标签:sybase-iq]还是[标签:sqlanywhere]?试图清理[标签:sybase]标签... – 2013-03-15 07:44:51

回答

0

似乎JDBC url格式错误。 正确的格式是jdbc:jtds:sybase://<host>[:<port>][/<database_name>]

+0

不,这不适合我。 – user1939168 2013-03-14 09:10:25

+0

请发送异常跟踪 – WeMakeSoftware 2013-03-14 09:12:06

0

您需要将正确的JDBC驱动程序和连接字符串一起使用。例如,您可以将“com.sybase.jdbc2.jdbc.SybDriver”(在jconn2.jar中)和“jdbc:sybase:Tds:MyDbComputerNameOrIP:2638”一起使用。请查看以下页面以获取更多选项。

Sybase JDBC Driver and URL Information

在你的代码,看来你添加了额外的:在连接URL “”。在端口号后远程“:”。以下两个连接URL应与“com.sybase.jdbc.SybDriver”一起使用。

String url = "jdbc:sybase:Tds:" + host + ":" + port + "?SERVICENAME=" + dbName; 

String url = "jdbc:sybase:Tds:" + host + ":" + port + "/" + dbName; 
+0

不,这不起作用。 – user1939168 2013-03-14 09:09:39

+0

什么是例外,什么是您的驱动程序版本? jConnect7? – longhua 2013-03-14 09:10:50

+0

跟踪如下: 加载驱动程序时出错:java.lang.ClassNotFoundException:com.sybase.jdbc2.jdbc.SybDriver 以下任何一种情况都可能会引发SQLException。 打开连接。 – user1939168 2013-03-14 10:02:31

0

您必须下载驱动程序,以便它使用由您指定的路径驾驶员执行的类。

0

Class.forName(“net.sourceforge.jtds.jdbc.Driver”);

而且在类路径中使用JTDS驱动jar

0

这可能是有点晚了,但我仍然有同样的问题,并花了很多时间来调查,所以我会在这里把一些成果:

1 。我们需要在我们的代码中包含驱动程序类以及java.sql:
import com.sybase.jdbc3.jdbc.SybDriver;
import java.sql。*;


2.我们需要在类路径中使用驱动程序的路径运行javac(我有jconn3。罐子在这里 - /usr/local/localagent/jar/jconn3.jar):
的javac -cp “在/ usr /本地/ localagent /罐/ *” test_conn.java

3.我们需要把
java命令:在运行时类相同的类路径 “:在/ usr /本地/ localagent /罐/ *” test_conn

我对test_conn.java代码如下:

 

    import com.sybase.jdbc3.jdbc.SybDriver; 
    import java.sql.*; 

    public class test_conn { 
     public static void main(String[] args) { 
      String host = "myhost"; 
      String url = "jdbc:sybase:Tds:"+host+":4100"; 
      String username = "username"; 
      String password ="password"; 
      String dbname ="dbname"; 
      SybDriver sybDriver = null; 
      Connection conn; 

      try 
      { 
       sybDriver=(SybDriver)Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance(); 
       System.out.println("Driver Loaded"); 
       conn = DriverManager.getConnection("jdbc:sybase:Tds:"+host+":4100?SERVICENAME="+dbname, username, password); 

       Statement stmt = conn.createStatement(); 
       ResultSet rs = stmt.executeQuery("sp_helpdb"); 
       rs.next(); 
       System.out.println(rs.getString(1)); 
       conn.close(); 

      } 
      catch (Exception ex) 
      { 
       System.out.println(ex); 
      } 
     } 
    } 


它的工作对我来说,所以我希望这有助于。