Подключение к 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;