在一个jsp页面中编写一个sql查询,并使用另一个jsp页面

时间:2015-07-22 12:17:08

标签: java mysql jsp

我有两个jsp页面,一个是connector.jsp,另一个是select.jsp。我创建了数据库连接并尝试创建一个环境来运行connector.jsp中的任何查询。我在select.jsp编写了主要查询。我想将查询作为字符串传递给connector.jsp。我想只在connector.jsp中执行它。但我不知道我应该怎么做解决它。请帮我解决我的问题 这是我的代码
connector.jsp

<%@page import="java.util.HashMap"%>
<%@page import="java.sql.ResultSetMetaData"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%!
Connection connection = null;
Statement statement = null;
%>
<% Class.forName("org.postgresql.Driver"); %>

<%
    Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "root");
statement = connection.createStatement();
out.println("Database Connected Successfully.");

%>

<%!
    List select(String query) {
    List rows = new ArrayList();
    Map row = null;

    try {
        ResultSet resultSet = statement.executeQuery(query);
        ResultSetMetaData metaData = resultSet.getMetaData();
        int numColumns = metaData.getColumnCount();

        while (resultSet.next()) {
            row = new HashMap();
            for (int i = 1; i < numColumns + 1; i++) {
                row.put(metaData.getColumnName(i), resultSet.getObject(i));
            }
            rows.add(row);
        }

        resultSet.close();
    } catch (Exception e) {

    }

    return rows;
}

%>​

这是我的另一个页面,我写了我的sql主查询

selectquery.jsp

    <%@page import="java.util.List"%>
     <%@page import=" com.google.gson.Gson"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
     <jsp:include page="connector.jsp" />
    <%
        String query =("select distinct eid,ename,esalary from testemployee order by eid");

        Gson gson = new Gson();
        String json = gson.toJson(rows);
        out.print(json);
    %>

但显示错误。

3 个答案:

答案 0 :(得分:0)

您需要使用&lt; @include ....&gt;如果要从包含页面而不是jsp:include访问父页面中定义的变量。

在包含页面之前定义您的变量(即本例中的查询)。

答案 1 :(得分:0)

当你使用&lt;%! ..%&gt ;,表示您正在使用服务方法编写代码。您应该将整个代码包含在以下方法中。

    <%!
        public List select(String query) throws Exception{
            Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "root");
            Statement statement = connection.createStatement();
            out.println("Database Connected Successfully.");
            List rows = new ArrayList();
            Map row = null;
            ResultSet resultSet = statement.executeQuery(query);
            ResultSetMetaData metaData = resultSet.getMetaData();
            int numColumns = metaData.getColumnCount();
            while (resultSet.next()) {
                row = new HashMap();
                for (int i = 1; i < numColumns + 1; i++) {
                    row.put(metaData.getColumnName(i), resultSet.getObject(i));
                }
                rows.add(row);
            }
            resultSet.close();
            connection.close();
        }
    %>

使用&lt; @include file =“connector.jsp”&gt;包含此jsp。

嗯,使用JSP进行连接是不合适的。您应该创建一个类并声明连接实用程序方法init。

答案 2 :(得分:0)

您不得在JSP中编写与此数据库相关的代码。它的坏习惯。而是应该在托管bean或在JSP页面中用作bean的其他类中。