我对以下代码有疑问。
我有一个表单,用户可以从现有位置和游戏的下拉列表中进行选择,或者如果它不存在,他们可以选择“添加新游戏/位置”并在文本字段中输入游戏名称和/或位置. 当他们这样做时,我想将新游戏和/或位置写入数据库,并获取新创建的 ID,以便我可以正确更新会话表(记录游戏会话的位置)。
新位置和游戏正在正确编写,但是,当我添加一个新位置时,我最终会在会话表的游戏和位置字段中得到一个空值。
插入新游戏和位置时注释掉的警报返回正确的值。
function addSession(tx){
var locationID = $('#location').val();
var gameID = $('#game').val();
if ($('#location').val() == '0'){
tx.executeSql(
'INSERT INTO locations (lTitle) VALUES (?)',
[$('#newLocation').val()],
function(tx, results){
locationID = results.insertId;
},
errorCB
);
}
if ($('#game').val() == '0'){
tx.executeSql(
'INSERT INTO games (lTitle) VALUES (?)',
[$('#newGame').val()],
function(tx, results){
gameID = results.insertId;
},
errorCB
);
}
var sSQL = 'INSERT INTO sessions (date, duration, location, game, notes) VALUES '
+ '("'+$('#date').val()+' '+$('#time').val()+':00.000"'
+',2.5,'+locationID+','+gameID+',"'+$('#notes').val()+'")';
tx.executeSql(
sSQL,
[],
function(tx,results){
//todo after successful entry
},
errorCB
);
}
我最初认为这可能是因为对会话表的插入是在插入游戏和位置表之前执行的,但如果是这种情况,我会在游戏和位置字段中输入“0”而不是 null。
当我使用游戏或位置菜单中的现有项目(ID 将 >0)添加新会话时,插入工作正常。
这是会话表的设置,以防它可能与数据类型冲突有关。我在返回的 ID 上尝试了 parseInt,但结果相同
tx.executeSql(
'CREATE TABLE IF NOT EXISTS sessions ' +
'(id INTEGER PRIMARY KEY , ' +
'date TEXT, ' +
'duration REAL, ' +
'game INTEGER, ' +
'location INTEGER, ' +
'notes TEXT' +
')'
);