如何使用JavaScript创建多个SQlite表?

时间:2016-03-16 14:55:23

标签: javascript database function sqlite cordova

到目前为止,在我的应用程序开发(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!");
                     }

2 个答案:

答案 0 :(得分:2)

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

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);

答案 1 :(得分:0)

您可以将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 ");
  }
    );  
  }

希望它提供更好的处理方式并使代码更健壮。您也可以像这样执行Insert语句。