我有以下 Java 代码。此代码的目的是建立与远程 MySQL 数据库 ProductionDb(我的 /etc/odbc.ini 文件中定义的数据源)的连接。
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());
}
}
}
/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
顺便说一句 - 我正在使用 Java 7 和 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
当我尝试运行我的程序时,出现以下错误:
$java Test
java: symbol lookup error: /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libJdbcOdbc.so: undefined symbol: SQLAllocEnv
有谁知道我为什么会收到这个错误?这里有什么问题?
PS顺便说一句,我确实运行了 sudo apt-get install unixodbc-dev , sudo apt-get install libmyodbc 和 sudo apt-get install libmysql-java :-)
更新:
我还尝试了以下答复之一(由 Benny Hill 提出)中建议的想法:使用 /etc/odbcinst.ini 以及 /etc/odbc.ini。仍然不起作用,我收到相同的错误消息。
$ 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
附加说明:
我可以通过 R 编程语言成功使用这个 ODBC 数据源。
> library(odbc)
> con = odbcConnect("ProductionDb")
> con
RODBC Connection 1
Details:
case=nochange
DSN=ProductionDb