Javascript中SQLite的简单列表-不是对象错误
当我尝试执行简单脚本将数据库中的项目列表输出到页面上的无序列表时,控制台产生以下错误:Javascript中SQLite的简单列表-不是对象错误,javascript,sqlite,Javascript,Sqlite,当我尝试执行简单脚本将数据库中的项目列表输出到页面上的无序列表时,控制台产生以下错误: TypeError: undefined is not an object (evaluating 'results.rows') 错误出现在两个地方:1)回调(结果);queryRunner()函数中的行,以及2)for循环中的results.rows.length 有关守则如下: //////////////////////////////// // Functions ///////////////
TypeError: undefined is not an object (evaluating 'results.rows')
错误出现在两个地方:1)回调(结果);queryRunner()函数中的行,以及2)for循环中的results.rows.length
有关守则如下:
////////////////////////////////
// Functions
////////////////////////////////
// SQL query function
function queryRunner(input, callback) {
// Needs to be in .transaction to work
database.transaction(
function( transaction ){
// SQL Query
transaction.executeSql(input);
},function(err){
console.log('errorCB: ' + err.code + '; Message: ' + err.message);
},function( transaction, results ){
console.log('queryRunner success!');
// Make callback optional
// Make sure only processes if functions included
// i.e. ignore strings
if(callback && typeof(callback) === 'function') { callback(results);
}
}
); // end database.transaction
} // End queryRunner
////////////////////////////////
// Testing
////////////////////////////////
var databaseOptions = {
fileName: "sqlite_WAtest",
version: "1.0",
displayName: "SQLite WA Test",
maxSize: 1024
}; // End databaseOptions
var database = openDatabase(
databaseOptions.fileName,
databaseOptions.version,
databaseOptions.displayName,
databaseOptions.maxSize
); // End database
queryRunner('DROP TABLE WORKOUTS');
queryRunner('CREATE TABLE IF NOT EXISTS WORKOUTS (id INTEGER PRIMARY KEY AUTOINCREMENT, WOdate TEXT, WOtype TEXT);');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 1","Test 2")');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 3","Test 4")');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 5","Test 6")');
queryRunner('SELECT * FROM WORKOUTS', function(results){
// Simple loop to output results
for(var num=0; num<results.rows.length; num++) {
// Get the sql data into a variable
var row = results.rows.item(num);
// Add it to the page
$('#output').append('<li>This row is ID: ' + row.id + '; WOdate: ' + row.WOdate + '; and WOtype: ' + WOtype + '.</li>');
}
});
////////////////////////////////
//功能
////////////////////////////////
//SQL查询函数
函数queryRunner(输入、回调){
//需要在。事务中才能工作
数据库事务(
职能(事务){
//SQL查询
transaction.executeSql(输入);
},函数(err){
console.log('errorCB:'+err.code+';Message:'+err.Message);
},功能(事务、结果){
log('queryRunner success!');
//使回调成为可选的
//确保仅在包含功能的情况下使用流程
//即忽略字符串
if(callback&&typeof(callback)=='function'){callback(results);
}
}
);//结束数据库事务
}//结束查询运行程序
////////////////////////////////
//测试
////////////////////////////////
var数据库选项={
文件名:“sqlite_WAtest”,
版本:“1.0”,
displayName:“SQLite WA测试”,
最大尺寸:1024
}; // 结束数据库选项
var database=openDatabase(
databaseOptions.fileName,
databaseOptions.version,
databaseOptions.displayName,
databaseOptions.maxSize
); // 端数据库
queryRunner(“升降台训练”);
queryRunner('CREATE TABLE IF NOT EXISTS WORKOUTS(id INTEGER主键自动递增,WOdate文本,WOtype文本);');
queryRunner(“插入训练(WOdate、WOtype)值(“测试1”、“测试2”));
queryRunner(“插入训练(WOdate、WOtype)值(“测试3”、“测试4”));
queryRunner(“插入训练(WOdate、WOtype)值(“测试5”、“测试6”));
queryRunner(“从训练中选择*”,函数(结果){
//输出结果的简单循环
对于(var num=0;num请浏览此处的文档:
executeSql从数据库中选择/获取行的语法不正确。它应采用以下格式:
db.transaction(function ( tx ) {
tx.executeSql('<QUERY>', '<QUERY PARAMS>', '<SUCCESS CALLBACK>', '<ERROR CALLBACK>' );
因此,您必须按如下方式更改代码:
// SQL query function
function queryRunner(database, input, callback) {
// Needs to be in .transaction to work
database.transaction(
function( tx ){
// SQL Query
tx.executeSql(input , [], function( tx, results ){
console.log('queryRunner success!');
// Make callback optional
// Make sure only processes if functions included
// i.e. ignore strings
if(callback && typeof(callback) === 'function') { callback(results);
}
},function(err){
console.log('errorCB: ' + err.code + '; Message: ' + err.message);
});
}); // end database.transaction
} // End queryRunner
////////////////////////////////
// Testing
////////////////////////////////
var databaseOptions = {
fileName: "sqlite_WAtest",
version: "1.0",
displayName: "SQLite WA Test",
maxSize: 1024
}; // End databaseOptions
var database = openDatabase(
databaseOptions.fileName,
databaseOptions.version,
databaseOptions.displayName,
databaseOptions.maxSize
); // End database
queryRunner('DROP TABLE WORKOUTS');
queryRunner('CREATE TABLE IF NOT EXISTS WORKOUTS (id INTEGER PRIMARY KEY AUTOINCREMENT, WOdate TEXT, WOtype TEXT);');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 1","Test 2")');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 3","Test 4")');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 5","Test 6")');
queryRunner('SELECT * FROM WORKOUTS', function(results){
// Simple loop to output results
for(var num=0; num<results.rows.length; num++) {
// Get the sql data into a variable
var row = results.rows.item(num);
// Add it to the page
$('#output').append('<li>This row is ID: ' + row.id + '; WOdate: ' + row.WOdate + '; and WOtype: ' + row.WOtype + '.</li>');
}
});
//SQL查询函数
函数queryRunner(数据库、输入、回调){
//需要在。事务中才能工作
数据库事务(
功能(tx){
//SQL查询
tx.executeSql(输入,[],函数(发送,结果){
log('queryRunner success!');
//使回调成为可选的
//确保仅在包含功能的情况下使用流程
//即忽略字符串
if(callback&&typeof(callback)=='function'){callback(results);
}
},函数(err){
console.log('errorCB:'+err.code+';Message:'+err.Message);
});
});//结束数据库事务
}//结束查询运行程序
////////////////////////////////
//测试
////////////////////////////////
var数据库选项={
文件名:“sqlite_WAtest”,
版本:“1.0”,
displayName:“SQLite WA测试”,
最大尺寸:1024
};//结束数据库选项
var database=openDatabase(
databaseOptions.fileName,
databaseOptions.version,
databaseOptions.displayName,
databaseOptions.maxSize
);//结束数据库
queryRunner(“升降台训练”);
queryRunner('CREATE TABLE IF NOT EXISTS WORKOUTS(id INTEGER主键自动递增,WOdate文本,WOtype文本);');
queryRunner(“插入训练(WOdate、WOtype)值(“测试1”、“测试2”));
queryRunner(“插入训练(WOdate、WOtype)值(“测试3”、“测试4”));
queryRunner(“插入训练(WOdate、WOtype)值(“测试5”、“测试6”));
queryRunner(“从训练中选择*”,函数(结果){
//输出结果的简单循环
对于(var num=0;numThink--length
是一个数组属性。我怀疑您想要的是结果。行[I]。项(num)
(假设项是每个行索引上存在的函数)这是一个很大的帮助,我将重新读取数据库上的那些页面。显然,我在错误位上出现了错误/成功(database.transaction)然而,它应该在executeSql上。现在一切似乎都正常了。非常感谢!我已经尝试过了-不幸的是,我需要提高我的声誉,让它公开。我会继续尝试:)没关系。没问题:)
// SQL query function
function queryRunner(database, input, callback) {
// Needs to be in .transaction to work
database.transaction(
function( tx ){
// SQL Query
tx.executeSql(input , [], function( tx, results ){
console.log('queryRunner success!');
// Make callback optional
// Make sure only processes if functions included
// i.e. ignore strings
if(callback && typeof(callback) === 'function') { callback(results);
}
},function(err){
console.log('errorCB: ' + err.code + '; Message: ' + err.message);
});
}); // end database.transaction
} // End queryRunner
////////////////////////////////
// Testing
////////////////////////////////
var databaseOptions = {
fileName: "sqlite_WAtest",
version: "1.0",
displayName: "SQLite WA Test",
maxSize: 1024
}; // End databaseOptions
var database = openDatabase(
databaseOptions.fileName,
databaseOptions.version,
databaseOptions.displayName,
databaseOptions.maxSize
); // End database
queryRunner('DROP TABLE WORKOUTS');
queryRunner('CREATE TABLE IF NOT EXISTS WORKOUTS (id INTEGER PRIMARY KEY AUTOINCREMENT, WOdate TEXT, WOtype TEXT);');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 1","Test 2")');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 3","Test 4")');
queryRunner('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 5","Test 6")');
queryRunner('SELECT * FROM WORKOUTS', function(results){
// Simple loop to output results
for(var num=0; num<results.rows.length; num++) {
// Get the sql data into a variable
var row = results.rows.item(num);
// Add it to the page
$('#output').append('<li>This row is ID: ' + row.id + '; WOdate: ' + row.WOdate + '; and WOtype: ' + row.WOtype + '.</li>');
}
});