📜  什么是WEB SQL?

📅  最后修改于: 2022-05-13 01:55:18.169000             🧑  作者: Mango

什么是WEB SQL?

Web SQL是一种网页 API,用于存储或管理数据库中的数据,可以使用 SQL 的变体进行查询,例如创建数据库、打开事务、创建表、向表中插入值、删除值和读取数据。

Web SQL 数据库 API 不是 HTML5 规范的一部分,但它是一个单独的规范。它指定了一组 API 来使用 SQL 操作客户端数据库。

Web SQL 数据库适用于最新版本的 Safari、Google Chrome、Android 浏览器和 Opera。

方法:

有三种基本方法:

S.NoMethodExplanation
1.opendatabaseIt can be used to create a new database or can create the database object using an existing database.
2.transactionIt transaction can control a transaction and performing either commit or rollback depending upon the situation.
3.executeSqlIt is used to execute a real SQL query.

创建或打开 Web SQL 数据库:

我们可以使用opendatabase函数创建一个有四个参数的数据库:



  • 数据库名称
  • 版本号
  • 描述
  • 尺寸
  • 创建回调。

创建回调在创建数据库时被调用。

使用openDatabase () 方法访问数据库。如果数据库不存在,该方法首先创建它,然后打开它:

Syntax: var gfgDb = opendatabase(database name, version number, description, size);

我们可以通过运行以下查询来创建数据库:

var gfgDb = opendatabase('mydb', '1.0', 'this is a client side database', 2 * 1024 * 1024);


//to check whether the database is created or not.
        if (!gfgDb) {
            alert('database not created');
        }
        else {
            var version = gfgDb.version;
        }

创建交易:

我们可以从我们的数据库实例中使用名为transaction的函数。

Syntax:
gfgDb.transaction(function (tx) {

            });

这里, gfgDb是我们的数据库实例,tx 是我们将用于即将进行的操作的事务对象。如果任何操作抛出错误,事务将被回滚。使用事务可以轻松管理错误日志。

执行查询:

要执行查询,您使用 database.transaction()函数。它有一个参数,执行查询如下:

var gfgDb = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);   
  
gfgDb.transaction(function (tx) {     
   tx.executeSql('CREATE TABLE IF NOT EXISTS CLASS (id unique, class)');   
});  

上面的代码将在 'gfgDb' 数据库中创建一个名为 CLASS 的表。

插入操作:

要按如下方式在表中创建条目 -



var gfgDb = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);  

gfgDb.transaction(function (tx) {  
  tx.executeSql('CREATE TABLE IF NOT EXISTS CLASS (id unique, class)');  
  tx.executeSql('INSERT INTO CLASS (id, class) VALUES (1, "First")');  
  tx.executeSql('INSERT INTO CLASS (id, class) VALUES (2, "Second")');  
}); 

executeSql的第二个参数将字段数据映射到查询,如下所示:

var id="1";
var text="First";

tx.executeSql('INSERT INTO CLASS (id, text) VALUES (?, ?)', [id, text]);

这里,.id 和 text 是外部变量, executeSql将数组参数中的每个项目映射到“?”。

读取操作:

要读取已经存在的记录,我们使用回调:

var gfgDb = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);  

db.transaction(function (tx) { 
   tx.executeSql('CREATE TABLE IF NOT EXISTS CLASS (id unique, class)');
   tx.executeSql('INSERT INTO CLASS (id, class) VALUES (1, "First")'); 
   tx.executeSql('INSERT INTO CLASS (id, class) VALUES (2, "Second")'); 
});  

db.transaction(function (tx) { 
   tx.executeSql('SELECT * FROM CLASS', [], function (tx, results) { 
      var len = results.rows.length, i; 
      msg = "

Found rows: " + len + "

"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++) { alert(results.rows.item(i).class ); } }, null); });

回调接收事务对象和结果对象。结果对象包含一个行对象,它有一个长度,但要到达单个行,将使用results.rows.item(i) ,其中 i 是行的索引。

示例 1:

HTML
   
    
    
      
      
         
      
      
      
      
Status Message
          


HTML
   
    
    
      
      
         
      
      
      
      
Status Message
          


输出:

示例 2:

HTML

   
    
    
      
      
         
      
      
      
      
Status Message
             

输出: