Java Servlet - 显示列名

标签 java database servlets

<分区>

我一直在研究一个 Java Servlet,它从用户在 index.html 中输入的表中选择所有数据。但是我遇到了一个问题,因为我有一个具有许多不同 ID 的数据库,因此我还想在表中显示列名 - 现在它只显示没有任何列名的数据而且我似乎无法寻找解决方案或自己想出一个解决方案

开始.java:

package start;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Start
 */
@WebServlet("/Start")
public class Start extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public static void getColumnNames(ResultSet rs) throws SQLException {
        if (rs == null) {
          return;
        }
        ResultSetMetaData rsMetaData = rs.getMetaData();
        int numberOfColumns = rsMetaData.getColumnCount();


        for (int i = 1; i < numberOfColumns + 1; i++) {
          String columnName = rsMetaData.getColumnName(i);
          String tableName = rsMetaData.getTableName(i);
          System.out.println("column name=" + columnName + " table=" +     tableName);
    }
  }

/**
 * @see HttpServlet#HttpServlet()
 */
public Start() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse respond) throws ServletException, IOException {
    PrintWriter pw = respond.getWriter();
    respond.setContentType("text/html");
    String tb = request.getParameter("table");
    try {

        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/music","root","1234");
        Statement st = con.createStatement();
        System.out.println("connection established successfully!");
        ResultSet rs = st.executeQuery("SELECT * FROM " + tb);

        pw.println("<table border=1>");
        while (rs.next()) {
            pw.println("<tr><td>" + rs.getInt(1) + "</td>" + "<td>" + rs.getString(2) + "</td>" + "<td>" + rs.getString(3)
                    + "</td></tr>");
        }
        pw.println("</table>");
        pw.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    // TODO Auto-generated method stub
    // response.getWriter().append("Served at:
    // ").append(request.getContextPath());
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
 *      response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    }
}

结果如下: 1 任何帮助将不胜感激!

最佳答案

您应该使用 ResultSetMetaData 从结果中检索元数据。您将使用 ResultSetMetaData#g​​etColumnName(int)

检索列名称
ResultSetMetaData rsmd = rs.getMetaData();
pw.println("<table border=1>");
pw.println("<tr>");
for (int i = 1 ; i <= rsmd.getColumnCount() ; i++) {
    pw.println("<th>" + rsmd.getColumnName(i) + "</th>");
}
pw.println("</tr>");
while (rs.next()) {
    pw.println("<tr><td>" + rs.getInt(1) + "</td>" + "<td>" + rs.getString(2) + "</td>" + "<td>" + rs.getString(3)
            + "</td></tr>");
}
pw.println("</table>");

关于Java Servlet - 显示列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501101/

相关文章:

java - 从servlet请求java获取客户端IP地址

java - String 类型的值无法转换为 JSONObject

java - 如何立即关闭executorservice中的所有线程?

java - 如何在java代码中从<select multiple>检索多个选定的值?

mysql - 数据库设计 : Many tables VS One "long" table _ Performance-Wise?

php - 将多个月中的多个数据库表条目链接在一起

session - 复制 JSESSIONID cookie 时防止复制 session

java - 同一 Java 程序的多个编译实例

java - 带有 JPopupMenu 的 JComboBox 作为右键单击选项

sql - SQL Server 数据库中具有最大大小的 INT 类型