小编典典

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

sql

我是否需要为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")

阅读 173

收藏
2021-04-14

共1个答案

小编典典

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

关于“ 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>
2021-04-14