如何使用文本字段插入值以使用appcelerator在sqlite中获取数据

How to insert value using textfield to get data in sqlite using appcelerator

我是使用 appcelerator 开发 android 应用程序的初学者。我尝试使用文本字段插入数据以在 sqlite 中检索数据。但是如果我使用示例 "doc_num.value" 进行查询。我将收到错误“[ERROR]:V8Exception:异常发生在 test/csv.js:61:未捕获的类型错误:无法读取 属性 'value'未定义"

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);

这是我的 table 结构,我用于我的 database.Database 名称产品和磁带名称也是产品

创建 TABLE 产品(id INTEGER PRIMARY KEY,doc_num VARCHAR,product_name VARCHAR,条形码 VARCHAR,rack_loc VARCHAR,oum VARCHAR,数量 NUMERIC)

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

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 方法可以接受任意数量的参数,从第二个参数开始。