我有个表,表是动态创建的(通过JDBC的SQL语句创建),所以没有对应的实体类来封装数据,要通过什么样的方式才能从数据库中取出数据,然后显示在JSP中。
我纠结好久了,我想要实现的代码,先谢过了
  

解决方案 »

  1.   

    你通过jdbc创建表都行,那就通过jdbc来读取呗,select * from mytable;用list来封装,ResultSetMetaData得到表的字段。setListResult(new ArrayList<Map>());
    try {
        conn = getConnection();
        try {
            pstmt = conn.prepareStatement(sql);
        } catch (SQLException se) {
            throw new Exception("...");
        }
        Iterator inputParamsIte = params.iterator();
        int index = 1;
        try {
            while (inputParamsIte.hasNext()) {
                pstmt.setObject(index, inputParamsIte.next());
                index++;
            }
        } catch (SQLException se) {
            throw new Exception("...");
        }    try {
            rs = pstmt.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            while (rs.next()) {
                Map map = new HashMap();
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                    if (rsmd.getColumnTypeName(i).equals("text")) {
                        StringBuffer sbf = new StringBuffer();
                        java.io.InputStream ins = rs.getAsciiStream(i);
                        int ch = 0;
                        if (ins != null) {
                            try {
                                while ((ch = ins.read()) != -1) {
                                    sbf.append((char) ch);
                                }
                                ins.close();
                                map.put(rsmd.getColumnName(i), new String(sbf.toString().getBytes("8859_1"), "GB2312"));
                            } catch (IOException ioe) {
                                throw new Exception("...");
                            }
                        } else {
                            map.put(rsmd.getColumnName(i), null);
                        }
                    }else{
                        map.put(rsmd.getColumnName(i), rs.getObject(i));
                    }
                }
                getListResult().add(map);
            }
        } catch (SQLException se) {
            throw new Exception("...");
        }
        iResult = getListResult().size();
        logger.debug("executeQuery:" + sql + ",successe.");
    } finally {
        closeConnection();
    }
      

  2.   

    不需要实体类 直接用SQL查询 然后自己将查询出的object 对象封装成VO 就行了
      

  3.   

    类型一个单表向导,和表里有哪些字段无关的.
    很多公司的框架里,有通过数据库的任何一个表,动态把字段读出来,然后配置一下,就能在JSP页面上显示相应的数据.
    楼主的需求应该是类型于这个.
      

  4.   

    表的话你建立一个实体类就ok,写下属性。再写set和get方法。就ok了。我这里这张表是学生表,字段是StudNo,StudName,StudSex,ClassID,对应的实体类如下:package com.studinfoms.util;import java.util.Date;public class StudInfo {
    private String StudName;
    private String StudSex;
    private Date StudBirthDay;
    private String StudNo;
    private String ClassID;
    public String getStudName() {
    return StudName;
    }
    public void setStudName(String studName) {
    StudName = studName;
    }
    public String getStudSex() {
    return StudSex;
    }
    public void setStudSex(String studSex) {
    StudSex = studSex;
    }
    public Date getStudBirthDay() {
    return StudBirthDay;
    }
    public void setStudBirthDay(Date studBirthDay) {
    StudBirthDay = studBirthDay;
    }
    public String getStudNo() {
    return StudNo;
    }
    public void setStudNo(String studNo) {
    StudNo = studNo;
    }
    public String getClassID() {
    return ClassID;
    }
    public void setClassID(String classID) {
    ClassID = classID;
    }
    }
    下面是jdbc的实现:
    public ArrayList<StudInfo> selectStudInfo(String keyword,String search){
    String drv="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url="jdbc:sqlserver://localhost:1433;DatabaseName=test";
    String usr="sa";
    String password="dongxiaolong1202";

    Connection conn=null;
    Statement stm=null;
    ResultSet rs=null;
    ArrayList<StudInfo> list=new ArrayList<StudInfo>();
    try {
    Class.forName(drv).newInstance();
    conn=DriverManager.getConnection(url,usr,password);
    System.out.println("数据库连接成功!");
    String sqlstr="select * from StudInfo where "+keyword+" like '%"+search+"%'";
    System.out.println(sqlstr);
    stm=conn.createStatement();
    rs=stm.executeQuery(sqlstr);
    while(rs.next())
    {
    StudInfo stud=new StudInfo();
    stud.setStudName(rs.getString("StudName"));
    stud.setStudNo(rs.getString("StudNo"));
    stud.setStudSex(rs.getString("StudSex"));
    list.add(stud);
    }
    } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return list;
    }
    在servlet中调用方法实现传到jsp中
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
            System.out.println("doPost");
            request.setCharacterEncoding("utf-8");
    String keyword=request.getParameter("keyword");
    String search=request.getParameter("search");
    ArrayList<StudInfo> list=selectStudInfo(keyword, search);
    Iterator<StudInfo> iterator=c.iterator();
    while(iterator.hasNext()){
    StudInfo stud=new StudInfo();
    stud=(StudInfo)iterator.next();
    System.out.println("-------------------------------------------------------------------------------");
    System.out.println("学生学号"+stud.getStudNo());
    System.out.println("学生姓名"+stud.getStudName());
    System.out.println("学生性别"+stud.getStudSex());
    System.out.println(".......................................................................");
    }
    response.sendRedirect("/studinfoms/selectstudinfook.jsp");//转下jsp页面!
    }
    如果你满意请记得给我分数哇!不懂你再说。
      

  5.   

    6楼的好像不怎么对吧,他这个表是用jdbc的sql语句创建的,可能未必知道这么多信息的。难道你的意思是,创建了这么一个实体bean来备用?如果是这样子的话,那可能是行的。就是换个位子思考下,你就当你的那张用sql语句创建的表是一张虚拟的表,就是当某个时候这张表存在的时候,就可以使用这个实体bean了。其实,说白了就一句话,这个用sql语句创建的表,到时候也是会存在于数据库中的,你可以创建一个实体的bean来备用。
      

  6.   

    1 楼那个方式可以,你可以用界面显示信息的索引来做map的key
      

  7.   

    给个简单的例子你看一下估计就懂了:
    <%@ page language="java" import="java.sql.*"
    contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!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>进厂煤计量盈亏月报</title> <%
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    String sql = "";
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url = "jdbc:oracle:thin:@211.69.205.29:1521:HCDC";
    String user = "system";
    String password = "manager";
    sql = "select ghbh,gmdw,gmkb,fz,hm,zldw from hc_ghjld where ghbh like '"+"201012%"+"'";
    conn = DriverManager.getConnection(url, user, password);
    stat = conn.createStatement();
    rs = stat.executeQuery(sql);
    } catch (Exception ex) {
    ex.printStackTrace();
    out.print("查询数据库出错!");
    }
    %> </head>
    <style type="text/css">
    body {
    color: #4f6b72;
    background: #E6EAE9;
    }tr {
    background-color: #FFFFFF;
    }td {
    font-size: 12px;
    text-align: center;
    color: #4f6b72;
    border-right: 1px solid #C1DAD7;
    border-bottom: 1px solid #C1DAD7;
    padding: 4px 4px 4px 4px;
    }
    </style>
    <body> <table id="tableTest" border="0" cellspacing="1" width="400">
    <!--<!--表格标题行--> <tr>
    <td rowspan="2" width="100">
    矿别
    </td>
    <td rowspan="2" width="100">
    供煤单位
    </td>
    <td rowspan="2" width="100">
    发站
    </td>
    <td colspan="4" width="320">
    货名
    </td>
    <td rowspan="2" width="100">
    重量单位
    </td>
           </tr>
    <%
    try {
    while (rs.next()) {
    out.print("<tr><td>" + rs.getString("ghbh")+ "</td>");
    out.print("<td>" + rs.getString("gmdw") + "</td>");
    out.print("<td>" + rs.getString("gmkb") + "</td>");
    out.print("<td>" + rs.getString("fz") + "</td>");
    out.print("<td>" + rs.getString("hm") + "</td>");
    out.print("<td>" + rs.getString("zldw")
    + "</td></tr>");
    }
    } catch (SQLException ex) {
    ex.printStackTrace();
    out.print("生成表格出错!");
    }
    %>
    </table> </body>
    </html>
      

  8.   

    主要是看下面的红色部分:
    <%@ page language="java" import="java.sql.*"
    contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!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>进厂煤计量盈亏月报</title> <%
    Connection conn = null;
    Statement stat = null;
    ResultSet rs = null;
    String sql = "";
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url = "jdbc:oracle:thin:@211.69.205.29:1521:HCDC";
    String user = "system";
    String password = "manager";
    sql = "select ghbh,gmdw,gmkb,fz,hm,zldw from hc_ghjld where ghbh like '"+"201012%"+"'";
    conn = DriverManager.getConnection(url, user, password);
    stat = conn.createStatement();
    rs = stat.executeQuery(sql);
    } catch (Exception ex) {
    ex.printStackTrace();
    out.print("查询数据库出错!");
    }
    %> </head>
    <style type="text/css">
    body {
    color: #4f6b72;
    background: #E6EAE9;
    }tr {
    background-color: #FFFFFF;
    }td {
    font-size: 12px;
    text-align: center;
    color: #4f6b72;
    border-right: 1px solid #C1DAD7;
    border-bottom: 1px solid #C1DAD7;
    padding: 4px 4px 4px 4px;
    }
    </style>
    <body> <table id="tableTest" border="0" cellspacing="1" width="400">
    <!--<!--表格标题行--> <tr>
    <td rowspan="2" width="100">
    矿别
    </td>
    <td rowspan="2" width="100">
    供煤单位
    </td>
    <td rowspan="2" width="100">
    发站
    </td>
    <td colspan="4" width="320">
    货名
    </td>
    <td rowspan="2" width="100">
    重量单位
    </td>
           </tr>
    <%
    try {
    while (rs.next()) {
    out.print("<tr><td>" + rs.getString("ghbh")
    + "</td>");
    out.print("<td>" + rs.getString("gmdw") + "</td>");
    out.print("<td>" + rs.getString("gmkb") + "</td>");
    out.print("<td>" + rs.getString("fz") + "</td>");
    out.print("<td>" + rs.getString("hm") + "</td>");
    out.print("<td>" + rs.getString("zldw")
    + "</td></tr>");
    }
    } catch (SQLException ex) {
    ex.printStackTrace();
    out.print("生成表格出错!");
    }
    %>
    </table> </body>
    </html>