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

您必须下载驱动程序并执行该类,以便它使用您指定的路径中的驱动程序。

于 2013-03-14T09:44:38.620 回答
0

您需要一起使用正确的 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;
于 2013-03-14T08:07:49.827 回答
0

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

并在类路径中使用 JTDS 驱动程序 jar

于 2013-08-13T08:18:40.020 回答
0

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

于 2013-03-14T08:00:31.020 回答
0

可能有点晚了,但是我仍然遇到了同样的问题并且花了很多时间调查,所以我将在这里放一些结果:

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


2.我们需要用classpath中的驱动路径运行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代码如下:

    导入 com.sybase.jdbc3.jdbc.SybDriver;
    导入java.sql.*;

    公共类 test_conn {
        公共静态无效主要(字符串[]参数){
            字符串主机=“我的主机”;
            字符串 url = "jdbc:sybase:Tds:"+host+":4100";
            字符串用户名 = "用户名";
            字符串密码="密码";
            字符串数据库名称=“数据库名称”;
            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();
                结果集 rs = stmt.executeQuery("sp_helpdb");
                rs.next();
                System.out.println(rs.getString(1));
                conn.close();

            }
            捕捉(例外前)
            {
                System.out.println(ex);
            }
        }
    }


它对我有用,所以我希望这会有所帮助。

于 2015-07-07T13:57:21.330 回答