2016-11-22 44 views
1

我有下面的代碼片段至今:sql2o使用SQLite在Java中NoInitialContextException

Sql2o sql2o = new Sql2o("jdbc:sqlite:test.db"); 

try (Connection connection = sql2o.open()) { 
    for (Column column : connection.createQuery("SELECT * FROM sometable").executeAndFetchTable().columns()) 
     System.out.println(column.toString()); 
} 

我使用這些依賴關係:

<dependency> 
    <groupId>org.sql2o</groupId> 
    <artifactId>sql2o</artifactId> 
    <version>1.5.4</version> 
</dependency> 
<dependency> 
    <groupId>org.xerial</groupId> 
    <artifactId>sqlite-jdbc</artifactId> 
    <version>3.15.1</version> 
</dependency> 

然而,這在執行時拋出一個NoInitialContextException。堆棧跟蹤:

Exception in thread "main" java.lang.RuntimeException: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
     at org.sql2o.JndiDataSource.getJndiDatasource(JndiDataSource.java:27) 
     at org.sql2o.Sql2o.<init>(Sql2o.java:36) 
     at me.mypackage.sqlitetest.SqliteTest.main(SqliteTest.java:11) 
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
     at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) 
     at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) 
     at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source) 
     at javax.naming.InitialContext.lookup(Unknown Source) 
     at org.sql2o.JndiDataSource.getJndiDatasource(JndiDataSource.java:24) 
     ... 2 more 

如何解決此問題?

回答

3

嘗試用

Sql2o sql2o = new Sql2o("jdbc:sqlite:test.db", null, null); 

替換該行

Sql2o sql2o = new Sql2o("jdbc:sqlite:test.db"); 

Sql2o類有一個構造函數,只需要一個字符串,但是該單一字符串是一個JNDI名稱,而不是一個JDBC連接URL 。還有另一個構造函數需要三個字符串,用於連接URL,用戶名和密碼。 SQLite不使用用戶名和密碼,所以我們可以爲它們指定null值。

+0

謝謝!我一定是從MySQL的例子中忽略了這個,因爲我認爲它沒有證書就可以工作,因爲沒有必要......該死。 – linkD