`
yy232
  • 浏览: 12127 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js操作数据库

    博客分类:
  • js
阅读更多
不知道怎么回事,自己竟然想用js操作sqlserver数据库,有了想法后,自己便快速的做起来,几个小时就写完了,当时只是完成了最基本的功能,有些难点解决不了,后来跑去问老是,他说我做的这个没有意义,因为没有人会用前台直接操作数据库,感觉有点受打击啊,不过自己好像一下被敲醒了一样,因为我是学java的,老是对一些前台效果比较感兴趣,很喜欢用js,但是java又学的不好,感觉有点本末倒置了,本来想实现sql语句关键字变色自动补全功能,我想我应该放弃了,还是好好学习java吧。
但是我还是想把我做的这一点点东西和大家分享一下,代码写的不好,更谈不是什么性能了,还望大家谅解。做这个的目的只是为了方便自己,减少打开数据库的次数。
不知道怎么不能上传文件了,等了好久也上传不来,只好把源代码放到这里了。

<html>
<script language="javascript">
var conn,rs,rs2;
var user_id,password,catalog;
var num=0,the,tf,td,tr;
var tableStr;//保存所查询的表,根据表名查出所有的列
//初始化
function init(){
db.style.display="none";
sqlcommand2.style.display="none";

}
//登录
function login(){
user_id=uname.value;
password=pwd.value;
  conn = new ActiveXObject("ADODB.Connection");
  try
  {
  conn.Open("Provider=SQLOLEDB.1; Data Source=localhost; User ID="+user_id+";Password="+password+"; Initial Catalog=master");
  }
     catch(err)
  {
   alert("登录失败");
return;
  }

  rs = new ActiveXObject("ADODB.Recordset");
  rs2 = new ActiveXObject("ADODB.Recordset");
  var sql="select name from sysdatabases";
  rs.open(sql, conn);

while(!rs.eof){
var o = document.createElement("option");
o.text=rs(0);
o.value=rs(0);
database.add(o);
rs.movenext();
}
  rs.close();
  sql="select * from sys.tables";
  rs.open(sql, conn);
   updateTb(rs); //得到当前数据库的所有表
  conn.close();
  login2.style.display="none";
  db.style.display="block";
  sqlcommand2.style.display="block";
  }

//得到新的conn
function getConn(db){
conn.Open("Provider=SQLOLEDB.1; Data Source=localhost; User ID="+user_id+";Password="+password+"; Initial Catalog="+db);
}

//执行sql语句
  function sqlcommand(sql){
  //验证sql
  var r = re(sql);
  if(r=="false"){
alert("无效sql语句");
return;
  }
  //得到新连接
  getConn(database.value);//->51
try{
rs.open(sql, conn);
if(r!="r4"){alert("执行成功");}//如果不是查询,则提示执行成功
}catch(err){
alert('操作失败');
conn.close();
return;
}
//如果是查询语句,将查询结果显示到table
if(r=="r4"){
//得到列名
// alert(tableStr);
sql= "select o.name as tbname,c.name as columnname from sys.tables as o join sys.columns as c on o.object_id=c.object_id where o.name='"+tableStr+"'"
rs2.open(sql,conn);
block(rs,rs2);//显示
rs2.close();
rs.close();
}
conn.close();

  }
  //将数据显示到table
  function  block(rs,rs2){
clearTable();//->95
    the=document.createElement("thead");
tf=document.createElement("tfoot");
tr=document.createElement("tr");
num=0;
while(!rs2.eof){
var th=document.createElement("th");
th.innerText=rs2(1);
tr.appendChild(th);
rs2.movenext();
num++;
}
the.appendChild(tr);
ta.appendChild(the);
ta.appendChild(tf);

while(!rs.eof){
tr=document.createElement("tr");
for(var i=0;i<num;i++){
td=document.createElement("td");
td.innerText=rs(i);
tr.appendChild(td);
}
rs.movenext();
tf.appendChild(tr);
}


  }
  //更新表的下拉菜单
  function updateTb(rs){
clearTb();
while(!rs.eof){
var o = document.createElement("option");
o.text=rs(0);
o.value=rs(0);
mytable.add(o);
rs.movenext();
}
  }
  //得到表集合
  function getTables(){
getConn(database.value);
var sql="select * from sys.tables";
    rs.open(sql, conn);
updateTb(rs);
rs.close();
conn.close();
  }

//清除table
  function clearTable(){
ta.deleteTHead();
ta.deleteTFoot();
  }
  //删除下拉框mytable
  function clearTb(){
mytable.length=0;
  }

//得到选中的字符串
  function getSelectionText() { 
  //window.getSelection().toString()适用于safari,opera,chrome,firefox
//document.selection.createRange().text适用于IE
if(window.getSelection) { 
return window.getSelection().toString(); 
} else if(document.selection && document.selection.createRange) { 
if(document.selection.createRange().text==""){
return textarea.innerText;
}
return document.selection.createRange().text;

return textarea.innerText;//如果没选择就返回所有
}
//用正则验证sql语句
function re(str){//功能未写完
var r1 = /insert\s+(into\s+)?\S+\s+values\((\s*\S+\s*)(\s*,\s*\S+\s*)*\);?$/;
var r2 = /delete\s+(from)?\s*(\S+)\s*(\s*where\s+\S+\s*)?(\s*and\s+\S+)*\s*$/;
var r3 = /update\s+\S+\s+set\s+\S+\s*(\s*,\s*\S+\s*)*(\s*where\s+\S+\s*)?(\s*and\s+\S+)*\s*$/;
var r4 = /\s*select\s+.+from\s+(\S+)\s*(\s+where\s+\S+)?\s*(and\s+\S+)*\s*$/;
var r5 =/create/;
var r6 =/drop/;
//var r7 =/给关键字改变颜色/
if(r1.test(str)){
return "r1";
}else if(r2.test(str)){
return "r2";
}else if(r3.test(str)){
return "r3";
}else if(r4.test(str)){
tableStr = str.replace(r4, "$1");
return "r4";
}else if(r5.test(str)){
return "r5";
}else if(r6.test(str)){
return "r6";
}else{
return "false"
}
}
//代码自动完成    就像eclipse里的alt+/
function myAutomatic(){
//等待实现

}
//关键字变色
function keywordsChangeColor(){ //等待实现

}

</script>





<body onload="init()">
<div id="login2">
<input type="text" id="uname">
<input type="password" id="pwd">
<input type="button" value="登录" onclick="login()">
</div>
<!--  显示所有的数据库和对应的表   -->
<div id="db">
选择数据库
<select id="database" onchange="getTables()">
</select>
<select id="mytable">
</select>
<input type="button" value="执行sql语句" onclick="sqlcommand(getSelectionText())">
</div>
<!--   写sql语句的地方   -->
<div id="sqlcommand2">
<textArea rows=20 cols=80 id="textarea" style="background-color:red">
</textArea>
</div>
<!--   显示查询出的数据   -->
<div id="view">
<table border="1" id="ta"">
</table>
</div>
<!--   代码自动完成的信息   -->
<div id="automatic">
</div>
</body>
<html>
  • 大小: 16.6 KB
  • 大小: 22.9 KB
  • 大小: 25.8 KB
2
11
分享到:
评论
6 楼 yy232 2011-11-16  
hjack315 写道
嗨~哥们,我挺你!
别被教条化思想限制了自己的思路,我们国人都过于刻板。
为什么只用后台去和数据库交互,谁说前台就不好了。
只是前人没有做所以国人也不敢做,国人要看着外国人的动作才动作。
我觉得你的思路就很独特,很有创意。
想学什么就学什么,别被教条限制了。
还有,运行了你的代码没有通过。
为什么没贴出来使用方法?

对了,还有就是浏览器的支持问题,我只针对ie,其他浏览器应该不行,会弹出一个允许ActiveX控件的提示,允许了应该就没问题了
5 楼 yy232 2011-11-16  
hjack315 写道
嗨~哥们,我挺你!
别被教条化思想限制了自己的思路,我们国人都过于刻板。
为什么只用后台去和数据库交互,谁说前台就不好了。
只是前人没有做所以国人也不敢做,国人要看着外国人的动作才动作。
我觉得你的思路就很独特,很有创意。
想学什么就学什么,别被教条限制了。
还有,运行了你的代码没有通过。
为什么没贴出来使用方法?

好久没上来了,刚才看到,回复晚了,谢谢支持,这都是好久以前写的了,现在没做这些玩意了,有时间做一下php,android。使用方法?以前我测试是可以通过的,直接全部复制,新建文本,保存为html文件,  重点是sqlserver数据库,你要是有兴趣的话,哪里出问题了,你截个图给我看看,我愿意帮你解决一下,虽然现在都忘记的差不多了
4 楼 hjack315 2011-11-11  
嗨~哥们,我挺你!
别被教条化思想限制了自己的思路,我们国人都过于刻板。
为什么只用后台去和数据库交互,谁说前台就不好了。
只是前人没有做所以国人也不敢做,国人要看着外国人的动作才动作。
我觉得你的思路就很独特,很有创意。
想学什么就学什么,别被教条限制了。
还有,运行了你的代码没有通过。
为什么没贴出来使用方法?
3 楼 rainsilence 2011-01-23  
对前台感兴趣的话,就放弃用微软专属的api,投身到w3c标准上来吧。。。
2 楼 yy232 2011-01-21  
还是好好做java吧
1 楼 snowflate_summer 2011-01-21  
LZ如果对前台有兴趣,那就专攻前台吧

相关推荐

    javascript操作数据库详解

    本文将深入探讨如何使用JavaScript操作数据库,主要涵盖以下几个方面: 1. **Node.js与数据库接口** Node.js的非阻塞I/O模型使其成为处理数据库查询的理想选择。它提供了多种数据库驱动,如MySQL的`mysql2`库、...

    JavaScript操作数据库

    JavaScript操作数据库JavaScript操作数据库

    js操作数据库.txt

    ### JavaScript操作数据库知识点详解 #### 一、概述 在现代Web开发中,JavaScript不仅可以用于前端页面的交互逻辑处理,还可以通过特定技术实现与后端数据库的交互。本篇将基于提供的`js操作数据库.txt`文件内容,...

    js操作数据库源码js操作数据库源码

    总之,JavaScript操作数据库涉及到Node.js环境、数据库连接库、ORM工具、SQL/NoSQL选择、异步处理和安全性等多个方面。开发者需要根据项目需求选择合适的工具和技术,并确保代码的安全性和性能。

    lsz.rar_js 操作数据库_js链接数据库

    在JavaScript的世界里,静态网页与数据库的交互是一个重要的技术环节,尤其在现代Web应用中,动态数据的展示和用户...通过实践和学习,你将能够熟练掌握JavaScript操作数据库的技巧,构建更加动态和交互丰富的Web应用。

    JavaScript操作数据库.ppt

    JavaScript操作数据库主要涉及的技术是利用ActiveX对象与数据库进行交互,特别是通过ADODB对象来实现。ADODB(ActiveX Data Objects)是微软提供的一个数据库访问技术,它允许JavaScript这样的脚本语言与各种数据库...

    js操作数据库,10多年工作经验总结

    js操作数据库 在这篇文章中,我们探讨了js操作数据库的相关知识点,包括异步编程、try…catch…finally语句、异步/事件处理和函数作为第一类对象等内容。 一、异步编程 异步编程是一个很复杂的主题,尤其是在Node...

    javascript操作数据库

    javascript是主要的网站开发脚本语言 , 动态网站都需要数据库 , 值得一看 , 谢谢支持!

    js操作数据库实现注册和登陆的简单实例

    自从node-js出现之后,不只是java,php等后端语言可以操作数据库,进行内容的增删改查,javascript简本语言同样具备了该项技能,而且在node下,js具备了很强的操作性和代码的阅读性,让晦涩难懂的代码变得更加的清晰...

    web UI插件 js插件 Jquery插件 JS 操作数据库

    很详细的插件集 包括ajaxComboBox 超链接提示 漂亮js表单验证 漂亮js弹出框 漂亮表单 漂亮的图片js浏览 消息通知 ACCESSdb-v0.9.2.zip JS 操作access数据库 jquery加载效果

    第18章 JavaScript操作数据库.ppt

    第18章 JavaScript操作数据库

    JS操作ACCESS数据库

    需要注意的是,这种方法仅在IE浏览器或使用IE内核的浏览器中有效,对于其他现代浏览器(如Chrome、Firefox),由于不支持ActiveXObject,因此无法直接使用JavaScript操作Access数据库。为了实现跨浏览器的解决方案,...

    js操作数据库.doc

    下面将详细探讨使用JavaScript操作MySQL、MongoDB和SQLite数据库的关键概念和步骤。 1. **MySQL数据库操作**: - **安装库**:首先,你需要通过npm(Node包管理器)安装`mysql`库。在命令行中运行`npm install ...

    JS操作数据库的实例代码

    ### 二、使用JavaScript操作数据库 接下来,我们将使用JavaScript客户端脚本语言来实现对数据库的操作。这里使用的是基于ActiveX对象的方式,适用于IE浏览器环境。需要注意的是,在现代Web开发中,这种直接使用...

    JavaScript操作SQLite数据库Demo

    除了Web SQL API,还可以使用像`sql.js`这样的库,它允许你在Node.js或浏览器中使用JavaScript操作SQLite数据库,无需依赖于特定的API。 为了验证数据是否正确存储,你可以使用SQLiteStudio等工具,将JavaScript...

    js 操作 access数据库

    然而,JavaScript也可以用来操作数据库,尽管这并不常见,特别是在处理像Access这样的桌面数据库时。在标题“js操作access数据库”中,我们讨论的是如何使用JavaScript与Microsoft Access数据库进行交互。 Access...

    JavaScript连接数据库实例

    这个实例将深入探讨如何利用JavaScript来连接和操作数据库。 在JavaScript连接数据库时,我们通常会使用服务器端的JavaScript环境,如Node.js,因为浏览器环境出于安全考虑,不支持直接访问数据库。Node.js提供了...

    javascript数据库大图片

    这里的"javascript数据库大图片"可能是指一系列利用JavaScript操作数据库的示例,尤其是处理大数据量或者图像数据的情况。在JavaScript中,我们可以借助WebSQL、IndexedDB或localStorage等技术来实现数据存储。 1. ...

Global site tag (gtag.js) - Google Analytics