0

jdbcの使用方法を学習しようとしています。通常、solarisのsybase dbに接続するには、次を使用します。

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

ホストが正しくないか、ポートが正しくないか、フレーミングしているURLが正しくないか疑問があります。ホスト名がまったく正しくない場合、どのように取得できますか。また、問題がそこにある場合、ポート番号を取得する方法もあります。 。しかし、私はその問題についてよくわかりません。問題がどこにあるのかについて、誰かが私に頭を上げてくれませんか。

4

5 に答える 5

0

JDBCURL形式が間違っているようです。正しい形式はjdbc:jtds:sybase://<host>[:<port>][/<database_name>]

于 2013-03-14T08:00:31.020 に答える
0

適切な JDBC ドライバーと接続文字列を一緒に使用する必要があります。たとえば、"com.sybase.jdbc2.jdbc.SybDriver" (jconn2.jar 内) と "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638" を一緒に使用できます。その他のオプションについては、次のページをご覧ください。

Sybase JDBC ドライバーと URL 情報

あなたのコードでは、接続 URL に余分な「:」を追加したようです。ポート番号の後の「:」をリモートにします。次の 2 つの接続 URL は、「com.sybase.jdbc.SybDriver」で機能するはずです。

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

また

String url = "jdbc:sybase:Tds:" + host + ":" + port + "/" + dbName;
于 2013-03-14T08:07:49.827 に答える
0

少し遅いかもしれませんが、それでも同じ問題があり、調査に多くの時間を費やしたので、ここにいくつかの結果を示します。

1. コードと java.sql にドライバ クラスを含める必要があります

java.sql.* をインポートします。


2. クラスパスにドライバーへのパスを指定して javac を実行する必要があります (ここに jconn3.jar があります - /usr/local/localagent/jar/jconn3.jar):
javac -cp "/usr/local/localagent/jar / *" test_conn.java

3. クラスを実行するときに、同じクラスパスを配置する必要が あります。



    com.sybase.jdbc3.jdbc.SybDriver をインポートします。
    java.sql.* をインポートします。

    public class test_conn {
        public static void main(String[] args) {
            文字列ホスト = "myhost";
            文字列 url = "jdbc:sybase:Tds:"+host+":4100";
            文字列ユーザー名 = "ユーザー名";
            文字列パスワード="パスワード";
            文字列 dbname ="dbname";
            SybDriver sybDriver = null;
            接続接続;

            試す
            {
                sybDriver=(SybDriver)Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance();
                System.out.println("ドライバが読み込まれました");
                conn = DriverManager.getConnection( "jdbc:sybase:Tds:"+host+":4100?SERVICENAME="+dbname, username, password);

                ステートメント stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("sp_helpdb");
                rs.next();
                System.out.println(rs.getString(1));
                conn.close();

            }
            キャッチ(例外例)
            {
                System.out.println(例);
            }
        }
    }


それは私のために働いたので、これが役立つことを願っています。

于 2015-07-07T13:57:21.330 に答える