我很难将多个结果集存储到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
答案 0 :(得分:5)
这是您的SQL查询:
"SELECT Id FROM Wall WHERE ID ="+postId
您只需从表中选择Id
,而您希望Id
,Poster
,Post
和Tdate
按照您的{ {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+"'";