带有 sqlite-on 选择的 Ionic3

Posted

技术标签:

【中文标题】带有 sqlite-on 选择的 Ionic3【英文标题】:Ionic3 with sqlite- on select 【发布时间】: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]));将类型设为未定义。 【参考方案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

() 而不是 []。

【讨论】:

以上是关于带有 sqlite-on 选择的 Ionic3的主要内容,如果未能解决你的问题,请参考以下文章

带有 where 条件的 PL/SQL 更新查询作为带有一些空值的选择查询

带有自定义选择字段的 SwiftUI 选择器

jQuery选择带有命名空间元素的选择器

带有图像选择和取消选择的 Horizo​​ntalListview

Flutter - 选择带有显示和返回值的列表

带有弹出框的自定义选择,打开时更改颜色