1

我试图确保每天只有一个条目输入到数据库中。所以我想提取今天的条目 n,如果查询有结果我想设置一个标志,这将不允许任何进一步的条目。然而,如果当天尚未输入任何条目,则标志保持未设置 n 它将允许添加。谁能帮我查询今天的条目。是否有可以使用sqlite内置的时间戳?我还在我的表格中插入了一个日期,如下所示:

function change()
{
var d=new Date();
var date=d.getDate();
var month=d.getMonth();
var year=d.getFullYear();
var ts = date+':'+month+':'+year;
alert(ts);
var userIP= document.getElementById("userInput").value; 
    db.transaction(populateDB, errorCB, successCB);
function populateDB(tx) {

     tx.executeSql('CREATE TABLE IF NOT EXISTS READ (time VARCHAR PRIMARY KEY, data FLOAT NOT NULL)');
     tx.executeSql('INSERT INTO READ (time, data) VALUES ("'+ts+'", "'+userIP+'")');
}
     function errorCB(err) {
    alert("Error processing SQL: "+err);
}

function successCB() {
    alert("success!");
    db.transaction(queryDB,errorCB);
}
}

当用户提交条目并且我想在同一函数中输入每天单个条目的验证时,将调用上述函数。

注意:所有警报均用于测试目的。

4

1 回答 1

2

由于您使用“时间”作为主键,因此您可以通过两种方式限制插入

  1. 使用忽略

    tx.executeSql('INSERT OR IGNORE INTO READ (time, data) VALUES ("'+ts+'", "'+userIP+'")');
    
  2. 先检索,检查再插入

    tx.executeSql("SELECT * FROM READ WHERE time = ?", [ts],
        function(tx, iResults) {
           if(iResults.rows.length <= 0) {
                db.transaction(function(tx) {
                    tx.executeSql('INSERT OR IGNORE INTO READ (time, data) VALUES ("'+ts+'", "'+userIP+'")',[],
                        function() {
                            console.log("Inserted");
                        },
                        function() {
                            console.log("Not Inserted");
                        }
                     );
                });
            }
        },
        function() {
            console.log("Not Inserted");
        }
    );
    
于 2013-08-06T04:07:46.890 回答