利用HTML+WEBSQL(sqlite)完成创建数据库,完成对数据的增删改查(使用原生JS编写)

前端和数据

在日常编写一些页面的时候总希望能够把“用户生产”的数据保存下来到数据库中。今天学习了如何用WEBSQL(可以理解为浏览器自带的SQLite数据库)进行数据的保存以及在前端页面中对数据库进行操作。

需要准备

一个支持使用WEBSQL的浏览器,本例使用的是Chrome。
首先一上来先把html里的元素写好,以及之后按钮对应的函数名等等

  <div>
      <table style=" width:100%">
		<input type="button" value="创建数据库JAY" onclick="createdb()" id="first"/>
		<input type="button" id="second" value="创建一个song表" onclick="createtable()"/>
		<input type="button" id="third" value="插入一首歌曲" onclick="insert()"/>
      </table>
  </div>
<div>
	歌曲名:<input type="text" id="inputsong" />
	喜欢人数:<input type="text" id="inputlove" />
<input type="button" id="insong" value="插入你写的歌" onclick="inputsong()"/>
</div>
<hr>
<div>
<input type="button" value="查询歌库" onclick="query()" id="query"/>	
</div>
<div>
<ul id="ul">
</ul>
</div>

JS部分

初始化和创建数据库

var db = openDatabase("JAY", "1.0", "it's to save jay'songs data!", 1024 * 1024); 
	function initDatabase() {
		//初始化数据库
	    var db = getCurrentDb();
	    if(!db) {
	        alert("对不起,浏览器不支持");
	        return;
	    }    
	    db.transaction(function (trans) {
	        trans.executeSql("create table if not exists Movie(title text null,url text null)", [], function (trans, result) {
	            
	        }, function (trans, message) {
	            alert(message);
	        });
	    }, function (trans, result) {
	    }, function (trans, message) {
	    });
	}
	//创建数据库
		first.onclick =function(){
			//打开数据库,或者直接连接数据库参数:数据库名称,版本,概述,大小
			if(db!=""){
				alert("ok");
			}
			return db;
		}

首先介绍一下
openDatabase() 方法对应的五个参数:
1.数据库名称 2.版本号 3.描述文本 4.数据库大小 5.创建回调
第五个参数,创建回调会在创建数据库后被调用。这里的代码比较简单,主要就是声明了db,创建了这个db(数据库)‘JAY’。此时通过F12查看资源
在这里插入图片描述
数据库已经被创建完毕,接下来就是创建表。

创建表

second.onclick=function(){
		db.transaction(function (context) {
		context.executeSql('CREATE TABLE song (name VARCHAR,love INT)');
	}, function (error) {
		console.log('创建表失败:[' + error.message + ']');
	}, function () {
		console.log('创建表成功');
	});
		}

这里的代码就比较显而易见了,transaction的中文意思是事务,这里要进行的就是数据库db的一个事务。具体内容,执行sql语句创建song表,以及设置其对应字段名。失败则返回创建表失败,成功则返回创建表成功。
在这里插入图片描述

插入数据

创建代码写死的数据
//往表里插入数据
		var a="说好不哭";
		var b="5461686"
		third.onclick=function(){
		db.transaction(function (context) {
		context.executeSql('INSERT INTO song (name,LOVE) VALUES (?,?)',[a,b]);//使用占位符的方法,再获取用户输入的信息即可
	}, function (error) {
		console.log('插入数据失败:[' + error.message + ']');
	}, function () {
		console.log('插入数据成功');
	});
		}
创建用户自己填写的数据
//往表里获取用户输入的数据
	insong.onclick=function(){
		var song = document.getElementById("inputsong").value;
		var love = document.getElementById("inputlove").value;
		db.transaction(function (context) {
			context.executeSql('INSERT INTO song (name,LOVE) VALUES (?,?)',[song,love]);//使用占位符的方法,再获取用户输入的信息即可
		}, function (error) {
			console.log('插入数据失败:[' + error.message + ']');
		}, function () {
			console.log('插入数据成功');
		});
	}

这两种方法的原理都是一样的,第二种只是通过dom操作获取到用户输入进来的value值后再通过占位符将sql语句完整后再执行。
在这里插入图片描述

查看数据

//查询数据库
	query.onclick=function(){
		  db.transaction(function (context) {
			context.executeSql('SELECT * FROM song', [], function (context, results) {
			var items = results.rows;
			for (i = 0; i < items.length; i++) {
				var item = items.item(i);
				var li=document.createElement('li');
				li.innerText=item.name;
				ul.append(li);
				console.log(li);
				// var t1=["t1","t2","t3"];
				// document.getElementById(t1[i]).innerText=item.name;	
			}
		
		});
	}, function (error) {
		console.log('查询数据失败:[' + error.message + ']');
	}, function () {
		console.log('查询数据成功');
	});
	}

因为不使用框架,使用原生js这个代码稍显笨拙,通过for循环创建对应数量的li标签,把歌名用innerText的方式赋值给li。然后将li标签append到ul中这样即可完成查看数据库中的name的全部数据。
在这里插入图片描述

总结

本次的练习主要是把前端页面和数据库练习起来,通过前端页面的元素操作数据库。

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C++语言和sqlite3库来创建数据库,并实现增、删、的代码示例: 首先,需要包含sqlite3.h头文件和iostream头文件 ```c++ #include <sqlite3.h> #include <iostream> ``` 接着,定义一个回调函数,用于处理询结果: ```c++ static int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ std::cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << std::endl; } std::cout << std::endl; return 0; } ``` 然后,在主函数中创建或打开数据库,并执行增、删、操作: ```c++ int main(int argc, char* argv[]){ sqlite3* db; char* zErrMsg = 0; int rc; // 创建或打开数据库 rc = sqlite3_open("test.db", &db); if( rc ){ std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl; return 0; }else{ std::cerr << "Opened database successfully" << std::endl; } // 创建表 const char* sql_create_table = "CREATE TABLE COMPANY(" "ID INT PRIMARY KEY NOT NULL," "NAME TEXT NOT NULL," "AGE INT NOT NULL," "ADDRESS CHAR(50)," "SALARY REAL );"; rc = sqlite3_exec(db, sql_create_table, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ std::cerr << "SQL error: " << zErrMsg << std::endl; sqlite3_free(zErrMsg); }else{ std::cerr << "Table created successfully" << std::endl; } // 插入数据 const char* sql_insert_data = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" "VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00 );"; rc = sqlite3_exec(db, sql_insert_data, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ std::cerr << "SQL error: " << zErrMsg << std::endl; sqlite3_free(zErrMsg); }else{ std::cerr << "Records created successfully" << std::endl; } // 数据 const char* sql_select_data = "SELECT * from COMPANY"; rc = sqlite3_exec(db, sql_select_data, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ std::cerr << "SQL error: " << zErrMsg << std::endl; sqlite3_free(zErrMsg); }else{ std::cerr << "Operation done successfully" << std::endl; } // 更新数据 const char* sql_update_data = "UPDATE COMPANY set SALARY = 25000.00 where ID=1; " "SELECT * from COMPANY"; rc = sqlite3_exec(db, sql_update_data, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ std::cerr << "SQL error: " << zErrMsg << std::endl; sqlite3_free(zErrMsg); }else{ std::cerr << "Total updated: " << sqlite3_changes(db) << std::endl; } // 删除数据 const char* sql_delete_data = "DELETE from COMPANY where ID=2; " "SELECT * from COMPANY"; rc = sqlite3_exec(db, sql_delete_data, callback, 0, &zErrMsg); if( rc != SQLITE_OK ){ std::cerr << "SQL error: " << zErrMsg << std::endl; sqlite3_free(zErrMsg); }else{ std::cerr << "Total deleted: " << sqlite3_changes(db) << std::endl; } sqlite3_close(db); return 0; } ``` 上述代码创建了一个名为“test.db”的数据库,并在其中创建名为“COMPANY”的表。接着,插入了几条记录,并询了所有记录。然后,更新了一条记录,并询了所有记录。最后,删除了一条记录,并询了所有记录。 注意:以上代码仅为示例,实际应用中需要根据具体情况进行修

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值