当前位置: 首页 > 面试题库 >

如何使用BaseX和XQuery查询SQLITE数据库?

温源
2023-03-14
问题内容

我是否需要为SQLite安装驱动程序,或者查询是否有问题?

nicholas $ 
nicholas $ basex sqlite.xq 
Stopped at /home/nicholas/xquery/sqlite.xq, 1/23:
[sql:error] An SQL exception occurred: No suitable driver found for jdbc:sqlite3://localhost:5432/home/nicholas/.local/share/liferea/liferea.db
nicholas $ 
nicholas $ cat sqlite.xq 
let $id := sql:connect("jdbc:sqlite3://localhost:5432/home/nicholas/.local/share/liferea/liferea.db")
return sql:execute($id, "SELECT title, description FROM items LIMIT 3;")
nicholas $

该示例查询:

let $id := sql:connect("jdbc:postgresql://localhost:5432/coffeehouse")
return sql:execute($id, "SELECT * FROM coffees WHERE price < 10")

问题答案:

是的,您需要安装与数据库后端匹配的驱动程序。

关于“ BaseX ”的(非常好的)文档,在“
SQL模块”部分中

该模块使用JDBC连接到SQL
Server。因此,您的JDBC驱动程序也需要添加到类路径中。如果使用BaseX的完整发行版,则可以将驱动程序复制到lib目录中。例如,要连接到MySQL,请下载Connector
/ J驱动程序并将档案解压缩到该目录中。

对于 SQLite, 这可能是xerial / sqlite-jdbc。添加此 JAR 到你的 类路径 (或对lib/目录 BaseX 安装目录)应该让你跑步。

似乎您的语法也可能是错误的,因为您的示例缺少驱动程序初始化的任何提示,也没有使用与BaseX文档中提到的连接字符串不同的连接字符串。但是我对SQL的了解还不够,因此可能有一些有效的变体。测试文档的示例:

(: Initialize driver :)
sql:init("org.sqlite.JDBC"),
(: Establish a connection :)
let $conn := sql:connect("jdbc:sqlite:database.db")
return (
  (: Create a new table :)
  sql:execute($conn, "drop table if exists person"),
  sql:execute($conn, "create table person (id integer, name string)"),
  (: Run 10 updates :)
  for $i in 1 to 10
  let $q := "insert into person values(" || $i || ", '" || $i || "')"
  return sql:execute($conn, $q),
  (: Return table contents :)
  sql:execute($conn, "select * from person")
)

我得到了记录的结果:

0
0
1
1
1
1
1
1
1
1
1
1
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">1</sql:column>
  <sql:column name="name">1</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">2</sql:column>
  <sql:column name="name">2</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">3</sql:column>
  <sql:column name="name">3</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">4</sql:column>
  <sql:column name="name">4</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">5</sql:column>
  <sql:column name="name">5</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">6</sql:column>
  <sql:column name="name">6</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">7</sql:column>
  <sql:column name="name">7</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">8</sql:column>
  <sql:column name="name">8</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">9</sql:column>
  <sql:column name="name">9</sql:column>
</sql:row>
<sql:row xmlns:sql="http://basex.org/modules/sql">
  <sql:column name="id">10</sql:column>
  <sql:column name="name">10</sql:column>
</sql:row>


 类似资料:
  • 我有一个,我试图将其转换为String[],以便查询数据库,但我得到了,我不知道问题出在哪里? 将arraylist转换为String[]: 然后我使用游标查询: arraylist和String[]从索引0到34都必须有35个元素 我不明白问题出在哪里?

  • 问题内容: 新手提出的另一个问题。我有一个php变量,用于查询数据库的值。它存储在变量$ publish中,当用户单击超链接时,它的值(在数据库中)将更改。 后台发生的事情是我正在查询数据库表中存储在$ publish变量中的某些数据。如果$ publish为空,则会在弹出窗口中添加publish.html的链接。弹出窗口将处理一个表单,并将数据添加到数据库,这意味着$ publish不再为空。我

  • 问题内容: 在我的SQLite数据库管理器中,我可以查询以下内容: 这个查询从2012年7月的名为“ tripmileagetable”的表中返回了里程表总和,但是我想在android查询中编写此代码。 但是我不知道如何在database.query()方法中建立此查询,有什么可以帮助吗? 问题答案:

  • 我试图键入代码,以便在数据已经在sqlite中时禁用按钮。但是我发现了这个错误!你能帮我找到解决方案吗? 这是我犯的一个错误 E/AndroidRuntime:致命异常:主进程:com。实例提交文件4MadeGDK2019,PID:16246Android系统。数据库sqlite。SQLiteException:没有这样的专栏:Joker(代码1):,编译时:从android上的movie_fav

  • 我有一个以Mysql为数据库的应用程序,它使用了大量的XML/HTML。我想在BaseX中处理mysql数据,并通过它更新数据库。有什么简单的方法连接数据库吗?我检查了http://docs.basex.org/wiki/sql,但它不起作用。你能给我一个简单的例子我必须做什么来连接吗?出现SQL异常:“找不到适用于jdbc:mysql://localhost:3306/test的驱动程序”这是我

  • 在我的SQLite数据库管理器中,我可以查询以下内容: 此查询返回2012年7月名为“tripmileagetable”的表中里程表列的总和,但我想在android查询中编写此代码。 但是我不知道如何在database.query()方法中建立这个查询,有人能帮忙吗?