Java while(rs.next)数据库结果
为什么我只能从mysql数据库中得到最后一个结果?不管数据库中有什么元素?如何检索所有数据库行 代码如下:Java while(rs.next)数据库结果,java,database,Java,Database,为什么我只能从mysql数据库中得到最后一个结果?不管数据库中有什么元素?如何检索所有数据库行 代码如下: package database; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData;
package database;
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 javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONObject;
public class getData extends HttpServlet {
private static final long serialVersionUID = 1L;
Connection con;
Statement stmt;
ResultSet rs;
Setzen setze = new Setzen();
int zeilen;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ausgaben","***","***");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM ausgaben");
ResultSetMetaData meta = rs.getMetaData();
zeilen = meta.getColumnCount();
while(rs.next())
{
setze.setAusgaben(rs.getString("Ausgaben"));
setze.setVom(rs.getString("vom"));
setze.setPreis(rs.getString("Preis"));
}
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println(setze.getAusgaben());
PrintWriter out = response.getWriter();
String data = "{\"sEcho\":" + 3 + ",\"iTotalRecords\":" + zeilen + ", \"iTotalDisplayRecords\":" + zeilen + ",\"aaData\":[["+"\""+setze.getAusgaben()+"\""+","+"\""+setze.getVom()+"\""+","+"\""+setze.getPreis()+"\""+"]]}";
System.out.println(data);
out.print(data);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
提前谢谢。看起来问题在于
Setzen
类的实现。我确信setXXX()
方法不会追加数据,而是覆盖上次写入的数据
也可以,如果在java 7上考虑使用<代码>尝试资源,但这与你的问题无关。< /P> < p>你将所有结果保存到一个对象中,<代码> SETZE/CODE> 看起来您希望收集所有结果并将其作为某种JSON结构返回。你应该尝试这样的方法,使用。它避免了手动创建JSON输出时可能出现的巨大错误源
final JSONArray ja = new JSONArray();
while (rs.next()) {
ja.put(new JSONObject()
.put("Ausgaben", rs.getString("Ausgaben"))
.put("vom", rs.getString("vom"))
.put("Preis", rs.getString("Preis")));
}
response.getWriter().print(new JSONObject()
.put("aaData", ja)
.put("iTotalRecords", zeilen)
.toString());
这将输出类似于{“iTotalRecords”:3,“aaData:[{“Ausgaben”:“…”,“vom”:“…”,“Preis”:“…”},…”}
我还建议在出现异常时将错误发送回用户,而不是默默地忽略它
catch (SQLException e) {
// TODO: log the exception
// this is our fault, let the user know we failed
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}