Подключение к Sybase с использованием JDBC в Solaris

Я пытаюсь узнать, как использовать JDBC. Обычно для подключения к 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-адрес, который я использую. Как можно получить имя хоста, если оно вообще неверно, а также как узнать номер порта, если проблема лежит там?, Но я не уверен в проблеме. Кто-нибудь может подсказать мне, где именно проблема.

5 ответов

Вам нужно будет скачать драйвер и выполнить класс, чтобы он использовал драйвер по указанному вами пути.

Кажется, что формат URL JDBC неверен. правильный формат jdbc:jtds:sybase://<host>[:<port>][/<database_name>]

Class.forName("net.sourceforge.jtds.jdbc.Driver");

И использовать JTDS драйвер JAR в classpath

Может быть, немного поздно, но все же я столкнулся с той же проблемой и потратил много времени на расследование, поэтому я приведу некоторые результаты здесь:

1. Нам нужно включить класс драйвера в наш код, а также java.sql:
import com.sybase.jdbc3.jdbc.SybDriver;
импорт java.sql.*;

2. Нам нужно запустить javac с указанием пути к драйверу в classpath (у меня есть 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;
    импорт java.sql.*;

    открытый класс test_conn {
        public static void main(String[] args) {
            String host = "myhost";
            String url = "jdbc:sybase:Tds:"+host+":4100";
            String username = "username";
            String password ="пароль";
            String dbname ="dbname";
            SybDriver sybDriver = ноль;
            Соединение конн;

            пытаться 
            {
                sybDriver=(SybDriver)Class.forName("com.sybase.jdbc3.jdbc.SybDriver") newInstance().
                System.out.println ("Драйвер загружен");
                conn = DriverManager.getConnection( "jdbc:sybase:Tds:"+host+":4100?SERVICENAME="+dbname, имя пользователя, пароль);

                Оператор stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("sp_helpdb");
                rs.next();
                System.out.println(rs.getString(1));
                conn.Close();

            } 
            поймать (исключение ex) 
            {
                System.out.println(ех);
            }
        }
    }


Это сработало для меня, поэтому я надеюсь, что это поможет.

Вам нужно использовать правильный драйвер JDBC и строку подключения вместе. Например, вы можете использовать "com.sybase.jdbc2.jdbc.SybDriver" (в jconn2.jar) и "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638" вместе. Пожалуйста, проверьте следующую страницу для большего количества вариантов.

Информация о драйвере и URL Sybase JDBC

Похоже, что в вашем коде вы добавили дополнительный ":" в URL соединения. Удаленный ":" после номера порта. Следующие два URL-адреса соединения должны работать с "com.sybase.jdbc.SybDriver".

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

или же

String url = "jdbc:sybase:Tds:" + host + ":" + port + "/" + dbName;
Другие вопросы по тегам