将Resultset插入Arraylist并显示它们

时间:2011-01-21 16:06:05

标签: java sql jdbc

我很难将多个结果集存储到ArrayList中。我还需要在JTextArea中显示它们。但问题是,我不能让它显示任何东西。

public static ArrayList<Wall> getWallPosts(int postId){

    ArrayList<Wall> postList = new ArrayList<Wall>();
    ResultSet rs = null;
    DBController db = new DBController();

    db.setUp("myDatabase");
    String dbQuery = "SELECT Id FROM Wall WHERE ID ="+postId; 

    rs = db.readRequest(dbQuery);

    try{
       while (rs.next()){
            int wallId = rs.getInt("Id");
            String wallPoster = rs.getString("Poster");
            String wallPost = rs.getString("Post");
            String wallDate = rs.getString("Tdate");
            Wall w1 = new Wall(wallPoster, wallPost , wallDate);
            postList.add(w1);   
       }
    }
    catch (Exception e) {
       e.printStackTrace();
    }


    db.terminate();
    return postList;

}
    //The method for displaying the result sets
        public void retrieveCategoryQuestionList() {
    //get the list and store in array
    ArrayList<Wall> aList = Wall.getWallPosts(id);
    for(id = 1; id<aList.size();id++)
        jTextAreaWall.append(w2.getPost());
}

数据库中的字段是Id,Poster,Post,Tdate

2 个答案:

答案 0 :(得分:5)

这是您的SQL查询:

"SELECT Id FROM Wall WHERE ID ="+postId

您只需从表中选择Id,而您希望IdPosterPostTdate按照您的{ {1}}来电。

ResultSet#getString()

您还需要在SQL查询中指定这些列:

String wallPoster = rs.getString("Poster");
String wallPost = rs.getString("Post");
String wallDate = rs.getString("Tdate");
Wall w1 = new Wall(wallPoster, wallPost , wallDate);

另见:


与具体问题无关,我建议familarize自己使用"SELECT Id, Poster, Post, Tdate FROM Wall WHERE Id="+ postId ,因为那是阻止SQL注入攻击的。


更新:根据您自己问题的评论,如果您的意图是显示所有行,那么您应该不添加限制性PreparedStatement子句,即使不是{ {1}},只会搜索与WHERE匹配的记录。只需省略Id=0

Id=0

我再次建议您完成基本的SQL教程。这个问题实质上与Java / JDBC没什么关系。除了一些严肃的设计问题外,它应该可行。

答案 1 :(得分:0)

我不知道其他可能出现的错误,它对我来说没问题,只是那个

String dbQuery =“SELECT Id FROM Wall WHERE ID =”+ postId;

应该是:

String dbQuery = "SELECT Id FROM Wall WHERE ID ='"+postId+"'";