JSP 界面sql语句执行
来源:互联网 发布:淘宝女士太阳镜 编辑:程序博客网 时间:2024/06/06 02:46
在工作中,博主是外包,项目上生产之后,甲方会以各种理由不让你轻易改动数据库(包括查询),虽然大家会理解这种行为,毕竟为了稳定,但一旦生产报错,问题的排查也会很艰难,这时,如果给自己的项目留一个能查询sql的功能,会变得异常实用。下面就是我的内容:
- JSP页面
<div id="ac"> <div> <textarea id="sqlText" style="width:90%; padding:30px;" rows="20"></textarea> <input type="button" value="确定" onclick="showData(this)"/> </div> <br/> <br/> <br/> Result: <br/> <br/> <div id="csrNodeTemp"> <table> <tr style="background-color:#E0F2FE;"> <td> 1</td> <td></td> </tr> <tr> <td></td> <td></td> </tr> </table> </div></div><!-- 获得项目路径 --><c:set var="ctx" value="${pageContext.request.contextPath}" /><script type="text/javascript"> //刷新节点数据 function showData(obj){ var sData = $("#sqlText").val(); var randomnumber = Math.floor(Math.random()*100000); $.ajax({ type:"get", data:{ randomnumber:randomnumber, sqlStr:sData }, url:"${ctx}/common/querySyn/querySqlInfo", async:true, dataType:"text", succsess:function(data){ $("#csrNodeTemp").html(data); } }); }</script>
页面比较Low,仅仅是一个输入sql语句的textarea以及显示结果的table,输入sql语句后,点击确定按钮,执行sql(注意:sql语句末尾不用加";")。
- Controller
package cn.com.git.mar.intf;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import org.thinkee.common.web.controller.BaseController;import org.apache.commons.lang3.StringUtils;@Controller@RequestMapping(value="common/querySyn")public class SynQueryController extends BaseController{ @Autowired private IQueryDataService queryDataService; @RequestMapping(method=RequestMethod.GET,value="querySqlInfo") @ResponseBody public Object querySqlInfo(String sqlStr) throws Exception{ String result = ""; if(StringUtils.isNotEmpty(sqlStr)){ try{ result = queryDataService.querySQLHTMLResult(sqlStr); }catch(Exception e){ result = e.getMessage(); } } return result; } @RequestMapping(method=RequestMethod.GET,value="showPage") public ModelAndView showPage(){ ModelAndView m = new ModelAndView(); m.setViewName("report/report_query"); return m; }}
- Service
package cn.com.git.mar.intf;public interface IQueryDataService { public String querySQLHTMLResult(String sql) throws Exception;}
package cn.com.git.mar.intf;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;@Service@Transactionalpublic class IQueryDataServiceImpl implements IQueryDataService { @Autowired private JdbcTemplate jdbcTemplate; private static String PREFIX = "<table>"; private static String POSTFIX = "</table>"; @Override public String querySQLHTMLResult(String sql) throws Exception { Connection conn = null; PreparedStatement ps = null; try{ conn = jdbcTemplate.getDataSource().getConnection(); if(sql.toUpperCase().startsWith("SELECT")){ sql = checkQuerySql(sql); ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); ResultSetMetaData metaData = rs.getMetaData(); int colNum = metaData.getColumnCount(); //填充表头 StringBuffer strTitle = new StringBuffer(); strTitle.append("<tr align=\"center\" style=\"background-color:#E0F2FE;\"><td></td>"); for(int i=1;i<=colNum;i++){ strTitle.append("<td>"); strTitle.append(metaData.getColumnClassName(i)); strTitle.append("</td>"); } strTitle.append("</tr>"); //填充数据 int dataCount = 0; StringBuffer strData = new StringBuffer(); while(rs.next()){ dataCount++; strData.append("<tr align=\"center\">"); strData.append("<td>" + dataCount + "</td>"); for(int i=1;i<=colNum;i++){ if(rs.getObject(i)==null){ strData.append("<td></td>"); }else{ //标题名不超过40个字符 String data = rs.getObject(i).toString(); if(data.length() > 40){ data = data.substring(0,39); }else{ data = data.toString(); } strData.append("<td><label title='" + rs.getObject(i) + "'>" + data + "<label></td>"); } } strData.append("</tr>"); } return PREFIX + strTitle.toString() + strData.toString() + POSTFIX; }else{ ps = conn.prepareStatement(sql); int s = ps.executeUpdate(); return PREFIX + "<tr><td>执行成功,共影响行数:" + s + "</td></tr>" + POSTFIX; } }catch(Exception e){ throw e; } } private String checkQuerySql(String sql) { if(sql.toUpperCase().indexOf("ROWNUM")<0){ String sqlStr = "SELECT * FROM (" + sql + ") C WHERE ROWNUM<60"; return sqlStr; }else{ return sql; } }}
- 总结
代码都比较简单,但博主的代码在自己的项目里仅支持查询,一旦使用update等增删改类语句,虽然返回的结果是已修改,但数据库中并没有变动,且涉及到的表均被锁住,如果有阅读过的朋友知道如何修改请告知博主,博主将感激不尽
阅读全文
0 0
- JSP 界面sql语句执行
- jsp界面写入数据库时中文乱码(sql语句执行中文乱码)解决办法
- JSP中多条SQL语句同时执行
- SQL语句执行组件
- SQL语句执行顺序
- php执行sql语句
- 动态执行sql语句
- AIR执行SQL语句
- Jdbc执行sql语句
- sql语句执行原理
- sql 语句 执行顺序
- SQL语句执行分析
- sql语句批量执行
- SQL语句执行顺序
- SQL语句执行顺序
- 动态执行SQL语句
- sql语句执行顺序
- SQL执行语句大全
- java mysql 高性能批量处理 设置rewriteBatchedStatements
- Java byte数组转16进制字符串
- elasticsearch的准实时(near real-time)查询
- mouseover mouseout mouseenter mouseleave解释
- 很抱歉 程序无法在非mbr引导的分区上激活
- JSP 界面sql语句执行
- iOS NSDictionary JSON 相互转换
- C#去读不同版本的excel文件
- Haar小波变换的推演说明
- 基于jdbc 通用的增删改查
- Oracle中的where部分的各个条件的执行顺序(右->左)
- [总结]SCN详解
- Android USB通信(读取数据)
- 机器学习实战--K近邻学习