Ho il seguente codice Java. Scopo di questo codice è stabilire una connessione in un database MySQL remoto ProductionDb (un'origine dati definita nel mio file /etc/odbc.ini).Origine dati ODBC Java (simbolo non definito: SQLAllocEnv)
import java.sql.*;
import java.util.*;
import java.io.*;
public class Test {
public static void main(String[] args) {
try {
Connection conn = null;
PreparedStatement s = null;
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver).newInstance();
conn = DriverManager.getConnection("jdbc:odbc:ProductionDb");
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
Il file /etc/odbc.ini è:
$ cat /etc/odbc.ini
[ProductionDb]
Driver = /usr/lib/odbc/libmyodbc.so
Description = Production Database
Server = [ hidden ]
Port = 3306
User = [ hidden ]
Password = [ hidden ]
Database = ProductionDb
A proposito - sto usando Java 7 e Ubuntu:
$java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 11.04
Release: 11.04
Codename: natty
Quando provo a fare funzionare il mio programma Viene visualizzato il seguente errore:
$java Test
java: symbol lookup error: /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libJdbcOdbc.so: undefined symbol: SQLAllocEnv
D qualcuno sa perché ho questo errore? Cosa c'è di sbagliato qui?
PS A proposito ho fatto eseguire sudo apt-get install unixODBC-dev, sudo apt-get install libmyodbc e sudo apt-get install libmysql-java :-)
UPDATE:
Ho anche provato l'idea suggerita in una delle risposte seguenti (di Benny Hill): per usare /etc/odbcinst.ini e /etc/odbc.ini. Ancora non funziona e ottengo lo stesso messaggio di errore.
$ cat /etc/odbc.ini
[ProductionDb]
Driver = MySQL Driver
Description = Production Database
Server = [ hidden ]
Port = 3306
User = [ hidden ]
Password = [ hidden ]
Database = ProductionDb
$ cat /etc/odbcinst.ini
[MySQL Driver]
Driver = /usr/lib/odbc/libmyodbc.so
Nota aggiuntiva:
posso usare questa fonte dati ODBC con successo dal linguaggio di programmazione R .
> library(odbc)
> con = odbcConnect("ProductionDb")
> con
RODBC Connection 1
Details:
case=nochange
DSN=ProductionDb
C'è un motivo per cui non si sta utilizzando un driver JDBC MySQL? – beny23
Hai avuto la possibilità di dare un'occhiata a questo per vedere se il tuo driver JDBC/ODBC sta tentando di utilizzare il file .so sbagliato? –
Non ancora ..stato occupato ..hang on :-) pace e applausi! – MadSeb