on 2016 Aug 12 3:21 PM
Hi,
I successfully installed SQL Anywhere 17 on a Linux environment. I am able to connect to it with various client applications, using the jconn4.jar driver. However, I have been directed by the customer to use the sajdbc4.jar driver, and I am running into problem.
I developed a simple Java application to try and figure out what I'm doing wrong; I have the source file below.
I run it from the command line like this:
$ java -classpath .:./sajdbc4.jar -Djava.library.path=/opt/sqlanywhere17/lib64 DriverTest
I get the following error:
Connecting to database... java.sql.SQLException: Invalid ODBC handle at sap.jdbc4.sqlanywhere.IDriver.makeODBCConnection(Native Method) at sap.jdbc4.sqlanywhere.IDriver.connect(IDriver.java:809) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:215) at DriverTest.main(DriverTest.java:26)
Line 26 corresponds to the line where I'm calling the DriverManager.getConnection method.
I've tried various combinations of JDBC URL values, and I have made sure that all the shared libraries that sajdbc4.jar needs are indeed in the /opt/sqlanywhere17/lib64 DriverTest folder.
Any ideas as to how I can solve this problem?
thanks, Gonzalo
import java.sql.*;
public class DriverTest {
static final String JDBC_DRIVER = "sap.jdbc4.sqlanywhere.IDriver";
//static final String DB_URL = "jdbc:sqlanywhere:uid=DBA;pwd=sql;links=tcpip(host=127.0.0.1);eng=demo;port=2638";
static final String DB_URL = "jdbc:sqlanywhere:links=tcpip(host=127.0.0.1);eng=demo;port=2638";
//static final String DB_URL = "jdbc:sqlanywhere:ServerName=localhost;eng=demo;port=2638";
//static final String DB_URL = "jdbc:sqlanywhere:uid=DBA;pwd=sql;eng=demo;port=2638";
//static final String DB_URL = "jdbc:sqlanywhere:UserID=DBA;Password=sql;eng=demo;host=localhost;port=2638";
static final String USER = "DBA";
static final String PASS = "sql";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName(JDBC_DRIVER);
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//conn = DriverManager.getConnection(DB_URL);
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT PersonId, LastName, FirstName, Address, City FROM Persons";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("PersonId");
String lastName = rs.getString("LastName");
String firstName = rs.getString("FirstName");
String address = rs.getString("Address");
String city = rs.getString("City");
System.out.print("ID: " + id);
System.out.print(", Last Name: " + lastName);
System.out.print(", First Name: " + firstName);
System.out.println(", Address: " + address);
System.out.println(", City: " + city);
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (stmt != null)
stmt.close();
} catch (SQLException se2) {
}// nothing we can do
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
Folks,
I had to set an environment variable called LD_LIBRARY_PATH, and have it point to the directory with the shared libraries for SQL Anywhere 17. Using the java.library.path JVM parameter wasn't right.
So I was able to run it like this:
$ export LD_LIBRARY_PATH=/opt/sqlanywhere17/bin64
$ java -classpath .:./sajdbc4.jar DriverTest
thanks, Gonzalo
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
79 | |
10 | |
10 | |
10 | |
10 | |
9 | |
8 | |
7 | |
5 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.