Jsp 使用struts2在数据库上运行查询

Jsp 使用struts2在数据库上运行查询,jsp,struts2,Jsp,Struts2,我是struts2编程新手。我想创建一个可以访问mysql数据库并在jsp页面上显示其结果的项目。我能够访问数据库并从中获取所需的值 我在JSP页面上显示它们时遇到了问题。 项目应该为任何随机查询运行,因此我不知道结果集中的列数。如何在生成的JSP页面中显示它 form.jsp <%@ page import="java.util.*,java.io.*;" language="java" contentType="text/html; charset=ISO-8859-1" pageEn

我是struts2编程新手。我想创建一个可以访问mysql数据库并在jsp页面上显示其结果的项目。我能够访问数据库并从中获取所需的值

我在JSP页面上显示它们时遇到了问题。 项目应该为任何随机查询运行,因此我不知道结果集中的列数。如何在生成的JSP页面中显示它

form.jsp

<%@ page import="java.util.*,java.io.*;" language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s2"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Get User Data</title>
</head>
<body bgcolor="#AABBCC">
<s2:form action="DBConnect">
<table>
<tr>
    <td><s2:textfield type="text" label="JDBC Driver" name="jdbcDriver" size="30" value="com.mysql.jdbc.Driver"></s2:textfield> </td>
</tr>
<tr>
    <td><s2:textfield type="text" label="JDBC URL" name="serverUrl" size="30" value="jdbc:mysql://localhost:3306/WorldDB" ></s2:textfield></td>
</tr>
<tr>
    <td><s2:textfield type="text" label="User Name" name="username" size="30" value="root" ></s2:textfield></td>
</tr>
<tr>
    <td><s2:textfield type="password" label="Password" name="password" size="30" value="i@Ap$_x7" ></s2:textfield></td>
</tr>
<tr>
    <td><s2:textfield type="text" label="Query" name="query" size="30" value="SELECT * FROM City;" ></s2:textfield></td>
</tr>
<tr>
    <td><s2:submit type="submit" name="submit_query" value="Submit" ></s2:submit></td>
</tr>
</table>
</s2:form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Results</title>
</head>
<body>
<h2 align="justify">Query Results</h2>
<table>

<tr>
<s2:iterator value="tableHeader">
    <td> <s2:property/> </td>
</s2:iterator>
</tr>

<s2:iterator value="tableData">
    <tr> 
    <s2:iterator value="columnCount">
        <td> <s2:property value=""/> </td>
    </s2:iterator>
    </tr>
</s2:iterator>

</table>
</body>
</html>

获取用户数据
struts.xml

<?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" extends="struts-default">
        <action name="DBConnect" class="com.appperfect.training.DBConnect">
            <result name="success">/showDB.jsp</result>
        </action>
    </package>
</struts>

/showDB.jsp
DBConnect.java

import java.sql.*;
import java.util.*;
import com.opensymphony.xwork2.ActionSupport;

public class DBConnect extends ActionSupport {
    private static final long serialVersionUID = 1L;

    private static String SUCCESS = "success";
    private static String FAILED = "failed";

    List<String> tableHeader = new ArrayList<String>();
    List<String> tableData = new ArrayList<String>();
    int columnCount = 0;

    private String jdbcDriver, serverURL, username, password, query;

    // Setter Methods
    public void setJdbcDriver(String driver) {
        this.jdbcDriver = driver;
    }

    public void setServerUrl(String url) {
        this.serverURL = url;
    }

    public void setUsername(String uname) {
        this.username = uname;
    }

    public void setPassword(String pass) {
        this.password = pass;
    }

    public void setQuery(String que) {
        this.query = que;
    }

    // Getter Methods
    public String getJdbcDriver() {
        return jdbcDriver;
    }

    public String getServerUrl() {
        return serverURL;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public String getQuery() {
        return query;
    }

    public List<String> getTableData() {
        return tableData;
    }

    public void setTableData(List<String> tData) {
        this.tableData = tData;
    }

    public List<String> getTableHeader() {
        return tableHeader;
    }

    public void setTableHeader(List<String> tHead) {
        this.tableHeader = tHead;
    }

    public int getColumnCount() {
        return columnCount;
    }

    @Override
    public String execute() throws Exception {

        String jdbcDriver, serverUrl, username, password, query;

        Connection con = null;
        Statement statement = null;
        ResultSet resultSet = null;
        ResultSetMetaData rsmd = null;

        jdbcDriver = getJdbcDriver();
        serverUrl = getServerUrl();
        username = getUsername();
        password = getPassword();
        query = getQuery();

        System.out.println(jdbcDriver + "   " + serverUrl + "   " + username
                + "   " + password + "   " + query);

        try {

            Class.forName(jdbcDriver);
            System.out.println("Attempting to establish connection to DB...");
            con = DriverManager.getConnection(serverUrl, username, password);
            System.out.println("Successfully connected to DB...");

            statement = con.createStatement();
            resultSet = statement.executeQuery(query);
            rsmd = resultSet.getMetaData();
            columnCount = rsmd.getColumnCount();

            String temp = null;
            int i = 1;

            for (i = 1; i <= rsmd.getColumnCount(); i++)
                tableHeader.add(rsmd.getColumnName(i));

            while (resultSet.next()) {
                temp = "";
                for (i = 1; i <= columnCount; i++) {
                    temp += resultSet.getString(i) + ",";
                }
                tableData.add(temp);
            }

            for (i = 0; i < tableHeader.size(); i++) {
                System.out.println(tableHeader.get(i));
            }

            for (i = 0; i < tableData.size(); i++) {
                System.out.println(tableData.get(i));
            }

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        return SUCCESS;
    }

}
import java.sql.*;
导入java.util.*;
导入com.opensymphony.xwork2.ActionSupport;
公共类DBConnect扩展了ActionSupport{
私有静态最终长serialVersionUID=1L;
私有静态字符串SUCCESS=“SUCCESS”;
私有静态字符串FAILED=“FAILED”;
List tableHeader=new ArrayList();
List tableData=new ArrayList();
int columnCount=0;
私有字符串jdbcDriver、服务器URL、用户名、密码、查询;
//Setter方法
公共void setJdbcDriver(字符串驱动程序){
this.jdbcDriver=driver;
}
公共无效设置服务器url(字符串url){
this.serverURL=url;
}
public void setUsername(字符串uname){
this.username=uname;
}
公共无效设置密码(字符串传递){
this.password=pass;
}
公共void setQuery(字符串que){
this.query=que;
}
//吸气剂法
公共字符串getJdbcDriver(){
返回jdbc驱动程序;
}
公共字符串getServerUrl(){
返回serverURL;
}
公共字符串getUsername(){
返回用户名;
}
公共字符串getPassword(){
返回密码;
}
公共字符串getQuery(){
返回查询;
}
公共列表getTableData(){
返回表格数据;
}
公共无效setTableData(列表tData){
this.tableData=tData;
}
公共列表getTableHeader(){
返回表头;
}
公共void setTableHeader(列表tHead){
this.tableHeader=tHead;
}
public int getColumnCount(){
返回列计数;
}
@凌驾
公共字符串execute()引发异常{
字符串jdbcDriver、服务器URL、用户名、密码、查询;
连接con=null;
Statement=null;
ResultSet ResultSet=null;
ResultSetMetaData rsmd=null;
jdbcDriver=getJdbcDriver();
serverUrl=getServerUrl();
username=getUsername();
password=getPassword();
query=getQuery();
System.out.println(jdbcDriver+“”+服务器URL+“”+用户名
+“”+密码+“”+查询);
试一试{
类forName(jdbcDriver);
System.out.println(“试图建立到数据库的连接…”);
con=DriverManager.getConnection(服务器URL、用户名、密码);
System.out.println(“成功连接到数据库…”);
statement=con.createStatement();
resultSet=语句.executeQuery(查询);
rsmd=resultSet.getMetaData();
columnCount=rsmd.getColumnCount();
字符串temp=null;
int i=1;

对于(i=1;itableData是字符串的集合,下面应该可以使用

<s2:iterator value="tableData">
    <tr>
        <td><s2:property/></td>
    </tr>
</s2:iterator>
并展示它

<s2:iterator value="tableData">
    <tr>
        <s2:iterator>
            <td><s2:property/></td>
        </s2:iterator>
    </tr>
</s2:iterator>

在jsp页面中显示您的代码,以及如何从struts获取值(可能是操作)
<s2:iterator value="tableData">
    <tr>
        <s2:iterator>
            <td><s2:property/></td>
        </s2:iterator>
    </tr>
</s2:iterator>