0

I have a Java web service project as a RESTful API for my sqlite database.

My project structure is:

FirstWebService
-- Java Resources
-- JavaScript Resources
-- build
-- target
-- web content
pom.xml
words.db

my code for accessing the database is

JSONObject obj = new JSONObject();
Connection con = null;

try {
    Class.forName("org.sqlite.JDBC");
    try{

        con = DriverManager.getConnection("jdbc:sqlite:Words.db");              
        Statement st = con.createStatement();
        ResultSet res = st.executeQuery("select word, de, ar from Arabic where de=\"Erfolg\"");
        while(res.next()){
            obj.put("word", res.getString("word"));
            obj.put("de", res.getString("de"));
            obj.put("ar", res.getString("ar"));
        }
    }
    catch(Exception ex){
        ex.printStackTrace();
    } 
    finally {
        try {
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

however, when executing the code i get these errors

java.lang.UnsatisfiedLinkError: Native Library C:\Users\abosamir\AppData\Local\Temp\sqlite-3.7.2-sqlitejdbc.dll already loaded in another classloader
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: Arabic)
  at org.sqlite.DB.newSQLException(DB.java:383)
  at org.sqlite.DB.newSQLException(DB.java:387)
  at org.sqlite.DB.throwex(DB.java:374)
  at org.sqlite.NestedDB.prepare(NestedDB.java:134)
  at org.sqlite.DB.prepare(DB.java:123)
  at org.sqlite.Stmt.executeQuery(Stmt.java:121)
  at com.crunchify.restjersey.TestName.convert(TestName.java:47)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
  at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
  at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
  at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
  at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
  at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
  at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
  at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
  at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
  at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
  at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
  at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
  at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
  at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
  at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
  at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
  at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
  at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:745)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  at java.lang.Thread.run(Thread.java:745)

I believe it has to do with the path of the database. My database has the table and it is full of data. Besides, the sql command is functional and correct.

My Sqlite Driver in pom.xml file is

        <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.7.2</version>
        </dependency>
FarFarAway
  • 1,017
  • 3
  • 14
  • 35
  • the exception says that there is no table with name Arabic – XtremeBaumer Dec 02 '16 at 10:30
  • as I have stated at the end of the post. The error is ambiguous. i do have a table named arabic and it contains nearly 700000 entries. besides, I have triple checked the sql command and it executes – FarFarAway Dec 02 '16 at 10:32
  • so you can connect to the db via cmd or something like that? id then think that the `Class.forName()` can't be executed properly – XtremeBaumer Dec 02 '16 at 10:33
  • I have the same code for accessing the database and it is 100% functional, it has to do with web project and the way the class loader of java works i think – FarFarAway Dec 02 '16 at 10:35
  • have a look here http://stackoverflow.com/questions/1030792/dll-already-loaded-in-another-classloader maybe it helps you solving the problem – XtremeBaumer Dec 02 '16 at 10:38

0 Answers0