我用java程序加载dll库吧。显示错误。像这样 目录分隔符不应出现在库名称中:。
import java.sql.*;
/*
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Platform;
import com.sun.jna.*;*/
public class jdbc3
{
public native void FasSendUserFromFasToFac();
static
{
System.loadLibrary("Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend");
}
/* public interface simpleDLL extends Library
{
simpleDLL INSTANCE = (simpleDLL) Native.loadLibrary((Platform.isWindows() ? "simpleDLL" : "simpleDLLLinuxPort"), simpleDLL.class);
byte giveVoidPtrGetChar(Pointer param); // char giveVoidPtrGetChar(void* param);
int giveVoidPtrGetInt(Pointer param); //int giveVoidPtrGetInt(void* param);
int giveIntGetInt(int a); // int giveIntGetInt(int a);
void simpleCall();
}*/
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/somesh";
// Database credentials
static final String USER = "root";
static final String PASS = "";
public static void main(String[] args)
{
jdbc3 jb=new jdbc3();
jb.FasSendUserFromFasToFac();
Connection conn = null;
Statement stmt = null;
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
// System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
System.out.println("Connecting to database...");
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = " select id,image from images1 ";
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while(rs.next())
{
//Retrieve by column name
System.out.println("\n");
int no = rs.getInt("id");
System.out.print("\t USER_I_ID: " +no);
/*String std_name = rs.getString("name");
System.out.print(" \t First_name : " + std_name);
String std_course = rs.getString("course");
System.out.print(" \t course : " + std_course);*/
Blob std_image = rs.getBlob("image");
System.out.print(" \t std_images : SS" + std_image);
}
}
catch(SQLException se)
{
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e)
{
//Handle errors for Class.forName
e.printStackTrace();
}finally
{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end catch try
}//end finally
}//end main
}//end FirstExample
假设我使用唯一的system.load()
它可能会显示一个类型错误。
Expecting an absolute path of the library: Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend.dll
并使用全名system.loadlibrary()
。它可能会显示另一种类型错误。
Exception in thread "main" java.lang.UnsatisfiedLinkError:
Directory separator should not appear in library name:
Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend.dll
所以我使用的是mac OS。请告诉我这个问题的解决方案。
答案 0 :(得分:5)
System.loadLibrary只接受文件名,并在当前可用的java路径中查找该文件。您需要将包含FasExtend.dll的目录添加到您的java路径,然后使用
System.loadLibrary("FasExtend")
与此帖类似:Java native library System.loadLibrary fails with UnsatisfiedLinkError
答案 1 :(得分:0)
当我尝试从应用程序的文档目录(而不是从应用程序捆绑包中)加载.so
库时,在Android上遇到了相同的问题。在我的情况下,调用以下命令有效:
System.load('/absolute/path/to/lib.so')