我有一个Firebird DB文件,test.fdb在某个目录中,我想从java应用程序访问数据库。要访问的库文件是什么。
我使用Jaybird JDBC Driver访问嵌入式Firebird数据库,但我收到了错误
线程中的异常" main" java.lang.UnsatisfiedLinkError:没有 java.library.path中的jaybird22_x64
我尝试通过System.setProperty("java.library.path", "/home/sk/Desktop/Jaybird/");
下载并添加jaybird22_x64.so文件
以及System.load() and -Djava.library.path
jaybird文件夹包含文件jaybird22_x64.so文件。
我正在使用Ubuntu 17.04,kernel 4.10.0-42-generic
这是我得到的例外。
线程中的异常" main" java.lang.UnsatisfiedLinkError:没有 java.library.path中的jaybird22_x64 java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)at java.lang.Runtime.loadLibrary0(Runtime.java:870)at java.lang.System.loadLibrary(System.java:1122)at org.firebirdsql.gds.impl.jni.JniGDSImpl.initJNIBridge(JniGDSImpl.java:64) 在 org.firebirdsql.gds.impl.jni.JniGDSImpl。(JniGDSImpl.java:25) 在 org.firebirdsql.gds.impl.jni.EmbeddedGDSFactoryPlugin.getGDS(EmbeddedGDSFactoryPlugin.java:40) 在 org.firebirdsql.gds.impl.GDSFactory.getGDSForType(GDSFactory.java:275) 在 org.firebirdsql.jca.FBManagedConnectionFactory.getGDS(FBManagedConnectionFactory.java:123) 在 org.firebirdsql.jdbc.AbstractDriver.connect(AbstractDriver.java:130) 在java.sql.DriverManager.getConnection(DriverManager.java:664)at java.sql.DriverManager.getConnection(DriverManager.java:247)at test.TestJavaFireBird.main(TestJavaFireBird.java:33)
任何人都可以提供帮助,需要哪些库以及如何加载它们?
答案 0 :(得分:2)
看起来Firebird网站上的二进制文件无法在Ubuntu上运行。因此,要使用嵌入在Ubuntu 17.04上的Firebird,最简单的方法是使用以下命令安装Firebird 3.0服务器:
sudo apt-get install firebird3.0-server
在安装中,请务必输入sysdba帐户的密码。
这将安装并启动一个完整的Firebird 3.0服务器,但另一种方法是自己编译Firebird。您可以使用
停止和禁用服务器进程sudo systemctl stop firebird3.0
sudo systemctl disable firebird3.0
接下来,您需要将自己添加到Firebird组,以便访问共享锁文件的/tmp/firebird
:
sudo usermod -a -G firebird <your-username>
重新启动以访问该组。这不应该是必要的,但我无法在我的机器上重新启动组。
使用此功能后,您可以尝试通过使用FIREBIRD_LOCK
环境变量指定锁定路径而不将自己添加到firebird组来使其正常工作。
接下来使用Jaybird 3.0和JNA 4.4.0来运行Java应用程序。如果你想使用Jaybird 2.2,你需要自己编译libjaybird22_x64.so。
如果您确实需要使用Firebird 2.5,那么您可能需要查看https://askubuntu.com/questions/945327/how-to-installing-firebird-on-ubuntu-16-04,但我不确定这是否仍然适用于17.04。