如何使用textfield插入值以使用appcelerator在sqlite中获取数据

时间:2017-04-02 03:57:42

标签: sqlite appcelerator appcelerator-titanium appcelerator-mobile

我是初学者使用appcelerator开发Android应用程序。我尝试使用textfield插入数据以检索sqlite中的数据。但如果我使用带有查询的示例“doc_num.value”。我将收到错误“ [错误]:V8异常:test / csv.js发生异常:61:未捕获的TypeError:无法读取未定义的属性'值'

var currentWin = Ti.UI.currentWindow;

var label_export = Ti.UI.createLabel({
color:'#fffdfd',
text: 'Please insert document number to export :',
textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER,
top: 20, //200
width: 300,
font:{fontFamily:'Arial',fontSize:14}
});

currentWin.add(label_export);

var doc_num = Ti.UI.createTextField({
color:'#fffdfd',
top:60,
left:10,
width:'80%',
height:40,
hintText:'Document Number',
keyboardType:Ti.UI.KEYBOARD_DEFAULT,
borderStyle:Ti.UI.INPUT_BORDERSTYLE_ROUNDED
});
currentWin.add(doc_num);


// btn search
var btn_search = Ti.UI.createButton({
title:'Export CSV',
top:55, //355
right:5,
width:'15%',
height:50,
color:'green',
borderRadius:1,
font:{fontFamily:'Arial',fontWeight:'bold',fontSize:8}

});

btn_search.addEventListener('click',function(e) { 

var db = Ti.Database.install('../products.sqlite','products');
var dbName = db.execute('SELECT doc_num,barcode,    product_name,oum,rack_loc,qty FROM products WHERE doc_num = ?',doc_num.value);
while (dbName.isValidRow()) {

var doc_num = dbName.fieldByName('doc_num');    
var barcode = dbName.fieldByName('barcode');
var product_name = dbName.fieldByName('product_name');
var rack_loc = dbName.fieldByName('rack_loc');
var oum = dbName.fieldByName('oum');
var qty = dbName.fieldByName('qty');
dbName.next();
Ti.API.info(doc_num + ' ' + barcode + ' ' + product_name+' ' + rack_loc +' '+ oum +' '+qty);

}

dbName.close();    
});


currentWin.add(label_warning);

currentWin.add(btn_search);

这是我用于数据库的表结构。数据库名称产品和磁带名称也是产品

CREATE TABLE产品(id INTEGER PRIMARY KEY,doc_num VARCHAR,product_name VARCHAR,条形码VARCHAR,rack_loc VARCHAR,oum VARCHAR,qty NUMERIC)

1 个答案:

答案 0 :(得分:0)

你只需要使用这行代码而不是你的代码:

var dbName = db.execute('SELECT doc_num,barcode, product_name,oum,rack_loc,qty FROM products WHERE doc_num = ?', doc_num.value);

你不能在execute方法中连接字符串,你需要使用'?'在SQL查询中传递参数的标准方法。登录

另请注意,您也不能这样做:

var query = 'select * from products where doc_num = ' + doc_num.value;
  • 如果 doc_num.value
  • 中有空格,此查询将失败

因此,将值传递给查询的推荐和最安全的方法是:

var query = 'select * from products where doc_num = ? and someother_condition = ?';
db.execute(query, doc_num.value, someother_value);

db.execute方法可以从第二个参数开始获取任意数量的参数。