0
1

react-native-sqlite-storageとexpo-sqliteの罠

Posted at

react-nativeでiosアプリを開発していた時の話
最初は楽だからexpoで開発を進めていたが、ネイティブコードを記述する必要が生じたため急遽RNCLIでの開発環境に移行することになった。
expoではデータベースを用いるのに"expo-sqlite"というライブラリを利用していたが、RNCLIでは使用できないため、"react-native-sqlite-storage"を用いる必要があった。

生じたトラブル

SELECTしてきたデータを正しく変数に格納できていない

具体的に見ていきましょう。まず、expo-sqliteのコードを示します。

expo-sqlite
const db = SQLite.openDatabase('DATABASENEME.db');
db.transaction((tx) => {
    tx.excuteSql(
        "SELECT * FROM TABLENAME;",
        [],
        (_, resultSet) => {
            var result = resultSet.rows._array;
        },
        () => {
            console.log(error);
            return true;
        }
    );
});

上記のresultにSELECTしてきた結果が格納され、それをFlatListで表示するというものでした。
しかし、react-native-sqlite-storageでは同様にしてもなかなか表示されない・・・
エラーは出ていないので、ちゃんとSELECTされているはず、どこかがおかしい・・・

解決策

以下のように訂正します

react-native-sqlite-storage
const db = SQLite.openDatabase('DATABASENEME.db');
db.transaction((tx) => {
    tx.excuteSql(
        "SELECT * FROM TABLENAME;",
        [],
        (_, resultSet) => {
            //._array を .raw() に変更
            var result = resultSet.rows.raw();
        },
        () => {
            console.log(error);
            return true;
        }
    );
});

単なるコマンドの違いである。

参考にしたリンク

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1