Java 为什么我只从数据库中获取最后一行?
我使用Netbeans 8.2。我试图从数据库中获取数据并将其显示在jTable中。 但是,当我运行程序时,我只得到最后一行 有人能帮我解决吗Java 为什么我只从数据库中获取最后一行?,java,netbeans,Java,Netbeans,我使用Netbeans 8.2。我试图从数据库中获取数据并将其显示在jTable中。 但是,当我运行程序时,我只得到最后一行 有人能帮我解决吗 public class MultiSpanCellTableExample extends JFrame { Statement st; ResultSet rs; Object [][]row; Object[] column; MultiSpanCellTableExample() { co
public class MultiSpanCellTableExample extends JFrame {
Statement st;
ResultSet rs;
Object [][]row;
Object[] column;
MultiSpanCellTableExample() {
column = new Object[]{"","","","",""};
String g="",h="",j="",z="",n="",hg="",oo="",zz="";
Double l=null;
Date i=null;
String sql="SELECT * from personn";
con=Connections.getConnection();
try{
st=con.createStatement();
rs=st.executeQuery(sql);
while(rs.next()){
g=rs.getString("NAMME");
l=rs.getDouble("TOTAL");
i=rs.getDate("DATEE");
z=rs.getString("WY");
n=rs.getString("BAA");
row=new Object[][]{{g,l,z,i,n}};
}
}
catch(Exception e){
System.out.print( e);
}
AttributiveCellTableModel ml = new AttributiveCellTableModel(row,column);
final CellSpan cellAtt =(CellSpan)ml.getCellAttribute();
final MultiSpanCellTable table = new MultiSpanCellTable(ml);
JScrollPane scroll = new JScrollPane( table );
Box box = new Box(BoxLayout.X_AXIS);
box.add(scroll);
box.add(new JSeparator(SwingConstants.HORIZONTAL));
box.add(p_buttons);
getContentPane().add( box );
setSize( 400, 200 );
setVisible(true);
}
public static void main(String[] args) {
MultiSpanCellTableExample frame = new MultiSpanCellTableExample();
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
}
}
问题
您尚未使用所需的行数初始化行[][]
。此外,您没有将记录存储到行[i]
,其中i
是索引。请注意,二维数组是数组的数组,因此数据库中的每个记录都表示一个一维数组,需要将其存储到行[i]
中
解决方案
问题
您尚未使用所需的行数初始化行[][]
。此外,您没有将记录存储到行[i]
,其中i
是索引。请注意,二维数组是数组的数组,因此数据库中的每个记录都表示一个一维数组,需要将其存储到行[i]
中
解决方案
将行放入数组或列表中,迭代列表,您将获得所有内容。在while循环中,每次初始化行对象时,您都没有将其存储在数组中。因此,当退出while循环时,您将得到最后一行。您的问题在while循环中-对于循环的每次迭代,您将处理rs.next并创建一个新的row对象。但是,您从不将row对象存储在列表或表中,因此在下一次迭代中,您将用一个新的行替换同一行,最后只保留最后一行。@Sambit非常感谢您将该行放入数组或列表中,迭代该列表,您将获得所有内容。在while循环中,每次初始化行对象时,都没有将其存储在数组中。因此,当退出while循环时,您将得到最后一行。您的问题在while循环中-对于循环的每次迭代,您将处理rs.next并创建一个新的row对象。但是,您从未将row对象存储在列表或表中,因此在下一次迭代中,您将用新的行替换同一行,最后只保留最后一行。@Sambit非常感谢您的朋友
try{
// Get the number of rows
Statment stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rsCount = stmt.executeQuery("SELECT count(*) from personn");
if(rsCount.next()) {
// Initialize row[][]
row = new Object[rsCount.getInt(1)][];
st = con.createStatement();
rs = st.executeQuery(sql);
for(int i = 0; rs.next(); i++) {
g = rs.getString("NAMME");
l = rs.getDouble("TOTAL");
i = rs.getDate("DATEE");
z = rs.getString("WY");
n = rs.getString("BAA");
// Store the record into row[i]
row[i] = new Object[]{g,l,z,i,n};
}
}
}