【问题标题】:Ionic3 with sqlite- on select带有 sqlite-on 选择的 Ionic3
【发布时间】:2017-10-08 00:25:13
【问题描述】:

我在 Android 中使用 cordova 从 SQL Lite DB 查询记录时遇到问题

this.platform.ready().then(() => {
          this.sqlite.create({
            name: 'temp.db',
            location: 'default'
          }).then((db: SQLiteObject) => {

           console.log('Querying for temp user '+user.userName+'Password '+user.password);

           console.log('User queried'+user.userName);

            db.executeSql("SELECT * FROM USER  where USER_NAME = ? and USER_PWD=?", [user.userName,password]).then(
            response  => {
              let records='';
              for (let i = 0; i < response.rows.length; i++) {
                records = records+ JSON.stringify(response.rows.item(i))+'\n'; //Prints row correctly
              }
             this._util.presentAlert('Records selected like from- USR-',records);
            })
         .catch(
            e => this._util.presentAlert('Fail- Select like from- USER-Temp DBUSER',e));

            db.executeSql("SELECT * FROM USER  where USER_NAME = ? and USER_PWD=? ", [user.userName,password ]).then(
               response => {
                if (response && response.rows && response.rows.length > 0) {


                    for (let i = 0; i < response.rows.length; i++) {
                            let access = { 
                                firstName :response.rows.item[i].FIRST_NAME, //This is undefined.
                                lastName :response.rows.item[i].LAST_NAME,
                                userName:response.rows.item[i].USER_NAME,
                                userId:response.rows.item[i].USER_ID
                              }

                             observer.next(access);

                      }

                      observer.complete();

                } else {
                  let access = {status:'Fail',msg:'Bad credentials for Temp DB login'};
                 console.log('No record for the user from- USER'+user.userName);
                  observer.next(access);
                  observer.complete();               

                }
              })
              .catch(
              e => {
               console.log('Fail- Select query gone wrong * from- USER FOR Temp DB LOGIN' + e);
                let access = {status:'Fail',msg:'Bad credentials for Temp DB login'};
                observer.next(access);
                observer.complete();

              });

问题是这个打印记录正确

JSON.stringify(response.rows.item(i))
O/P
{'USER_ID':1,'FIRST_NAME':'Temp','LAST_NAME':'User','USER_NAME':'TEMPUSER','USER_PWD':'TEMPPWD'}

下面是抛出未定义的错误

firstName :response.rows.item[i].FIRST_NAME
Fail- Select query gone wrong * from- USER FOR Temp DB LOGIN TypeError: Cannot read property 'FIRST_NAME' of undefined

为什么我无法以 JSON 格式获取它?

【问题讨论】:

  • 尽管您的查询中有password,您能否再试一次user.password
  • 实际上没有加密密码。所以我使用了一个新变量。但是如果你看到这里当我警告下面的语句时它工作正常并给出 json。记录+ JSON.stringify(response.rows.item(i))+'\n'; .问题仅在我使用 :response.rows.item[i].FIRST_NAME 时出现
  • console.log('用户在数据库中找到-->响应项类型'+typeof(response.rows.item[i]));将类型设为未定义。

标签: android sqlite cordova angular ionic3


【解决方案1】:

这就是我解决问题的方法。万一它对任何人有帮助

1.Removed cordova sqllite plugin
2.Reinstalled Ionic sqllite plugin -latest
3.Took npm update of cordova
4.Performed cordova prepare android
5.Executed ionic build android
6.Corrected the typo from the queries response.rows.item(i).FIRST_NAME. It should be curly brace only. Sadly IDE doesnt trigger any error

【讨论】:

    【解决方案2】:

    我不知道现在有多晚,但你必须使用:

    response.rows.item(i).FIRST_NAME
    

    () 而不是 []。

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 2017-08-14
      相关资源
      最近更新 更多