在solaris中使用jdbc连接到sybase

时间:2013-03-14 07:27:00

标签: java jdbc solaris sybase jconnect

我正在尝试学习如何使用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

我怀疑主机是不正确的还是端口不正确或者我正在构建的网址是不正确的。如果主页名称不正确,可以获取主机名。如果有的话,如何获取端口号问题在于那里。 但是我不确定这个问题。任何人都可以向我提出一些问题,关于问题究竟在哪里。

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您需要一起使用正确的JDBC驱动程序和连接字符串。例如,您可以一起使用“com.sybase.jdbc2.jdbc.SybDriver”(在jconn2.jar中)和“jdbc:sybase:Tds:MyDbComputerNameOrIP:2638”。请查看以下页面以获取更多选项。

Sybase JDBC Driver and URL Information

在您的代码中,您似乎在连接网址中添加了额外的“:”。远程端口号后面的“:”。以下两个连接URL应与“com.sybase.jdbc.SybDriver”一起使用。

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

1。我们需要在代码和java.sql中包含驱动程序类:
     import com.sybase.jdbc3.jdbc.SybDriver;
    import 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);
            }
        }
    }


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