2012-10-19 91 views
4

我写了一段代码,将一条记录的值插入SQLite数据库并显示它。检查记录是否存在,如果存在,更新它,否则在PhoneGap中创建新记录?

现在我想要做的是检查我插入的记录是否存在?

如果记录存在,则更新它,否则创建一个新记录。

如何在PhoneGap中执行此操作?下面是我曾尝试代码:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Contact Example</title> 

     <script type="text/javascript" charset="utf-8" src="cordova-1.5.0.js"></script> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> 
     <script type="text/javascript" charset="utf-8"> 

      //add listener when device ready 
      document.addEventListener("deviceready", onDeviceReady, false); 
      var db = window.openDatabase("Dummy_DB", "1.0", "Just a Dummy DB", 200000); //will create database Dummy_DB or open it 

      //function will be called when device ready 
      function insertdata(){ 
       //alert("hi"); 
       var name = $('#name').val(); 
       var passwd = $('#pwd').val(); 

       if(name == "") 
       { 
        alert("Please enter name"); 
       } 

       if(passwd == "") 
       { 
        alert("Please enter Password"); 
       } 
       if(name != "" && passwd != ""){ 
       db.transaction(populateDB, errorCB, successCB); 
       } 
      } 

      function onDeviceReady(){ 
       document.getElementById("submit").addEventListener("click", insertdata, false); 

      } 

      //create table and insert some record 
      function populateDB(tx) { 
       tx.executeSql('CREATE TABLE IF NOT EXISTS Login (id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL, Password TEXT NOT NULL)'); 
       //tx.executeSql('INSERT INTO SoccerPlayer(Name,Club) VALUES ("Alexandre Pato", "AC Milan")'); 
       // tx.executeSql('INSERT INTO SoccerPlayer(Name,Club) VALUES ("Van Persie", "Arsenal")'); 
       //tx.executeSql('DELETE FROM SoccerPlayer'); 
       var name = $('#name').val(); 
       var passwd = $('#pwd').val(); 



       tx.executeSql('INSERT INTO Login (Name,Password) VALUES ("'+name+'","'+ passwd +'")'); 
       $('#name').val(''); 
       $('#pwd').val(''); 

      } 

      //function will be called when an error occurred 
      function errorCB(err) { 
       // alert("Error processing SQL: "+err.code); 
      } 

      //function will be called when process succeed 
      function successCB() { 
       alert("success!"); 
       db.transaction(queryDB,errorCB); 
      } 

      //select all from SoccerPlayer 
      function queryDB(tx){ 
       tx.executeSql('SELECT * FROM Login',[],querySuccess,errorCB); 
      } 


      function querySuccess(tx,result){ 
       $('#SoccerPlayerList').empty(); 
       $.each(result.rows,function(index){ 
         var row = result.rows.item(index); 
         $('#SoccerPlayerList').append('<li><a href="#"><h3 class="ui-li-heading">'+row['Name']+'</h3></a></li>'); 
         }); 

       $('#SoccerPlayerList').listview(); 
      } 


      </script> 
    </head> 
    <body> 
     <div data-role="page"> 
        <div data-role="header" data-position="fixed" data-theme="b"> 
        <h1>Login</h1> 
        </div> 
      <div>Name: <input type="text" id="name"></div> 
      <div>Password: <input type="password" id="pwd"></div> 
      <input type="submit" id="submit"> 
       <div data-role="content"> 
        <ul id="SoccerPlayerList"> 
          </ul> 
         </div> 
       </div> 
    </body> 
</html> 
+0

任何人都可以请回复,因为我没有得到如何检查记录...请.. .. – user818671

回答

3

在一般情况下,你要搜索记录:

SELECT 1 FROM Login WHERE Name = '...' 

,当你得到的结果回来,检查是否有东西或没有,做一个INSERT或相应UPDATE

INSERT INTO Login(Name, Password) VALUES('...', '...') 
-- or 
UPDATE Login SET Password = '...' WHERE Name = '...' 

然而,SQLite的有一个扩展,它允许您更换记录时插入一条记录将创建一个confli否则。这需要你有一个UNIQUE约束,这样的冲突可以被检测:

CREATE TABLE Login(..., Name TEXT NOT NULL UNIQUE, ...) 

然后,您可以使用下面的命令:

INSERT OR REPLACE INTO Login(Name, Password) VALUES('...', '...') 

请注意,你不应该尝试将字符串直接放入SQL命令以避免格式化问题(如果密码包含"?)和SQL injection攻击 - 当Bobby Tables尝试使用您的应用程序时会发生什么? 而是使用参数;这样的事情:

db.transaction(function(tx) { 
    var name = ...; 
    var passwd = ...; 
    tx.executeSql('INSERT OR REPLACE INTO Login(Name, Password) VALUES(?, ?)', 
        [name, passwd]); 
}); 
相关问题