我是初学者使用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)
答案 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;
因此,将值传递给查询的推荐和最安全的方法是:
var query = 'select * from products where doc_num = ? and someother_condition = ?';
db.execute(query, doc_num.value, someother_value);
db.execute方法可以从第二个参数开始获取任意数量的参数。