java - Android Studio/gradle错误消息: cannot access referenceable in javax.naming.referenceable

标签 java android jdbc derby

我是 Android Studio 和 gradle 的新手。我有一个 Android 项目,部分在 Eclipse 中工作。原始代码在Android中使用derby数据库。旧代码通过 JDBC 直接连接到 derby 数据库。由于纯粹的懒惰和实用性,我没有将数据库更改为 SQLite。现在我想更改代码以使用 SQLite 而不是 derby,而且我正在将该项目移植到 Android Studio 中。这就是乐趣的开始。当我尝试运行该应用程序时,Gradle 抛出一个错误,指出“无法访问未找到 javax.naming.referenceable 的可引用类文件”。

这是 Gradle 提示的代码 fragment :

package net.jxta.impl.cm.sql;

import java.io.IOException;
import java.net.URI;
import java.sql.SQLException;

import net.jxta.impl.util.threads.TaskManager;

import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource;
import org.apache.derby.jdbc.EmbeddedDataSource;


public class DerbyAdvertisementCache extends JdbcAdvertisementCache {

public DerbyAdvertisementCache(URI storeRoot, String areaName, TaskManager taskManager) throws IOException {
        super(storeRoot, areaName, taskManager);
    }

    public DerbyAdvertisementCache(URI storeRoot, String areaName, TaskManager taskManager, long gcinterval, boolean trackDeltas) throws IOException {
        super(storeRoot, areaName, taskManager, gcinterval, trackDeltas);
    }

    @Override
    protected EmbeddedConnectionPoolDataSource createDataSource() {
        if(!loadDbDriver( "org.apache.derby.jdbc.EmbeddedDriver")) {
            throw new RuntimeException("Unable to loadDB driver:  org.apache.derby.jdbc.EmbeddedDriver");
        }
        EmbeddedConnectionPoolDataSource dataSource = new EmbeddedConnectionPoolDataSource();
        dataSource.setDatabaseName(dbDir.getAbsolutePath());
        dataSource.setCreateDatabase("create");
        System.err.println("Created derby cache");
        return dataSource;
    }

    @Override
    protected void shutdownDb() throws SQLException {
        // annoyingly, shutting down a derby instance involves catching an exception
        // and checking error codes to make sure it shut down "normally"

        try {
            EmbeddedDataSource dataSource = new EmbeddedDataSource();
            dataSource.setDatabaseName(dbDir.getAbsolutePath());
            dataSource.setShutdownDatabase("shutdown");
            dataSource.getConnection();
        } catch(SQLException e) {
            // make sure we get the correct error codes 
            if(e.getErrorCode() != 45000 || !"08006".equals(e.getSQLState())) {
                throw e;
            }
        }
    }

}

你们能帮我吗? 谢谢 d

最佳答案

Android 上的 Derby 存在几个问题,包括缺乏命名支持。

请参阅 2010 年 1 月 8 日对 https://issues.apache.org/jira/browse/DERBY-4458 的评论

关于java - Android Studio/gradle错误消息: cannot access referenceable in javax.naming.referenceable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27225187/

相关文章:

android - 将图像上传到android中的服务器?

java - 同时打开两个mysql数据库的连接

java - 在Java中,如何检查输入的数字和字母?

java - 如何在 SQL 中使用可选 WHERE 子句?

android - J2V8 和 Stetho

android - Google Maps SDK 错误在最后一小时开始出现

java - 在 MS-Access 中插入日期时,java 中发生错误

java.io.NotSerializedException : com. mysql.jdbc.DatabaseMetaData

java - 使用 Selenium 获取标签之间的文本

java - DrawerLayout onDrawerClosed() 调用两次