この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
reactnative:db:sqlite [2019/02/20 07:14] ips |
reactnative:db:sqlite [2019/02/22 00:55] (現在) ips |
||
---|---|---|---|
ライン 39: | ライン 39: | ||
==== executeSql ==== | ==== executeSql ==== | ||
- | tx.executeSql(sqlStatement, arguments, success, error) | + | tx.executeSql(sqlStatement, arguments, successコールバック関数, errorコールバック関数) |
sqlStatement:SQL | sqlStatement:SQL | ||
arguments:SQLに?を使用すると、置換え変数にできる。(プリペアードステートメント) | arguments:SQLに?を使用すると、置換え変数にできる。(プリペアードステートメント) | ||
success,error:それぞれ自身のトランザクションと、結果の2つのパラメータが返る。 | success,error:それぞれ自身のトランザクションと、結果の2つのパラメータが返る。 | ||
<code> | <code> | ||
- | tx.executeSql('select * from items where name=?', | + | executeSql = async (sql, params = []) => { |
- | ["safa"], | + | return new Promise((resolve, reject) => db.transaction(tx => { |
- | (tran, { rows } | + | tx.executeSql( sql , params, (_, { rows }) => |
- | ) => console.log(JSON.stringify(rows)) | + | { |
- | ); | + | console.log("sql done"), |
+ | //resolve(rows._array) | ||
+ | resolve(rows.length) | ||
+ | } | ||
+ | , reject) | ||
+ | })) | ||
+ | } | ||
+ | |||
+ | async componentDidMount(e){ | ||
+ | |||
+ | //成功コールバック関数 | ||
+ | let suc=function(){ | ||
+ | console.log("success") | ||
+ | } | ||
+ | |||
+ | //エラーコールバック関数 | ||
+ | let fai=function(){ | ||
+ | console.log("fail") | ||
+ | } | ||
+ | |||
+ | console.log("----- start -----") | ||
+ | await this.executeSql('select * from items',[]).then((val)=>console.log("resulat=" + val)) | ||
+ | .catch(()=>console.log("err")) | ||
+ | console.log("----- end -----") | ||
+ | |||
+ | [00:43:58] ----- start ----- | ||
+ | [00:43:58] sql done | ||
+ | [00:43:58] resulat=0 | ||
+ | [00:43:58] ----- end ----- | ||
</code> | </code> | ||
ライン 75: | ライン 103: | ||
==== await/asycnするためには? ==== | ==== await/asycnするためには? ==== | ||
[[https://stackoverflow.com/questions/47345000/react-native-handling-async-calls-to-sqllite-db|React Native : Handling Async calls to sqllite db]] | [[https://stackoverflow.com/questions/47345000/react-native-handling-async-calls-to-sqllite-db|React Native : Handling Async calls to sqllite db]] | ||
+ | |||
+ | excuteはコールバックしているので、Promiseを返すようにする必要がある。 | ||
+ | <code> | ||
+ | |||
+ | executeSql = async (sql, params = []) => { | ||
+ | return new Promise((resolve, reject) => db.transaction(tx => { | ||
+ | tx.executeSql('select * from items', [], (_, { rows }) => | ||
+ | { | ||
+ | console.log("sql done"), | ||
+ | resolve(rows._array) | ||
+ | } | ||
+ | , reject) | ||
+ | })) | ||
+ | |||
+ | |||
+ | console.log("----- start -----") | ||
+ | await this.executeSql(null,null) | ||
+ | console.log("----- end -----") | ||
+ | |||
+ | [08:05:41] ----- start ----- | ||
+ | [08:05:41] sql done | ||
+ | [08:05:41] ----- end ----- | ||
+ | </code> | ||
+ | |||
+ | ===== 以下だだのメモ ===== | ||
+ | |||
<code> | <code> | ||
ライン 90: | ライン 144: | ||
| | ||
</code> | </code> | ||
+ | executeSql = async (sql, params = []) => { | ||
+ | return new Promise((resolve, reject) => db.transaction(tx => { | ||
+ | tx.executeSql('select * from items', [], (_, { rows }) => | ||
+ | { | ||
+ | console.log("sql done"), | ||
+ | resolve(rows._array) | ||
+ | } | ||
+ | , reject) | ||
+ | })) | ||
+ | } | ||
+ | |||
+ | | ||
<code> | <code> | ||