javascript写一个本地数据库支持SQL查询-SAAS本地化未来之窗行业应用跨平台架构

一、sql语句优点

数据查询灵活:

可以通过各种条件进行精确查询,比如使用 WHERE 子句指定特定的筛选条件,轻松从庞大的数据库中获取所需数据。例如,"SELECT * FROM employees WHERE department = 'Sales'" 可以快速找出销售部门的所有员工信息。

支持多表关联查询,能够从不同的表中提取相关数据进行整合分析。例如,通过 "JOIN" 操作可以将员工表和部门表关联起来,查询出每个员工所在部门的详细信息

二、代码

复制代码
/*
未来之窗 client db v1
*/
var CyberWin_MS=function(table , dbname){
    var database_name=dbname;
	var table=table;
	var sql_p="";
	var sql_v="";
	var condition="";

	console.log(dbname);

	this.database_name=dbname;
	this.table=table;

	this.condition="";//2024-7-17 默认值
	  

	this.test=function() {
		console.log("测试"+database);
	}

	this.createTable=function() {
	

	}

this.insert = function () {
		 
}

this.query = function (sql,callback) {
	 	var 未来之窗数据库=this.database_name+"AAAA"+this.table;
}




this.update = function (id, name) {
	 
}
this.del = function (id) {
	 
}

	this.dropTable = function () {
	 
	}


		//
	this.exec=function(sql,callback) {
	 
	}

	//
	this.add = function(cyberobj,callback){
		
		//console.log(cyberobj);
		//JSON.stringify(obj);
		var 未来之窗数据库=this.database_name+"AAAA"+this.table;
		window.localStorage.setItem(`${未来之窗数据库}`, JSON.stringify(cyberobj));
		/*
		//console.log(typeof cyberarray);
		// console.log("add结果:"+cyberobj.length);
		sql_p="insert into "+table +"(";
		sql_v="values ( ";
		
		for(var key in cyberobj){
		  //int32View[i] = i*2;
		   console.log(key);
		   console.log(cyberobj[key]);

		   sql_p=sql_p+key+"  ,"

		   sql_v=sql_v+"'"+cyberobj[key]+"',"
		}
		sql_v = sql_v.substring(0,sql_v.length-1);
		sql_p = sql_p.substring(0,sql_p.length-1);
		sql_v=sql_v +")";
		sql_p=sql_p +")";

		var sql=sql_p+sql_v;

		//console.log(sql_p);
		//console.log(sql_v);
		//console.log(sql);

		dataBase.transaction(function (tx) {
		tx.executeSql(sql,[],
		function () { 
			//alert('添加数据成功'); 
			 callback(true);
		},
		function (tx, error) {
			//alert('添加数据失败: ' + error.message);
			 callback(error.message);
		} );
		});
		*/


	}

	 



	this.where = function (cyberobj){
		var where_str="";
		if(typeof(cyberobj)=='string'){
			this.condition=cyberobj;
			return ;
		
		}
		for(var key in cyberobj){
		  //int32View[i] = i*2;
		  

		   sql_p=sql_p+key+"  ,"

		   where_str=where_str+""+key+" = '"+cyberobj[key]+"',";
		}
		this.condition=where_str;

   }

   //
   this.find = function (callback) {
	   console.clear();
  // console.log("未来之窗数据库解码");
   //  console.log(this.condition);
	 var 未来之窗数据库_条件_解码 =  this._parseCondition(this.condition);
	 
	  //console.log(未来之窗数据库_条件_解码);

	  var 未来之窗数据库=this.database_name+"AAAA"+this.table;
	  var 未来之窗数据库数据str =	window.localStorage.getItem(`${未来之窗数据库}`);

	  未来之窗数据库数据 = eval("(" + 未来之窗数据库数据str + ")");

	   //console.log("未来之窗数据库数据");
        //console.log(未来之窗数据库数据);
	  //空值查询
	  console.log("============空值查询=============");
	  console.log(未来之窗数据库_条件_解码);
	  console.log("condition="+this.condition);
	   console.log(未来之窗数据库数据);
	  console.log("============空值查询=============");
	  if(未来之窗数据库_条件_解码 ==""){
		  console.log("空值查询");
		  if(typeof callback === "function"){ // 如果传入的参数func是函数
			//2024-7-16 
		      callback("wlzc", 未来之窗符合条件数据);
	       }
		  return 未来之窗数据库数据;

	  }
 
	  
	   //  callback(tx, error);
	    const 未来之窗符合条件数据 = [];
	    for (const dataone of 未来之窗数据库数据) {

			//console.log("dataone=巡逻数值=>");
			//console.log(dataone);

			for (const cond条件 of 未来之窗数据库_条件_解码) {

				//field, operator, value
				console.log("未来之窗数据库数据==>"+cond条件.field+ " operator="+cond条件.operator+" value="+cond条件.value);

				if(dataone[cond条件.field]){
				
				    var 巡逻数值 =""+dataone[cond条件.field];

				   console.log("未来之窗数据库数据=巡逻数值=>"+巡逻数值);
				   if(巡逻数值.includes(cond条件.value)==true){
					    console.log("存在符合=>"+cond条件.field);
						未来之窗符合条件数据.push(dataone);

				   }else{
					    console.log("存在不符合=>"+cond条件.field+",查找;"+cond条件.value);
				   }

				}else{
					 console.log("不存在这个=>"+cond条件.field);
				}


	       }

	    }

		

		
		if(typeof callback === "function"){ // 如果传入的参数func是函数
			//2024-7-16 
		  callback("wlzc", 未来之窗符合条件数据);
	   }

		return 未来之窗符合条件数据;
	 
}

  this.delete = function (callback) {
 
  }


   this._parseCondition = function (whereClause) {

	   whereClause=""+whereClause;

	    if(whereClause == ""){
			//2024-7-17 判定无条件
			return "";
		}
	     
          // 去除前后空格
		  whereClause = whereClause.trim();

		  // 按逻辑运算符分割
		  const conditions = whereClause.split(/\s*(AND|OR)\s*/gi);

		 // console.log("未来之窗数据库解码conditions====");
		//	console.log(conditions);


		  const parsedConditions = [];

		  for (const condition of conditions) {
			// 提取字段名和操作符
			//const match = condition.match(/(\w+)\s*([=<>!]+)\s*(\w+)/);
		  //const match = condition.match(/(\w+)\s*([=<>!|like]+)\s*(\w+)/);
		   //	const match = condition.match(/(\w+)\s*([=<>!|like]+)\s*(\w+)/);
			///^[\w\u4e00-\u9fff]+$/  中文操作
			const match = condition.match(/(\w+)\s*([=<>!|like]+)\s*([\w\u4e00-\u9fff]+)/);

		//	console.log("未来之窗数据库解码condition");
			//console.log(condition);

			if (match) {
			  const field = match[1];
			  const operator = match[2];
			  const value = match[3];

			  parsedConditions.push({ field, operator, value });
			}
		  }

		  return parsedConditions;
  }

 

}
相关推荐
时光轻浅,半夏挽歌7 分钟前
python不同格式文件的读写方式(json等)
python·json
jiayong2322 分钟前
Redis面试深度解析
数据库·redis·面试
思成不止于此26 分钟前
【MySQL 零基础入门】DQL 核心语法(四):执行顺序与综合实战 + DCL 预告篇
数据库·笔记·学习·mysql
weixin_462446231 小时前
SpringBoot切换Redis的DB
数据库·spring boot·redis
哇哈哈&1 小时前
安装wxWidgets3.2.0(编译高版本erlang的时候用,不如用rpm包),而且还需要高版本的gcc++19以上,已基本舍弃
linux·数据库·python
雨中飘荡的记忆1 小时前
HBase实战指南
大数据·数据库·hbase
数据库学啊1 小时前
车联网时序数据库哪家好
数据库·时序数据库
Luna-player3 小时前
在javaweb项目中,在表中的数据中什么是一对一,一对多,多对多
数据库·oracle
一 乐3 小时前
家政管理|基于SprinBoot+vue的家政服务管理平台(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot
Macbethad3 小时前
工业触摸屏技术指南:选型、难点与实战解决方案
服务器·前端·数据库