Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将org.sqlite.JDBC转换为javax.sql.DataSource_Java_Sqlite_Netbeans - Fatal编程技术网

无法将org.sqlite.JDBC转换为javax.sql.DataSource

无法将org.sqlite.JDBC转换为javax.sql.DataSource,java,sqlite,netbeans,Java,Sqlite,Netbeans,我正在Linux Mint上使用Netbeans 8.0.1构建Java企业应用程序。 我必须使用一个现有的SQLite数据库,所以我按照下面的步骤将Netbeans连接到它。 然后,我编写了一个试用实体类和会话Bean,但在部署应用程序时,出现以下错误: 我在互联网上搜索解决方案,但每次都得到相同的例外 有人能帮我吗?在继续使用DataSource共享连接之前,请先检查SQLite的单个JDBC连接是否正常工作。如果是,那么您可以使用JNDI将此数据源汇集在一起 首先重新启动服务器 然后在we

我正在Linux Mint上使用Netbeans 8.0.1构建Java企业应用程序。 我必须使用一个现有的SQLite数据库,所以我按照下面的步骤将Netbeans连接到它。 然后,我编写了一个试用实体类和会话Bean,但在部署应用程序时,出现以下错误:

我在互联网上搜索解决方案,但每次都得到相同的例外


有人能帮我吗?

在继续使用DataSource共享连接之前,请先检查SQLite的单个JDBC连接是否正常工作。如果是,那么您可以使用JNDI将此数据源汇集在一起

首先重新启动服务器

然后在web/META-INF/context.xml文件中添加对新jdbc资源的引用。它定义了一个JNDI名称、它的类类型、与我们刚才安装的jar相关的驱动程序类名,以及连接到数据库的url。在我的例子中,我指向一个必须存在于文件系统中的目录

<Context>
    <Resource name="jdbc/sqlite"
    type="javax.sql.DataSource"
    driverClassName="org.sqlite.JDBC"
    url="jdbc:sqlite:/var/lib/tomcat7/dbs/test.db"
    />
</Context>

我对我的问题做了几次研究,但我找不到一个好的解决方案来让一切正常工作,所以我做了一点架构上的改变,从一个NetBeans Java EE企业应用程序到一个NetBeans Java web应用程序,我按照以下指南在数据库中手工建立了连接: 现在一切似乎都很好。
这不是一个快速的解决方案,但很有效。

我没有任何web.xml文件和context.xml文件,直到现在我使用嵌入式Netbeans数据库编写了企业应用程序,所以我不需要它们。您确定我在Java Enterprice应用程序中需要这样的文件吗?这些文件是典型的Java Web应用程序。如果最终遇到这样的问题,那么良好的嵌入式环境将无法工作很长时间。因此,请将整个配置保存在xml文件中。此外,它还将帮助您进行调试,并且您的代码将更易于维护和插入。对于您的回答,您确实很有帮助,但我有一些疑问,您能否建议我如何创建context.xml文件?我只是创建了web.xml,在哪里添加java代码?context.xml取决于您使用的服务器。它位于服务器配置文件夹中。服务器通常为JNDI提供最佳的工厂支持。此外,您还可以使用框架,框架有自己的context.xml配置。示例包括spring、ejb等。环顾互联网,我没有找到任何好的解决方案,我认为java EE与SQLite存在一些问题,因此我正在解决手动连接的问题:
<Context>
    <Resource name="jdbc/sqlite"
    type="javax.sql.DataSource"
    driverClassName="org.sqlite.JDBC"
    url="jdbc:sqlite:/var/lib/tomcat7/dbs/test.db"
    />
</Context>
...
<resource-ref>
    <res-ref-name>jdbc/sqlite</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
</resource-ref>
...
Connection conn = null;
try {
    Context ctx = new InitialContext();
    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/sqlite");
    conn = ds.getConnection();
    Statement statement = conn.createStatement();
try {
    statement.executeUpdate("create table thing(x integer)");
} catch (Exception e) { 
     // Could well be already there
}
statement.executeUpdate("insert into thing values(42)");
ResultSet rs = statement.executeQuery("select * from thing");
while (rs.next()) {
writer.println("id = " + rs.getInt(1));
} catch (Exception e) {
    writer.println(e.getMessage());
} finally {
    try {
        if (conn != null) conn.close();
    } catch (SQLException e) {
        writer.println(e);
    }
}