簡體   English   中英

在Solaris中使用JDBC連接到sybase

[英]Connecting to sybase using jdbc in solaris

我正在嘗試學習如何使用jdbc。 通常要連接到solaris上的sybase數據庫,我使用:

isql -Usa -Pxxxxxx -Dxxxxxx

它通過上述連接到數據庫。我可以立即執行查詢。

現在,我正在嘗試使用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.

代碼的最后一行是運行時錯誤所在的位置。

我編譯了代碼並執行如下:

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

我懷疑主機不正確或端口不正確或我正在構建的網址不正確。如果根本不正確,如何獲取主機名。如果問題出在那兒,如何獲取端口號。 但是我不確定這個問題,誰能給我一些有關問題到底出在哪里的提示。

似乎JDBC網址格式錯誤。 正確的格式是jdbc:jtds:sybase://<host>[:<port>][/<database_name>]

您需要一起使用正確的JDBC驅動程序和連接字符串。 例如,可以一起使用“ com.sybase.jdbc2.jdbc.SybDriver”(在jconn2.jar中)和“ jdbc:sybase:Tds:MyDbComputerNameOrIP:2638”。 請檢查以下頁面以了解更多選項。

Sybase JDBC驅動程序和URL信息

在您的代碼中,似乎您在連接URL中添加了額外的“:”。 遠程連接端口號后的“:”。 以下兩個連接URL應該與“ com.sybase.jdbc.SybDriver”一起使用。

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

要么

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

您將必須下載驅動程序並執行該類,以便它在您指定的路徑中使用該驅動程序。

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

並在類路徑中使用JTDS驅動程序jar

可能有點晚了,但是我仍然遇到同樣的問題,花了很多時間進行調查,因此我在這里給出一些結果:

1.我們需要在代碼以及java.sql中包含驅動程序類:
導入com.sybase.jdbc3.jdbc.SybDriver;
導入java.sql。*;

2.我們需要在類路徑中使用驅動程序的路徑運行javac(我在這里有jconn3.jar-/usr/local/localagent/jar/jconn3.jar):
javac -cp“ / usr / local / localagent / jar / *” test_conn.java

3.運行類時,我們需要放置相同的類路徑:
java -cp“。:/ usr / local / localagent / jar / *” 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);
            }
        }
    }

它對我有用,所以我希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM