[英]Connecting to sybase using jdbc in solaris
我正在嘗試學習如何使用jdbc。 通常要連接到solaris上的sybase數據庫,我使用:
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
我懷疑主機不正確或端口不正確或我正在構建的網址不正確。如果根本不正確,如何獲取主機名。如果問題出在那兒,如何獲取端口號。 但是我不確定這個問題,誰能給我一些有關問題到底出在哪里的提示。
似乎JDBC網址格式錯誤。 正確的格式是jdbc:jtds:sybase://<host>[:<port>][/<database_name>]
您需要一起使用正確的JDBC驅動程序和連接字符串。 例如,可以一起使用“ com.sybase.jdbc2.jdbc.SybDriver”(在jconn2.jar中)和“ jdbc:sybase:Tds:MyDbComputerNameOrIP:2638”。 請檢查以下頁面以了解更多選項。
在您的代碼中,似乎您在連接URL中添加了額外的“:”。 遠程連接端口號后的“:”。 以下兩個連接URL應該與“ com.sybase.jdbc.SybDriver”一起使用。
String url = "jdbc:sybase:Tds:" + host + ":" + port + "?SERVICENAME=" + dbName;
要么
String url = "jdbc:sybase:Tds:" + host + ":" + port + "/" + dbName;
您將必須下載驅動程序並執行該類,以便它在您指定的路徑中使用該驅動程序。
Class.forName(“ net.sourceforge.jtds.jdbc.Driver”);
並在類路徑中使用JTDS驅動程序jar
可能有點晚了,但是我仍然遇到同樣的問題,花了很多時間進行調查,因此我在這里給出一些結果:
1.我們需要在代碼以及java.sql中包含驅動程序類:
導入com.sybase.jdbc3.jdbc.SybDriver;
導入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); } } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.