【问题标题】:web-sql, javascript, show all tables of databaseweb-sql, javascript, 显示数据库的所有表
【发布时间】:2016-09-21 15:28:45
【问题描述】:

我需要在网页上显示我的 WebSQL-DB 中的所有表。 但几天前我首先从 JavaScript 和 WebSQL 开始。

Database = DATABASE
Tables inside = Table1, Table2, Table3

这是我的代码:

<script>
    var db = openDatabase('DATABASE', '1.0', 'myDB', 2 * 1024 * 1024);
    db.transaction(
        function(tx) {
            tx.executeSql("SELECT * FROM DATABASE WHERE type = 'table'"), [],
            function(tx, results) {
                var len = results.rows.length;
                var i;
                for(i=0; i<len; i++) {
                    alert(results.rows.item(i));
                }  
            }
        }
    );

</script>

输出不能是警报。我对其他想法持开放态度。

Google-Chrome 的调试工具显示没有错误。

【问题讨论】:

  • 您是否在警告框中得到正确的输出?如果是这样,您可以只使用document.write(results.rows.item(i + "\n")); 而不是警报。
  • 嗨 - 感谢您的反馈。对不起,没有输出。这是我的主要问题!我不明白为什么。我认为,SELECT 写的不正确,但我现在不知道我必须做什么:(

标签: javascript web-sql


【解决方案1】:

这是您的问题的完整工作代码。该代码创建了一个 DB,2 个表,然后将一些数据插入其中。稍后我们从 DB 中提取所有表,然后迭代 DB 表中的行。我们将结果输出为 html 表格。

这是一个codepen

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    table,tr,th,td{
      border-collapse:collapse;
      border: 1px solid black;
      text-align:center;
    }
  </style>
  <script>
     var db;

    function runExample() {
      createDbAndTables();
      getAllTablesFromDB(getResultSetFromTable);
    }

    function createDbAndTables(callback) {
      db = openDatabase('mydb1', '1.0', 'my first database', 2 * 1024 * 1024);
      db.transaction(function(tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS tbl1 (id INTERGER UNIQUE, name TEXT)');
        tx.executeSql('CREATE TABLE IF NOT EXISTS tbl2 (id INTERGER UNIQUE, name TEXT)');
        tx.executeSql('INSERT INTO tbl1 (id,name) VALUES (1,"someone1")');
        tx.executeSql('INSERT INTO tbl1 (id,name) VALUES (2,"someone2")');
        tx.executeSql('INSERT INTO tbl2 (id,name) VALUES (3,"someone3")');
        tx.executeSql('INSERT INTO tbl2 (id,name) VALUES (4,"someone4")');
      });
    }

    function getAllTablesFromDB(callback) {
      db.transaction(function(tx) {
        tx.executeSql('SELECT tbl_name from sqlite_master WHERE type = "table"', [], function(tx, results) {
          callback(results, processResultSet);
        });
      });
    }

    function getResultSetFromTable(results, callback) {
      var length = results.rows.length;
      var j = 0;
      for (var i = 0; i < length; i++) {
        db.transaction(function(tx) {
          var k=0,tblname=results.rows[j++].tbl_name;
          tx.executeSql('SELECT * FROM ' + tblname , [], function(tx, results) {
            callback(tblname,results);
          });
        });
      }

    }

    function processResultSet(tblname,results) {
      console.log('----------------------'+tblname)
      var len = results.rows.length;
      var tbl = document.createElement('table');
      var trTblName = document.createElement('tr');
      var thTblName = document.createElement('th');
      thTblName.innerHTML = tblname;
      trTblName.colSpan = 2;
      trTblName.appendChild(thTblName);
      tbl.appendChild(trTblName);

      var trHeader = document.createElement('tr');
      var th1 = document.createElement('th');
      th1.innerHTML = 'id';
      var th2 = document.createElement('th');
      th2.innerHTML = 'name';
      trHeader.appendChild(th1);
      trHeader.appendChild(th2);
      tbl.appendChild(trHeader);

      for (var i = 0; i < len; i++) {
        var tr = document.createElement('tr');
        var td1 = document.createElement('td');
        td1.innerHTML = results.rows[i].id;
        var td2 = document.createElement('td');
        td2.innerHTML = results.rows[i].name;
        tr.appendChild(td1);
        tr.appendChild(td2);
        tbl.appendChild(tr);
      }
      var body = document.getElementsByTagName('body')[0];
      body.appendChild(tbl);
      body.appendChild(document.createElement('hr'));
    }
  </script>
</head>

<body onload="runExample()">
</body>

</html>

【讨论】:

  • 哇,好例子。但它向我显示了一张表 = foo 的信息。不是来自数据库的信息。主要问题是,我想从数据库中查看我的所有表。我运行您的示例,页面向我显示 => [object Object] Importland,谢谢,是有关“函数 processResultSet”和“回调(结果)”的信息。 Google-Chrome 的调试工具在我的代码中没有显示错误,但没有输出:( 为什么?
  • 要从数据库中获取所有表的列表,请使用以下 sql SELECT tbl_name from sqlite_master WHERE type = "table" 从此结果集中您可以遍历表并使用初始代码获取每个表的结果集。我现在时间不多,但稍后会用完整的例子回复。
  • 嗨,不错。我会检查它,稍后会给出反馈!谢谢:)
  • 好的; woooow,不错的代码,它可以工作,但是脚本,我只将 DB 名称更改为我的名称 = DATABASE,打印出以下内容: 1 undefined 1 someone1 2 someone2 3 someone3 4 someone4 呃,我的表的信息在哪里相同的数据库?我必须更改什么才能在 DB = DATABASE 中查看我的表?将单词“mydb1”更改为“DATABASE”不起作用。现在我的数据库中还有 2 个表,但显示的只是我写的内容。有什么想法? PS:对不起我的英语不好:(
  • 还有一个 :) 删除我的 DATABASE 并使用您的脚本后,它运行起来很酷而且很完美,但我只看到了表格的插入。我想看看 DATABASE 中有多少个表以及 NAMES。 tbl_name 给我一个 = column-name 而不是 table-name 的反馈!!!!示例:我的表名 =“test”,在里面我们有列 =“id”和“name”。 id = 1 和 name = test123 然后在页面上出现 = 1test123 的输出点我需要数据库的名称 - 像 table1、table2、table3 这样的 TABLE 我认为我们使用了错误的 Select Option?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2017-12-25
  • 2011-06-17
  • 2020-12-19
  • 2014-03-30
相关资源
最近更新 更多