Unable to load sqlite_jni: java.lang.UnsatisfiedLinkError: Native Library D:/resin/bin/sqlite_jni.dll already loaded in another

在Resin服务器上,由于Web应用每次请求动态连接数据库,导致sqlite_jni.dll加载错误。问题源于sqlite_jni.dll被JVM的ClassLoader加载,Web服务器自动重启机制引起。解决方案是将sqlite.jar移动到Resin公共lib目录,避免重复加载。类似问题也出现在使用jacob库时,处理方式相同。
摘要由CSDN通过智能技术生成

问题:web每次请求都会动态连接数据库;dbname是个数据库名参数,

private Connection getConn() throws SQLException{
        Connection conn=null;
        try {
            Class.forName("SQLite.JDBCDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if(dbName!=null&&dbName.length()>4){
                conn=DriverManager.getConnection("jdbc:sqlite:/c://sqlite3//"+dbName+".db");
        }
        return conn;
    }

 

 

 

原因:重重加载同一个文件;

 

错误表明sqlite_jni.dll已经被JVM的ClassLoader load了。通过查阅资料发现Web


      Server的自动重启机制是产生这一问题的根源。当Resin重启包含sqlite_jni.dll的这个Web应用时,会因为Variant类的语句而自动执行jsqlite_jni.dll的加载。但重启Web应用并不是重启整个resin(即:上一次启动的JVM仍然存在),也就是说sqlite_jni.dll已

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值