我有以下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
听起来像是缺少或不匹配的库。尝试调试ldd处理。
首先,检查一下
$ ldd /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libJdbcOdbc.so
说,是否所有列出的依赖项都存在?
然后,尝试设置LD_DEBUG并再次启动Java程序,以查看加载程序调试。
$ export LD_DEBUG=all
$ java Test
我试图加载一个. so文件(libInfExprParser.so)使用JNI。我没有这个共享对象的源代码。我得到以下错误: 线程“main”java中出现异常。lang.unsatifiedlinkerror:/home/tomcat/sahiti/ExprParser/libinfexparser。所以:/home/tomcat/sahiti/ExprParser/libinexprparse
问题内容: 我正在尝试使用一百万首歌曲数据集,为此,我不得不安装python表,numpy,cython,hdf5,numexpr等。 昨天我设法安装了所有需要的东西,并且在使用hdf5遇到了一些麻烦之后,我下载了预编译的二进制程序包,并将它们保存在我的/ bin文件夹和/ lib中的相应库中,然后测试了此python脚本: 而且工作正常,要明确我的工作方式是先运行脚本并开始安装所需的依赖项,但是
问题内容: 当我尝试在python中执行我的主文件时遇到问题(我在使用python 2.7的Ubuntu 12.04上)。我收到此错误: 目前scipy是使用Python软件包管理器安装的(请参阅我以前的文章:python:scipy安装在ubuntu上)。 谢谢。 问题答案: 您正在使用与用于编译scipy的Python解释器不同的Python解释器来运行代码。这通常发生在使用Unicode U
我正在尝试JNI示例代码。 (您可以通过github获得以下所有源代码:https://github.com/pilhoon/jni-test) sample.java sample.c 采样.h 我在CentOS6.3上用gcc编译了这些 但是当我运行'java sample'时,出现了一个错误。 我该怎么解决这个?
问题内容: 当我尝试在python中执行我的主文件时遇到问题(我在使用python 2.7的Ubuntu 12.04上)。我收到此错误: 目前scipy是通过Python软件包管理器安装的。 谢谢。 问题答案: 您正在使用与用于编译scipy的Python解释器不同的Python解释器来运行代码。这通常发生在使用Unicode UCS2支持编译的Python安装程序,运行针对使用UnicodeUC
问题内容: 我正在使用dlopen在运行时加载共享库 在该共享库中,我引用了另一个共享库“ SharedLibarary2.so”中定义的const char *。 可执行文件和两个库都是使用-rdynamic构建的。 但是使用dlopen时,我仍然收到运行时错误:“ / usr / lib / SharedLibarary1.so:未定义符号”,并指向损坏的const char *具有未定义符号