前提・実現したいこと
JavaからJDBCでSQL AnywhereのDBにクエリを投げるプログラムを作成しました。
Windowsで開発し、JarにエクスポートしたものLinuxサーバで稼働させようとしています。
Windowsでは問題なく接続できましたが、Linuxでjarを実行したところ、エラーが出てしまいました。
エラーの解消方法を教えてください。
発生している問題・エラーメッセージ
java.sql.SQLException: 無効な ODBC ハンドルです。 at sap.jdbc4.sqlanywhere.IDriver.makeODBCConnection(Native Method) at sap.jdbc4.sqlanywhere.IDriver.connect(IDriver.java:775) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228) at database.DatabaseAccess.main(DatabaseAccess.java:24)
該当のソースコード
java
1public class DatabaseAccess { 2 public static void main(String[] args) { 3 String url = "jdbc:sqlanywhere:Server=*********;DBN=*********;host=**.**.**.**:****;"; 4 String uid = "****"; 5 String pwd = "****"; 6 Connection connection = null; 7 PreparedStatement ps = null; 8 ResultSet rs = null; 9 String sql = "SELECT * FROM table_name"; 10 try { 11 connection = DriverManager.getConnection(url,uid,pwd); 12 ps = connection.prepareStatement(sql); 13 rs = ps.executeQuery(); 14 while(rs.next()) { 15 System.out.println(rs.getString("column_name")); 16 } 17 }catch(SQLException e) { 18 e.printStackTrace(); 19 } 20 } 21}
試したこと
Windows側のsajdbc4.jar
を使用したら別のエラーが出てしまっていたので、
LinuxのSQL Anywhereインストールファイルにあるsajdbc4.jar
を使用したらこのエラーが出ました。
このエラーについては探してもなかなか出てこないので困っています。
PATHとLD_LIBRARY_PATHに、bin64とlib64を通してあります。
補足情報(FW/ツールのバージョンなど)
JRE: 11.0.8
SQL Anywhere: 17
追記1
こちらの記事を参考に
sajdbc4.jar
にパスが通っていないのではと推測
Linuxにインストールされたsajdbcにはパスが通っているはずなので、本来であればそこを直接参照したいが、今回はWindowsで開発したものをLinuxに持ってきているので、classpathで直接指定するのが難しい。
そこで、外部jarを外出ししてjarエクスポートして、作成されたライブラリディレクトリにPATHとLD_LIBRARY_PATHを通してみたが、エラーは変わらなかった。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。