`
yy232
  • 浏览: 11853 次
  • 性别: 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如果对前台有兴趣,那就专攻前台吧

相关推荐

Global site tag (gtag.js) - Google Analytics