【问题标题】:How to create multiple SQlite tables using JavaScript?如何使用 JavaScript 创建多个 SQlite 表?
【发布时间】:2016-03-16 14:55:23
【问题描述】:

到目前为止,在我的应用程序开发(phonegap/JQuery Mobile)中,我已经设置了一个数据库并创建了一个表,我已经实现了一些与表交互以处理不同事件的函数,例如用户注册。

但是,我需要在同一个数据库中创建另一个表,但我不知道该怎么做。

我试图创建另一个函数 (createEvent(tx) {) 来创建一个表,但它不起作用。

请参阅下面的我的 javascript,它构建数据库并使用它创建表。

  document.addEventListener("deviceready", onDeviceReady, false);

                     var db;
                     function onDeviceReady() {
                         db = window.openDatabase("SoccerEarth", "2.0", "SoccerEarthDB", 2*1024*1024);
                         db.transaction(createDB, createEvents, errorCB, successCB);

                     }
                     function createDB(tx) {
                         tx.executeSql('CREATE TABLE IF NOT EXISTS SoccerEarth (UserName text, FirstName text, LastName text, Email text, Password text, CPass text)');

                     }
                     function createEvents(tx) {
                     tx.execute2('CREATE TABLE IF NOT EXISTS SoccerEvents (Title text, Location text, NoPeople text, Date text, Description text)');
                                              }

                     function errorCB(err) {
                         alert("Error processing SQL: "+err.code);
                     }

                     function successCB() {
                  alert("Database Ready!");
                     }

【问题讨论】:

    标签: javascript database function sqlite cordova


    【解决方案1】:

    为了简单起见,我会做这样的事情:

    db.transaction(function (tx) {            
    tx.executeSql('CREATE TABLE IF NOT EXISTS SoccerEarth (UserName text, FirstName text, LastName text, Email text, Password text, CPass text)');
    tx.executeSql('CREATE TABLE IF NOT EXISTS SoccerEvents (Title text, Location text, NoPeople text, Date text, Description text)');
     }, errorCB, successCB);
    

    【讨论】:

    • 谢谢,我明白我的错误了。我不小心为第二张表输入了 execute2 而不是 executeSql。
    • @Mahdi 如果它回答了您的问题,请接受它作为答案。我知道它是我的:)。
    • @KendallRoth 完成 :)
    【解决方案2】:

    您可以将 SQL 语句作为字符串数组传递。并执行数组中的每一条语句。

    var sql = [ "CREATE TABLE IF NOT EXISTS LEAD (ID VARCHAR(35) PRIMARY KEY NOT NULL, PROCESS VARCHAR (32), VERSION VARCHAR (8), CREATED_BY VARCHAR (128), CREATED_ON VARCHAR (32), RECIPIENT VARCHAR (32), STATUS VARCHAR (8))",
             "CREATE TABLE IF NOT EXISTS DOCUMENT (ID INTEGER PRIMARY KEY AUTOINCREMENT, LEAD_ID VARCHAR(35) REFERENCES LEAD (ID) NOT NULL, NAME VARCHAR (255) NOT NULL, TYPE VARCHAR (32) NOT NULL, CONTENT BLOB NOT NULL, RETRY INTEGER NOT NULL, STATUS VARCHAR (8))",
             "CREATE TABLE IF NOT EXISTS FUNDATA(ID INTEGER PRIMARY KEY AUTOINCREMENT, FUN_ID INTEGER REFERENCES LEAD (ID), NAME VARCHAR(128) NOT NULL, VALUE VARCHAR (255) NOT NULL)"  ];
    

    现在将所有 sql 传递给将要执行的函数,同时传递您的数据库对象。 回调可以是任何其他函数。

    function write(database, sql){
        this.sql = sql;
        database.transaction(
          function(tx){
          for(var i=0; i<this.sql.length; i++){
          console.log("execute sql : " + this.sql[i]);
          tx.executeSql(this.sql[i]);
        }    
          },function(error){
        console.log("error call back : " + JSON.stringify(error));
        console.log(error);
      },
         function(){
        console.log("transaction complete call back ");
      }
        );  
      }
    

    希望它能提供更好的处理方式,让代码更健壮。你也可以像这样执行插入语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      相关资源
      最近更新 更多