现在的位置: 首页 > 综合 > 正文

一个数据库简易浏览功能的实现

2013年10月08日 ⁄ 综合 ⁄ 共 8939字 ⁄ 字号 评论关闭

 <%--页面程序均须此包含标记--%>
<%@ page errorPage="/ErrorPage.jsp" contentType="text/html;charset=GBK"%>
<%request.setCharacterEncoding("GBK");    //设置请求字符集%>
<%@ page import="java.sql.*,java.io.*"%>
<%@ page import="landcenter.utility.*"%>
<%
//错误消息变量
String ErrMsg=""; 
//当前操作表名
String tablename=request.getParameter("tablename")==null?"":(String)request.getParameter("tablename");
//当前执行的sql
String sqlString=request.getParameter("sqlString")==null?"":(String)request.getParameter("sqlString");
//当前操作类型
String oprType=request.getParameter("oprType")==null?"":(String)request.getParameter("oprType");
//显示前几条记录
String recNum=request.getParameter("recNum")==null?"10":(String)request.getParameter("recNum");

%>

<script type="text/javascript" src="/js/main.js"></script>
<script>
/*
 * 功能:表数据排序操作
 * 参数:param 要排序的字段
 */
function orderOpr(param) {
 //排序
   var formObj = document.form1;

   formObj.orderby_field.value = param;
   if (formObj.orderby_sequence.value == "asc") {
    formObj.orderby_sequence.value = "desc";
   } else {
    formObj.orderby_sequence.value = "asc";
   }
  
   //获得当前的查询sql
   var curSql=document.getElementById("sqlString").value;

   var pos=curSql.indexOf("order");

   if (pos > 0){
     var newSql= curSql.substring(0,pos);     
     document.getElementById("sqlString").value=newSql+"order by "+param+" "+formObj.orderby_sequence.value;     
   } else {
     document.getElementById("sqlString").value=curSql+" order by "+param+" "+formObj.orderby_sequence.value;
   }
  
   formObj.action = "table.jsp";
   formObj.submit();
}
/*
 * 功能:对表进行更新操作
 * 参数:priName 主键名
 *  priValue 主键值
 *  columnName 更新的字段名
 *  columnValue 更新的字段值
 */
function updateData(priName,priValue,columnName,columnValue){

 var tablename="<%=tablename%>";
 var sqlStr="update "+tablename+ " set "+columnName+ "='"+columnValue +"' where "+priName+"='"+priValue+"'";
 //sqlStr=encodeURIComponent(sqlStr);
 if (confirm("确实要执行SQL语句:"+sqlStr+"吗?")==false){
  return;
 }
 var sUrl = "/WebTest?operation=update&sql="+sqlStr;
 var result=getExeURLRsult(sUrl);
 //alert(result.length);
 //result>0?alert('成功'):(result==0?alert('无此记录或SQL有错'):alert('失败'));
 result.length>2?alert("操作失败,原因可能如下/n"+result):(result>0?alert("修改成功!"):(result==0?alert('无此记录或SQL有错'):alert('失败')));
}
/*
 * 功能:对表进行删除操作
 * 参数:priName 主键名
 *  priValue 主键值
 */
function deleteData(priName,priValue){
 var tablename="<%=tablename%>";
 var sqlStr="delete "+tablename+ " where "+priName+"='"+priValue+"'";

 if (confirm("确实要执行删除操作吗?SQL语句为:"+sqlStr)==false){
  return;
 }
 var sUrl = "/WebTest?operation=update&sql="+sqlStr;
 var result=getExeURLRsult(sUrl);
 //alert(result.length);
 //result>0?alert('成功'):(result==0?alert('无此记录或SQL有错'):alert('失败'));
 result.length>2?alert("操作失败,原因可能如下/n"+result):(result>0?alert("删除成功!"):(result==0?alert('无此记录或SQL有错'):alert('失败')));
 form1.action = "table.jsp";
 form1.submit();
}

 

/*
 * 功能:执行sql操作
 */
function execSql(){
 var sqlStr=document.getElementById("sqlString").value;
 var tableName=document.getElementById("tabNameSel").value;
 var len=(sqlStr.split("select")).length-1;
 if (1==len){
  form1.action = "table.jsp";
  form1.submit();
 } else {

  if (confirm("确实要执行此操作吗?SQL语句为:"+sqlStr)==false){
   return;
  }
  var sUrl = "/WebTest?operation=update&sql="+sqlStr;
  var result=getExeURLRsult(sUrl);
  alert("执行结果:"+result);
  //result>0?alert('成功'):(result==0?alert('无此记录或SQL有错'):alert('失败'));
  //result.length>1?alert("操作失败,原因可能如下/n"+result):(result==0?alert("修改成功!"):alert('可能执行了非修改表结构的语句'));
  changeTable(tableName);
  form1.action = "table.jsp?oprType=alertTable";
  form1.submit();
 }
}

 

/*
 * 功能:改变当前操作表
 * 参数:tableName 表名
 */
function changeTable(tableName){
 var recNum=document.getElementById("recNum").value-1+2; //要显示的记录数
 
 if (""==recNum||null==recNum) { //如果要显示记录数输入为空则显示全部记录
  form1.sqlString.value="select * from "+tableName;
 } else {      //如果输入了显示记录书则按输入值显示记录
  form1.sqlString.value="select * from "+tableName+" where rownum<"+recNum;
 }
 form1.tablename.value=tableName;
}

 

/*
 * 功能:变化样式css
 * 参数:obj 操作对象
 *  cssName 样式名
 */
function changeCss(obj,cssName){ 
 obj.className=cssName;
 //obj.style.cssText="border:1;background:#F5FAFE;color:#0000ff;";
}

/*
 * 功能:快捷键设置
 * 参数:event事件源
 */
function acckey(ev){
 
 if (ev.keyCode==119){ //F8执行sql
  execSql();
 }
    //if ( ev.ctrlKey && ev.altKey && ev.keyCode == 79 )
    //{
    //    alert("aaaaa");
    //}
}

</script>
<html>
<style type="text/css">
<!--
.s1{border:1px solid #002142;background:#F5f3Fe;color:#ff0000;font-weight:600;}
.s2{border:0px }
* {font-family:"&#65533;&#65533;&#65533;&#65533;", "&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;", "&#65533;&#65533;&#65533;&#65533;_GB2312";font-size:12px;ackground-position:left top;}
body {margin:0; padding:0; background-color:#fff; font-size:12px; }
-->
</style>
<body onkeydown="acckey(event);">
<br>
<font style="font-size:14pt;color:red;font-weight:600;">数据库简易操作工具:</font> &nbsp; &nbsp; &nbsp; &nbsp;<a href="table.jsp"></a><hr>

<form name="form1" action="table.jsp" method=post>
<!--显示数据库中的所有表名 begin  -->
<table>
 <tr>
  
   <%
   try{  
  DBUtil dbUtila = new DBUtil();
  Connection con=dbUtila.getDefaultDBConnection();
    
     //查询数据库中所有表名
     Statement stmt=con.createStatement();
     String selTableSql="select * from tab";
     ResultSet rst=stmt.executeQuery(selTableSql);
  
  if (!rst.isAfterLast()) { //如果查询到数据则显示 表名下拉列表 否则不显示
   //生成表名下拉列表
     out.println("<td>当前表:<select name=tabNameSel id =tabNameSel onclick=changeTable(this.value) onchange=changeTable(this.value)>");
      String str=""; 
      while(rst.next()){
        str=rst.getString(1);
       
        //将下拉列表选择当前操作的表
        String isSelect="";
        if (str.equals(tablename)) {
       isSelect="selected";
        }
       
        out.println("<option value='"+str+"' "+isSelect+">"+str+"</option>");
      }
      out.println("</select></td>");
     }
     //关闭连接、释放资源
     rst.close();
     stmt.close();
     con.close();
 }catch(Exception e){
     ErrMsg=ErrMsg+"查询表名失败,原因可能是:"+e.getMessage();
     //e.printStackTrace();      
    }   
    %>
    <td>&nbsp;&nbsp;&nbsp;&nbsp;显示前<input id=recNum name=recNum type=text value='<%=recNum %>' style="text-align:right" size=3 onblur="changeTable(tabNameSel.value)">条记录  </td>
</tr>
</table>

<!--显示数据库中的所有表名 end  -->

 

<table>
  <tr>
   <td colspan=2><textarea name="sqlString" cols="100" rows="3" id="sqlString" ><%=sqlString %></textarea> </td>
 </tr>
 <tr>
   <td ><input type=button value="执行(F8)" onclick=execSql()></td><td  ><input type=hidden value=查&nbsp;&nbsp;&nbsp;&nbsp;询></td>
 </tr>
</table>
<%--当前操作表名--%>
<input type="hidden" name="tablename"  value="<%= tablename %>">
<%--当前操作类型--%>
<input type="hidden" name="oprType"  value="<%= oprType %>">
<%-- 供排序用--%>
<input type="hidden" name="orderby_field"  value="<%= request.getParameter("orderby_field")==null?"":request.getParameter("orderby_field").trim() %>">
<input type="hidden" name="orderby_sequence" value="<%= request.getParameter("orderby_sequence") ==null?"":request.getParameter("orderby_sequence").trim()%>">

<hr>

<!----------------------------------- 显示查询结果表格 begin ----------------------------->
<table border="0" cellspacing="1" bgcolor="#9933CC">
<%
if (null!=sqlString && !"".equals(sqlString)) {
   try {
      DBUtil dbUtilb = new DBUtil();
      Connection con=dbUtilb.getDefaultDBConnection();
      //查询列名
      Statement stmt=con.createStatement();
      ResultSet rst=stmt.executeQuery(sqlString);
      System.out.println("sqlString"+sqlString);
      ResultSetMetaData meta=rst.getMetaData();
     
      //打印输出列名
      int col=meta.getColumnCount();
      out.println("<tr bgcolor=#FFFFFF>");
      out.println("<td bgcolor=#acaaaa><input type=button name=chkbox value=操作></td>");
      for(int i=1;i<col+1;i++)
   {
         String columnName=meta.getColumnName(i);
         out.println("<td bgcolor=#acaaaa>");    
         out.println("<a href=javascript:orderOpr('"+columnName+"')>"+columnName+"</a>");
      // out.println("类型:&nbsp;");
      // out.println(typeToString(meta.getColumnType(i)));
         out.println("</td>");
   }     
      out.println("</tr>"); 
    
     
      //输出符合条件数据
      int recordCount=0;
      while(rst.next())
      {
        out.println("<tr bgcolor=#FFFFFF>");  
       
        String priName = meta.getColumnName(1);//当前表主键名     
        String strPri= rst.getString(1);//当前记录主键值
        //out.println("<td><input type=checkbox name=chkbox value="+strPri+"></td>");
        out.println("<td><input type=button name=chkbox value=del onclick=deleteData('"+priName+"','"+strPri+"')></td>");
        for(int i=1;i<col+1;i++)
        {  
          String columnName=meta.getColumnName(i);
          //String columnValue=getCol(rst,meta.getColumnType(i),i); //根据不同类型通过方法获得字段值
          String columnValue=rst.getString(columnName); //直接getString获得字段值
          out.println("<td><input class=s2 name="+columnName+recordCount+" type=text size=20 maxlength=4000 value='"+columnValue+"' onchange=updateData('"+priName+"','"+strPri+"','"+columnName+"',this.value) onclick=changeCss(this,'s1') onblur=changeCss(this,'s2')></td>");
        }
        out.println("</tr>");
        recordCount++;
      }
      out.println("查询到符合条件数据<b>"+recordCount+"</b>条,共显示了<b>"+col+"</b>个字段<br/>");
          
      //关闭连接、释放资源
      rst.close();
      stmt.close();
      con.close();
 } catch(Exception e) {
     //e.printStackTrace();
     ErrMsg=ErrMsg+"查询数据失败,原因可能是:"+e.getMessage();
    }
}   

%> 
</table>
<!----------------------------------- 显示查询结果表格 end ----------------------------->
</form>
<%
//输出错误信息
out.println("<br><b>"+ErrMsg+"</b>");
%>

</body>
</html>

抱歉!评论已关闭.