在 React Native 中的 SQLite 上传递两个参数时无法获取数据

Posted

技术标签:

【中文标题】在 React Native 中的 SQLite 上传递两个参数时无法获取数据【英文标题】:Can't get data when passing two parameters on SQLite in React Native 【发布时间】:2019-02-22 03:10:04 【问题描述】:

我尝试为选择查询传递如下两个参数,但我没有得到数据

db.transaction(tx => 
  tx.executeSql('SELECT * FROM data WHERE (month = ? AND items_id = ?);', ["Sep 2018",68], (_,  rows ) => 
    console.log(JSON.stringify(rows));
  );
);

输出:

"_array":[],"length":0

但是在查询中传递了值,我得到了如下输出

db.transaction(tx => 
  tx.executeSql('SELECT * FROM data WHERE (month = "Sep 2018" AND items_id = 68);', [], (_,  rows ) => 
    console.log(JSON.stringify(rows));
  );
);

输出:

"_array":["item_id":"68","item_name":"Apple","month":"Sep 2018"],"length":1

注意:

我正在使用 Expo Sqlite ("expo": "^27.0.1",)

import Expo,  SQLite  from 'expo';
const db = SQLite.openDatabase('itemsDb.db');

请帮助实现这一目标。谢谢!

【问题讨论】:

尝试使用sqlBatch而不是executeSql。我在没有 Expo 的情况下使用 react-native-sqlite-storage 并且都运行良好。 @trubi 请详细解释或提供参考 【参考方案1】:

可能和react-native-sqlite-storage有同样的bug:

参数从数字转换为字符串,导致查询表达式失败,因为items_id 列包含整数

一种解决方案是在 SQL 命令中将值转换回整数:

SELECT * FROM data WHERE (month = ? AND items_id = cast(? as integer))

原bug报告here

【讨论】:

以上是关于在 React Native 中的 SQLite 上传递两个参数时无法获取数据的主要内容,如果未能解决你的问题,请参考以下文章

电子邮件 SQLite 数据 React Native

如何在 expo react native 中使用 sqlite 文件

如何在 sqlite3 中以 react native 创建数据库

无法在 React-Native 中连接到 SQLite

从 php url 获取数据以在 react native 中保存到本地 sqlite

在 react-native 中打开预填充的 SQLite 数据库,将数据库放在哪里?