【问题标题】:not implemented by SQLite JDBC driverSQLite JDBC 驱动没有实现
【发布时间】:2014-07-30 05:29:19
【问题描述】:

我已经使用sqlitejdbc-v056.jar 成功地为 SQLite 数据库创建了 ColdFusion 数据源。然后我将此查询添加到我的 .cfm 页面

<cfquery name="qry" datasource="Spiceworks">
SELECT
id AS Ticket_Number,
summary AS Summary,
status AS Status,
created_at AS Created_At,
assigned_to AS Assigned_to

FROM tickets
WHERE status = 'open' AND assigned_to IS NULL
ORDER BY Created_At DESC   
</cfquery>

当我在 IE 和 Firefox 中浏览到我的 .cfm 页面时,我收到错误消息:

SQLite JDBC 驱动没有实现

C:/Inetpub/wwwroot/intra/SmartTV/UnassignedTickets/Tickets.cfm 出现错误:第 204 行

202 :
203:
204:
205:选择
206:身份证,

SQL SELECT id、summary、status、created_at、assigned_to FROM 门票 WHERE status = 'open' AND assignment_to IS NULL ORDER BY created_at DESC DATASOURCE Spiceworks 资源:

Check the ColdFusion documentation to verify that you are using the correct syntax.
Search the Knowledge Base to find a solution to your problem.

堆栈跟踪

at cfTickets2ecfm1617356019.runPage(C:/Inetpub/wwwroot/intra/SmartTV/UnassignedTickets/Tickets.cfm:204) at cfTickets2ecfm1617356019.runPage(C:/Inetpub/wwwroot/intra/SmartTV/UnassignedTickets/Tickets.cfm:204) java.sql.SQLException: not implemented by SQLite JDBC driver
    at org.sqlite.jdbc3.JDBC3Statement.unused(JDBC3Statement.java:397)
    at org.sqlite.jdbc3.JDBC3Statement.execute(JDBC3Statement.java:414)
    at coldfusion.server.j2ee.sql.JRunStatement.execute(JRunStatement.java:359)
    at coldfusion.sql.Executive.executeQuery(Executive.java:1442)
    at coldfusion.sql.Executive.executeQuery(Executive.java:1201)
    at coldfusion.sql.Executive.executeQuery(Executive.java:1131)
    at coldfusion.sql.SqlImpl.execute(SqlImpl.java:406)
    at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:1056)
    at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:685)
    at cfTickets2ecfm1617356019.runPage(C:\Inetpub\wwwroot\intra\SmartTV\UnassignedTickets\Tickets.cfm:204)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:444)
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
    at coldfusion.filter.IpFilter.invoke(IpFilter.java:64)
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:428)
    at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:112)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
    at coldfusion.CfmServlet.service(CfmServlet.java:219)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)java.sql.SQLException: not implemented by SQLite JDBC driver
    at org.sqlite.jdbc3.JDBC3Statement.unused(JDBC3Statement.java:397)
    at org.sqlite.jdbc3.JDBC3Statement.execute(JDBC3Statement.java:414)
    at coldfusion.server.j2ee.sql.JRunStatement.execute(JRunStatement.java:359)
    at coldfusion.sql.Executive.executeQuery(Executive.java:1442)
    at coldfusion.sql.Executive.executeQuery(Executive.java:1201)
    at coldfusion.sql.Executive.executeQuery(Executive.java:1131)
    at coldfusion.sql.SqlImpl.execute(SqlImpl.java:406)
    at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:1056)
    at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:685)
    at cfTickets2ecfm1617356019.runPage(C:\Inetpub\wwwroot\intra\SmartTV\UnassignedTickets\Tickets.cfm:204)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:444)
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
    at coldfusion.filter.IpFilter.invoke(IpFilter.java:64)
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:428)
    at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48)
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:112)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
    at coldfusion.CfmServlet.service(CfmServlet.java:219)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)

更新:

我的 .jar 文件位于 C:\ColdFusion10\cfusion\lib\C:\ColdFusion10\cfusion\wwwroot\WEB-INF\lib 下。在 ColdFusion 数据源中:

  • CF 数据源名称:Spiceworks
  • JDBC URL:jdbc:sqlite:\spiceworks\C$\Program Files\Spiceworks\db\spiceworks_prod.db
  • 驱动类:org.sqlite.JDBC
  • 驱动名称:sqlite-jdbc-3.7.15-M1.jar
  • 用户名:&lt;user&gt;
  • 密码:&lt;password&gt;

按照 cmets 中的建议,我尝试了更简单的语句:

  • SELECT * FROM tickets
  • SELECT id, summary, status, assigned_to FROM tickets

...和different driver versions

  • sqllite-jdbc4-3.8.2-SNAPSHOT.jar
  • sqlite-jdbc-3.7.15-M1.jar

但仍然出现同样的错误。

【问题讨论】:

标签: sqlite jdbc coldfusion


【解决方案1】:

我认为最初的错误正是它所说的。数据源调用了您正在使用的驱动程序未实现的方法。特别是org.sqlite.jdbc3.JDBC3Statementexecute(..) 方法。 The source for this driver 表明该方法什么也不做。它只是抛出您看到的错误消息。

但是我认为您的类路径中有另一个版本的 SQLite 驱动程序 jar。您发布的sqlitejdbc-v056.jar 不会导致该错误,因为它甚至不包含JDBC3Statement 类。可能发生的情况是 CF 正在加载另一个其他版本的驱动程序(即在您的类路径中)。

在我的测试中,sqlitejdbc-v056.jar 在 CF10 上运行良好。在再次添加该 jar 之前,请确保您已从 CF 类路径中删除了 SQLLite jar 的 所有 版本,然后重新启动 CF。否则,CF 仍会自动加载它们,您将继续收到该错误消息。

为确保您已删除 所有 个 jar,请在重新启动后尝试创建主类的实例。如果下面的行抛出“找不到类”错误,您就知道已成功将它们全部删除。完成此操作后,请继续重新安装 sqlitejdbc-v056.jar

<cfset obj = createObject("java", "org.sqlite.JDBC")>
If you see this text, you still have a version of the jar in your class path.

这对我有用:

  1. 创建空数据库C:/temp/sqlite/products.db
  2. 已将sqlitejdbc-v056.jar 下载到C:\ColdFusion10\cfusion\wwwroot\WEB-INF\lib
  3. 重启CF
  4. 创建了“其他”DSN
  5. DSN 设置
    • DS 名称:SQLite
    • JDBC URL:jdbc:sqlite:C:/temp/sqlite/products.db
    • 驱动类:org.sqlite.JDBC

【讨论】:

  • 我不明白你的意思是我的课程路径。请进一步解释。如何使用对象?我不使用cfquery吗?你在哪里下载了 sqlitejdbc-v056.jar,所以我知道我有相同的版本。
  • CF class path,即 CF 查找类和 jar 的位置。您仍将使用 cfquery。 createObject 语句的目的只是为了验证您已从类路径中删除所有驱动程序 jar。如果你正确地做到了,那一行应该会抛出一个错误,因为它无法找到类。之后,你就不再需要它了。
  • 我在 cmets 中使用了the jar version you posted
  • 我删除了 SQLite jar 并重新启动了 ColdFusion。该行确实引发了错误,所以我知道所有驱动程序 jar 都已被删除。接下来,我按照您的示例进行操作,现在收到了另一个错误。“文件已加密或不是数据库”我相信上一个问题“不是由SQLITE JDBC 驱动程序”已解决。我将为新错误打开一个新问题。谢谢李。
  • 不客气。顺便说一句,您现在可以摆脱createObject 行。它仅用于测试/调试。你不再需要它了。
猜你喜欢
  • 2014-01-10
  • 2016-01-01
  • 2016-08-18
  • 2017-11-13
  • 1970-01-01
  • 2019-09-17
  • 2015-12-22
  • 2017-10-24
  • 2014-09-11
相关资源
最近更新 更多