2014-01-07 44 views
-1

我试图同时在Java脚本中使用OOP来创建一个关系数据库,但我对一些遇到的困难,这是代码, 这是工作前,我改成了OOP关系型数据库和面向对象的JavaScript的

function DB() { 
this.size; 
this.row; 

this.getsize = function() { 
    return this.size; 
} 

this.db = window.openDatabase('coupons', "1.0", 'database for coupons', 100000); 
this.al = function() { 
    alert('al works'); 
} 
this.add = function(table, id, name, email, fav) { 
    // alert("works"); 
    // alert("INSERT INTO " + table + " VALUES(" + id + "," + name + ")"); 
    this.db.transaction(function(ob) 
    { 
     ob.executeSql("SELECT * FROM " + table + " WHERE pid= " + id + "", [], this.dataHandler, this.errorHandler); 

    }); 
    this.db.transaction(function(ob) 
    { 
     //alert(getsize()); 
     if (this.size > 0) { 
      alert("user already exists") 
     } else { 
      ob.executeSql("CREATE TABLE IF NOT EXISTS " + table + " (pid INTEGER, pname TEXT, pemail TEXT,pfav)"); 
      ob.executeSql("INSERT INTO " + table + " VALUES(" + id + "," + "'" + name + "'" + "," + "'" + email + "'" + "," + "'" + fav + "'" + ")"); 
      alert("user addd successfuly"); 
     } 
    } 
    ); 
} 
this.errorHandler = function(error) 
{ 
    document.write("handling error " + error); 
} 
this.dataHandler = function(transaction, data) 
{ 
    // document.write("<table>"); 
    //document.write("<tr><th>id</th><th>name</th></tr>") 
    // size = data.rows.length; 
    //for(i=0;i<size;i++) 
    // { 

    //Variables.call(this,data.rows.length,data.rows.item(0)); 
    //Variables.call(7,6); 

    this.size = data.rows.length; 
    this.row = data.rows.item(0); 






    //return row; 
    //  document.write(
    //  "<tr><td>"+row['pid']+"</td><td>"+row['pname']+"</td></tr>"); 
    // } 
    //document.write("</table>"); 
} 

this.getrows = function(n) 
{ 
    switch (n) 
    { 
     case 'pid': 
      return this.row['pid']; 
      break; 
     case 'pname': 
      return this.row['pname']; 
      break; 
     case 'pemail': 
      return this.row['pemail']; 
      break; 
     case 'pfav': 
      return this.row['pfav']; 
      break; 
     default: 
    } 
} 

}

问题如下,希望你能帮助我! 1.调用函数add后,它不会去dataHandler函数。 2.在添加函数中,我无法使用局部变量,我如何使用变量'size'来检查用户是否存在于数据库中? , 希望你能帮助我已经在这个代码2天! :(

回答

1

是的,你显然无法在你的函数中访问this.size,因为你使用的是匿名函数,所以这与你的DB -oject没有关系,而是指向这个匿名函数。 。调用this.dataHandler或this.errorHandler 所以,你可以只

this.db.transaction = function(ob) 

,让它成为对象的方法,然后会给你完全进入这个 - 你的指针DB的 - 对象 编辑:对不起,这当然会指向db对象,所以这不是一个解决方案。 但是你可以传递你的数据 - errorHandler像这样:

this.db.transaction(function() { ... }, this.errorHandler, this.dataHandler); 

,避免调用第二个事务中this.size - 声明通过简单包装一下你的电话一样:

if(this.size > 0) { alert('..'); } else { db.transaction(...) } 

但是:你的ErrorHandler和的DataHandler实际上必须对应于右侧接口 - 定义,看看: http://www.w3.org/TR/2009/WD-html5-20090212/structured-client-side-storage.html

+0

thx man!现在,每件事情都很清楚:)我接受了你的建议,并且它工作正常:) –