如何从页面输入SQL查询条件得到后台结果返回前台页面

转自: https://blog.csdn.net/yucongyuqian/article/details/77451578

使用Jsp编写网页并实现数据库的增删改查: https://blog.csdn.net/qq_32539825/article/details/70657340

JSP SQL语句大全: https://blog.csdn.net/fengyee_zju/article/details/25118683

开发一个用来执行sql的jsp页面: https://blog.csdn.net/qq_34928194/article/details/83412187

网页上直接sql查询操作数据库,并在网页上展示列表数据的工具页面: https://blog.csdn.net/yule117737767/article/details/83039509

 

 

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yucongyuqian/article/details/77451578
一、页面:因为查询的表不固定,所以表格需要自助生成(这是利用了“jqGrid”) 
注意:难点一、因为从数据库查询的表不同,所有前台页面遍历时的表头格式不固定 
难点二、数据库连接源 
若是不利用“jqGrid”也可以参考方法2. 
方法1.

<body>
<div>
    <nobr>
        <div>
            <form method="POST" action="/management/transactionFlow/informationQuery1">
                <div class="row">
                    <div class="col-md-10">
                            <textarea name="sql" STYLE="width: 1000px;height: 100px" id="sql"
                                      οnfοcus="ClearDefault(this)" placeholder="输入查询语句"
                                      οnblur="AddDefault(this)">${sql}</textarea>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-2">
                        <button type='submit' class="btn btn-primary btn-block" id="sure">确定
                        </button>
                    </div>
                    <div class="col-md-2">
                        <button id="back" type="reset" class="btn btn-primary btn-block">重置
                        </button>
                    </div>
                    <div class="col-md-2">
                        <p id="message" style="height: 28px" align="center"></p>
                    </div>
                </div>
            </form>
        </div>
    </nobr>
    <hr style="background-color: #0c0c0c;height: 1px;width: 2000px;">
    <%--引入jqGerid--%>
    <div>
        <table id="jqGrid"></table>
        <div id="jqGridPager"></div>
    </div>
    <content tag="customJavascript">
        <script type="text/ecmascript" src="/plugins/jqGrid-master/js/i18n/grid.locale-cn.js"></script>
        <script type="text/ecmascript" src="/plugins/jqGrid-master/js/jquery.jqGrid.js"></script>

        <script src="/plugins/datepicker/bootstrap-datepicker.js"></script>
        <script src="/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>

        <script type="text/javascript">

            //加载的主表(对表格进行遍历
            $(document).ready(function () {
               // var applicationId = $('#applicationId option:selected').val();
                $("#jqGrid").jqGrid({
                    url:"/management/transactionFlow/informationQuery",
                    mtype: "POST",
                    datatype: "json",
                    postData: {
                        'sql': function () {
                            return $('#sql').val().trim();}
                        },
                    styleUI: 'Bootstrap',
                    colModel: [
                        <c:forEach items="${list3}" var="user" varStatus="status">
                        {label: '${user}', name: '${user}', autowidth: true, sortable: false},
                        </c:forEach>
                    ],
                    viewrecords: true,
                    height: 400,
                    shrinkToFit: false,
                    rowNum: 10,
                    autowidth: true,
                    pager: "#jqGridPager",
                    page: 1
                }).trigger("reloadGrid");
                return false;
                var len = $("#jqGrid").getGridParam("width");
//                $("#jqGrid").setGridParam().hideCol("id");
                $("#jqGrid").setGridWidth(len);
            });
            //点击重置按钮
            $("#back").click(function () {
                $("#sql").empty();
            });
        </script>
    </content>
</div>
</body>

方法2.动态生成表格,但是分页还需自己在写一下

参考网址:https://q.cnblogs.com/q/73869/

var table = "<table id=\"date\" name=\"TableName\" class='table table-striped table-bordered table-hover' >";
table += "<thead><tr><th>" + "" + "</th>";
for (var i = 0; i < date.length; i++) {
table += "<th >" + date[i] + "</th>";
}
table += "</tr></thead><tbody>";
for (var j = 0; j < department.length; j++) {
table += "<tr>";
table += "<td>" + department[j] + "</td>";
for (var n = 0; n < date.length; n++) {
table += "<td>" + SeriesStr[0].data[n] + "</td>";
}
}
table += "</tr>";
table += "</tbody></table>";
$("#Exceltable").html(table);

效果: 


二、controller 
1)查询表头

 @RequestMapping(value = "transactionFlow/informationQuery1", method = RequestMethod.POST)

    public String informationQuery1(@ModelAttribute("form") @RequestParam (value = "sql") String sql, Model model) {
        List<String> list3 = new LinkedList<>();
        String query1 = customerLedgersService.query(sql);
        Map map = new HashMap();
        if (query1 != null) {

            String[] key = query1.split(";");
            for (int i = 0, len = key.length; i < len; i++) {
                list3.add(key[i]);
            }

            model.addAttribute("sql", sql);
            model.addAttribute("list3", list3);
            return "/complement/informationQuery";
        } else {
            model.addAttribute("sql", sql);

            return "/complement/informationQuery";
        }

    }

2)查询分页信息

@RequestMapping(value = "transactionFlow/informationQuery", method = RequestMethod.POST)
    @ResponseBody
    public GridData informationQuery(@RequestParam(value = "sql", required = false) String sql,
                                     @RequestParam(value = "page", required = false) Integer page,
                                     @RequestParam(value = "rows", required = false) Integer rows
    ) {
        List list7 = new LinkedList<>();
        String queryValue = null;

        String records1 = customerLedgersService.query1(sql);
        int records = Integer.parseInt(records1);
        GridData result = new GridData();

        String listTotal = customerLedgersService.query2(sql, page, rows);
        String query2 = null;
        List<String> list6 = new ArrayList<>();
        List<String> list5 = new ArrayList();
        if (listTotal != null) {
            String[] keyq3 = listTotal.split("%");
            for (int i = 0, len = keyq3.length; i < len; i++) {
                list6.add(keyq3[i]);
            }
            for (int m = 0; m < list6.size(); m++) {
                queryValue = list6.get(m);
                String[] value = queryValue.split(";");
                List<String> list = Arrays.asList(value);
                ListIterator<String> li = list.listIterator();
                while (li.hasNext()) {
                    Object obj = li.next();
                    if (obj.equals("0E-8")) {
                        li.set("0.00000000");
                    }
                    if (obj.equals("null")) {
                        li.set("");
                    }
                }
                list7.add(list);

            }
        }
        long totaPage = records % rows == 0 ? records / rows : records / rows + 1;
        result.setPage(page);
        result.setRecords(records);
        result.setTotal((int) totaPage);
        if (list7 != null) {
            result.getRows().addAll(list7);
        }
        return result;
    }

三、dao层(利用了JDBC原理) 
需要考虑的是数据库连接问题

@Repository
public class QueryDaoImpl implements QueryDao {
    private static Logger logger = LoggerFactory.getLogger(QueryDaoImpl.class);

    @Override
    public String selectSql(String sql) {
        DataSource ds = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        StringBuffer sb = new StringBuffer();
        int index = 1;
        //1 获得连接
        try {

            if(sql == null){
                return null;
            }

            InitialContext initialContext = new InitialContext();
            ds = (DataSource) initialContext.lookup("jdbc/account-structure");
            if (ds != null) {
                conn = ds.getConnection();
            }
            if(!sql.contains(";")){
                sql=sql+";";
            }
            if(!sql.contains("limit") && !sql.contains("LIMIT")){
                if(sql.contains(";")){
                    sql = sql.replaceAll(";", "");
                }
                sql = sql + " limit 0, 1;";
            }
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            List<LinkedHashMap<String, Object>> values = new ArrayList<>();
            ResultSetMetaData rsmd = rs.getMetaData();
            LinkedHashMap<String, Object> map = null;
            while (rs.next()) {
                //把一条记录放入Map中
                map = new LinkedHashMap<String, Object>();
                for (int i = 0; i < rsmd.getColumnCount(); i++) {
                    String columnLabel = rsmd.getColumnLabel(i + 1);
                    Object value = rs.getObject(i + 1);
                    map.put(columnLabel, value);
                }
                values.add(map);
            }

            if (values.size() > 0) {
                for (Map<String, Object> m : values) {
                    Set<String> set = m.keySet();
                    for (String s : set) {
                        sb.append(s + ";");
                    }
                }

            }
            return sb.toString();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //6关闭资源
//            JDBCUtils.close(conn, pstmt, rs);
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                try {
                    pstmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                try {
                    rs.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
        }
        return null;
    }


    @Override
    public String selectSql1(String sql) {
        DataSource ds = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        StringBuffer sb = new StringBuffer();
        int index = 0;
        //1 获得连接
        try {

            if(sql == null){
                return null;
            }

            InitialContext initialContext = new InitialContext();
            ds = (DataSource) initialContext.lookup("jdbc/account-structure");
            if (ds != null) {
                conn = ds.getConnection();
            }
            if(!sql.contains(";")){
                sql=sql+";";
            }
            if(!sql.contains("limit") && !sql.contains("LIMIT")){
                if(sql.contains(";")){
                    sql = sql.replaceAll(";", "");
                }
                sql = sql + "  limit 0, 5000;";
            }
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            List<LinkedHashMap<String, Object>> values = new ArrayList<>();
            ResultSetMetaData rsmd = rs.getMetaData();
            LinkedHashMap<String, Object> map = null;
            while (rs.next()) {
                //把一条记录放入Map中
                map = new LinkedHashMap<String, Object>();
                for (int i = 0; i < rsmd.getColumnCount(); i++) {
                    String columnLabel = rsmd.getColumnLabel(i + 1);
                    Object value = rs.getObject(i + 1);
                    map.put(columnLabel, value);
                }
                values.add(map);
            }

            if (values.size() > 0) {
                for (Map<String, Object> m : values) {
                    Set<String> set = m.keySet();
                    for (String s : set) {
                        sb.append(s + ";");
                    }
                    sb.append("|"+index++);
                }

            }

            return String.valueOf(index);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //6关闭资源
//            JDBCUtils.close(conn, pstmt, rs);
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                try {
                    pstmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                try {
                    rs.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
        }
        return null;
    }

    @Override
    public String selectSq2(String sql, Integer page, Integer rows) {
        DataSource ds = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        StringBuffer sb = new StringBuffer();
        StringBuffer sb1 = new StringBuffer();
        int index = 1;
        //1 获得连接
        try {

            InitialContext initialContext = new InitialContext();
            ds = (DataSource) initialContext.lookup("jdbc/account-structure");
            if (ds != null) {
                conn = ds.getConnection();
            }
            String sql1=null;
            StringBuffer sql2=null;
            if(!sql.contains(";")){
                sql=sql+";";
            }
            sql1=sql.substring(0,sql.length()-1);

            sql2=sb1.append(sql1+" "+"limit"+" "+"?"+","+"?;");
            pstmt = conn.prepareStatement(sql2.toString());
            int startIndex = (page - 1) * rows;
            pstmt.setInt(1,startIndex);
            pstmt.setInt(2,rows);
            rs = pstmt.executeQuery();
            List<LinkedHashMap<String, Object>> values = new ArrayList<>();
            ResultSetMetaData rsmd = rs.getMetaData();
            LinkedHashMap<String, Object> map = null;
            while (rs.next()) {
                //把一条记录放入Map中
                map = new LinkedHashMap<String, Object>();
                for (int i = 0; i < rsmd.getColumnCount(); i++) {
                    String columnLabel = rsmd.getColumnLabel(i + 1);
                    Object value = rs.getObject(i + 1);
                    map.put(columnLabel, value);
                }
                values.add(map);
            }

            if (values.size() > 0) {
                for (Map<String, Object> m : values) {
                    Set<String> set = m.keySet();

                    for (String s : set) {
                        sb.append(m.get(s) + ";");
                    }
                    sb.append("%");
                }
            }
            return sb.toString();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
                try {
                    pstmt.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
                try {
                    rs.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
        }
        return null;
    }
}

查询页面: 


输入SQL语句:SELECT * from ledgers_entity where customer_business_id=’180050602775019520’; 
查询结果: 


--------------------- 
作者:yucongyuqian 
来源:CSDN 
原文:https://blog.csdn.net/yucongyuqian/article/details/77451578 
版权声明:本文为博主原创文章,转载请附上博文链接!

当用户在登录页面输入用户名和密码并点击登录按钮时,jsp页面会将这些数据发送到后台进行验证。后台会检查这些数据是否正确,并返回相应的结果。如果验证成功,后台返回一个成功的消息,否则会返回一个错误消息。在jsp页面中,可以通过ajax技术来异步发送请求并获取后台返回数据,然后根据返回的结果来进行相应的处理。以下是一个简单的示例代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login Page</title> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script> $(document).ready(function() { $("#loginBtn").click(function() { var username = $("#username").val(); var password = $("#password").val(); $.ajax({ url: "login.jsp", type: "POST", data: {username: username, password: password}, success: function(result) { if (result == "success") { window.location.href = "home.jsp"; } else { $("#errorMsg").text(result); } } }); }); }); </script> </head> <body> <h1>Login Page</h1> <form> <label>Username:</label> <input type="text" id="username" name="username"><br> <label>Password:</label> <input type="password" id="password" name="password"><br> <input type="button" id="loginBtn" value="Login"><br> <div id="errorMsg"></div> </form> </body> </html> 在后台的login.jsp页面中,可以通过request.getParameter()方法来获取前台传递过来的参数,并进行相应的验证。以下是一个简单的示例代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String username = request.getParameter("username"); String password = request.getParameter("password"); String errorMsg = ""; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'"); if (rs.next()) { out.print("success"); } else { errorMsg = "Invalid username or password!"; out.print(errorMsg); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } %> 在这个示例中,我们使用了MySQL数据库来存储用户的信息。当用户输入用户名和密码并点击登录按钮时,前台会将这些数据发送到后台的login.jsp页面。在login.jsp页面中,我们首先获取前台传递过来的参数,然后连接数据库并查询用户信息。如果查询结果不为空,则说明用户名和密码正确,我们返回一个成功的消息;否则,我们返回一个错误消息。在前台jsp页面中,我们通过ajax技术来异步发送请求并获取后台返回数据,然后根据返回的结果来进行相应的处理。如果返回的是成功的消息,则跳转到主页;否则,显示错误消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值