ユーザ用ツール

サイト用ツール


reactnative:db:sqlite

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
reactnative:db:sqlite [2019/01/29 07:04]
ips
reactnative:db:sqlite [2019/02/22 00:55] (現在)
ips
ライン 3: ライン 3:
 expoに含まれるデータベース expoに含まれるデータベース
 [[https://​docs.expo.io/​versions/​latest/​sdk/​sqlite/​|SQLite]] [[https://​docs.expo.io/​versions/​latest/​sdk/​sqlite/​|SQLite]]
 +
 +[[https://​www.dbonline.jp/​sqlite/​|SQLite入門]]
  
 ===== 基本 ===== ===== 基本 =====
 +
 +当たり前だが、パラメーター変数(?置換え)を使用する場合は、順番に気をつける必要がある。。。
  
 <​code>​ <​code>​
 +import { Constants, SQLite } from '​expo';​
 +
 const db = SQLite.openDatabase('​SampleDatabase.db'​);​ const db = SQLite.openDatabase('​SampleDatabase.db'​);​
  
ライン 31: ライン 37:
 </​code>​ </​code>​
  
-tx.executeSql(sqlStatement,​ arguments, success, error)+==== executeSql ==== 
 + 
 +tx.executeSql(sqlStatement,​ arguments, successコールバック関数, errorコールバック関数) 
 +sqlStatement:​SQL 
 +arguments:​SQLに?​を使用すると、置換え変数にできる。(プリペアードステートメント) 
 +success,​error:​それぞれ自身のトランザクションと、結果の2つのパラメータが返る。 
 +<​code>​ 
 +  executeSql = async (sql, params = []) => { 
 +    return new Promise((resolve,​ reject) => db.transaction(tx => { 
 +      tx.executeSql( sql , params, (_, { 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>​ 
 + 
 +==== ROWID ==== 
 + 
 +SQLiteにはデータをINSERTすると自動でROWIDがつく。 
 +SELECTでは明記しないと取得できないので注意。 
 + 
 +[[https://​www.sqlite.org/​autoinc.html|SQLite Autoincrement]] 
 + 
 +[[https://​www.dbonline.jp/​sqlite/​table/​index8.html|ROWIDの利用]] 
 + 
 +<​code>​  
 +    db.transaction( 
 +      tx => { 
 +        tx.executeSql('​select *,ROWID from items',​ [], (_, { rows }) => { 
 +            console.log(JSON.stringify(rows)) 
 +            console.log({count:​rows.length}) 
 +          } 
 +        ); 
 +      }, 
 +      null, 
 +    ); 
 +</​code>​ 
 + 
 +==== await/​asycnするためには? ==== 
 +[[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>​ 
 + 
 +    //​db.transaction(callback,​ error, success) 
 +    console.log("​----- drop start -----"​) 
 +    db.transaction((tx)=>​{console.log("​callback"​)},​ console.log("​error"​),​ console.log("​success"​)) 
 +    console.log("​----- drop end -----"​) 
 +     
 +[06:56:31] ----- drop start ----- 
 +[06:56:31] error 
 +[06:56:31] success 
 +[06:56:31] ----- drop end ----- 
 +[06:56:31] callback ​   
 +     
 +</​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>​ 
 + 
 +  async getDB(){ 
 +    await db.transaction((tx)=>​{return "​callback"​},​ console.log("​error"​),​ console.log("​success"​)) 
 +  } 
 +   
 +  async componentDidMount(e){ 
 + 
 +    // db.transaction(callback,​ error, success) 
 +     ​console.log("​----- drop start -----"​) 
 +    await console.log(this.getDB()) 
 +    console.log("​----- drop end -----"​) 
 +  } 
 +   
 +[07:12:05] ----- drop start ----- 
 +[07:12:05] error 
 +[07:12:05] success 
 +[07:12:05] Promise { 
 +[07:​12:​05] ​  "​_40":​ 0, 
 +[07:​12:​05] ​  "​_55":​ null, 
 +[07:​12:​05] ​  "​_65":​ 0, 
 +[07:​12:​05] ​  "​_72":​ null, 
 +[07:12:05] } 
 +[07:12:05] ----- drop end ----- 
 +</​code>​
  
reactnative/db/sqlite.1548713058.txt.gz · 最終更新: 2019/01/29 07:04 by ips