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;
}
);
});
単なるコマンドの違いである。
参考にしたリンク