Java 将数据从数据库添加到自定义jtable

Java 将数据从数据库添加到自定义jtable,java,swing,jtable,Java,Swing,Jtable,我试图将数据库添加到特定的列中,列始终是相同的,但行发生了变化。因此,我输入变量并尝试向数字中添加一个,但不幸运的是,所有打印都为0,因此没有向变量中添加任何数字,因此我的表保持在同一行,并且从不更改。我尝试I++;i=i+1;我只有println()上的0。我正在使用Netbeans Statement stmt = null; String sql="select * from gateway where date= "+id; try{ Con

我试图将数据库添加到特定的列中,列始终是相同的,但行发生了变化。因此,我输入变量并尝试向数字中添加一个,但不幸运的是,所有打印都为0,因此没有向变量中添加任何数字,因此我的表保持在同一行,并且从不更改。我尝试I++;i=i+1;我只有println()上的0。我正在使用Netbeans

     Statement stmt = null;
      String sql="select * from gateway where date= "+id;
      try{
      Connect conn=new Connect();
      stmt = conn.makeStatement();        
       rs = stmt.executeQuery(sql);            
        while(rs.next()) {
            int i=0;
            Object ids = rs.getString("Business");
            Object items = rs.getString("GatewayJob");
            Object descriptions = rs.getString("Status");
            Object quantitys = rs.getString("Timework");
            Object price = rs.getString("Notes");      

            jTable1.getModel().setValueAt(ids,i, 0 );
            jTable1.getModel().setValueAt(items, i, 1);
            jTable1.getModel().setValueAt(descriptions, i, 2);
           jTable1.getModel().setValueAt(quantitys, i, 3);
          jTable1.getModel().setValueAt(price, i, 4);              
          System.out.println(i);
        i++;
        }
在你的代码中

while(rs.next()) {
            int i=0;
移动
int i=0到您的
while循环之前

每次在您的代码中,此语句都会将
i
重置回0

while(rs.next()) {
            int i=0;
移动
int i=0到您的
while循环之前

此语句每次都会将
i
重置为0,因为每次while循环都会将i重置为0;before while()

因为每次while循环时i都被重置为0。
所以您应该将int i=0;before while()

不要使用setValueAt()方法。这意味着您已经用一堆包含空值的行加载了TableModel,这是一个糟糕的设计,因为您不知道查询将返回多少行

相反,您应该通过向循环中的模型添加新行来动态构建TableModel

有关使用DefaultTableModel的简单解决方案,请参见数据库示例中的
表。

不要使用setValueAt()方法。这意味着您已经用一堆包含空值的行加载了TableModel,这是一个糟糕的设计,因为您不知道查询将返回多少行

相反,您应该通过向循环中的模型添加新行来动态构建TableModel


有关使用DefaultTableModel的简单解决方案,请参阅,特别是数据库示例中的
表。

请尝试此代码。我使用字符串连接。此代码正在运行

String sql = "select * from tblstudent";

try{

database.Query(sql);

int inc=0;

while(database.dataTable.next()){

         Object a = database.dataTable.getInt("StudentID");
         Object b = database.dataTable.getString("Firstname");
         Object c = database.dataTable.getString("Lastname");
         Object d = database.dataTable.getString("Gender");
         Object e = database.dataTable.getInt("CourseID");

         tblStudent.getModel().setValueAt(a, inc, 0 );
         tblStudent.getModel().setValueAt(b, inc, 1);
         tblStudent.getModel().setValueAt(c, inc, 2);
         tblStudent.getModel().setValueAt(d, inc, 3);
         tblStudent.getModel().setValueAt(e, inc, 4);              

         inc++;
     }
 }
catch(SQLException ex){
     JOptionPane.showMessageDialog(null, "Error");
 }

}  

试试这个代码。我使用字符串连接。此代码正在运行

String sql = "select * from tblstudent";

try{

database.Query(sql);

int inc=0;

while(database.dataTable.next()){

         Object a = database.dataTable.getInt("StudentID");
         Object b = database.dataTable.getString("Firstname");
         Object c = database.dataTable.getString("Lastname");
         Object d = database.dataTable.getString("Gender");
         Object e = database.dataTable.getInt("CourseID");

         tblStudent.getModel().setValueAt(a, inc, 0 );
         tblStudent.getModel().setValueAt(b, inc, 1);
         tblStudent.getModel().setValueAt(c, inc, 2);
         tblStudent.getModel().setValueAt(d, inc, 3);
         tblStudent.getModel().setValueAt(e, inc, 4);              

         inc++;
     }
 }
catch(SQLException ex){
     JOptionPane.showMessageDialog(null, "Error");
 }

}  

1) 为了更快地获得更好的帮助,请发布一个。2) 对代码块使用一致的逻辑缩进。代码的缩进是为了帮助人们理解程序流程。1)为了更快地获得更好的帮助,请发布一篇文章。2) 对代码块使用一致的逻辑缩进。代码的缩进是为了帮助人们理解程序流程。这将拉动整个数据库列(不需要)。@gyuhh,然后不要使用“选择*”,或者只使用上面提供的基本代码从需要的列中获取数据。关键是构建向量并将行添加到模型中
使用setValueAt(…)简直是一种糟糕的编码实践
。这将拉取整个数据库列(不需要)。@gyuhh,然后不要使用“select*”,或者只使用上面提供的基本代码从需要的列中获取数据。关键是构建向量并将行添加到模型中
使用setValueAt(…)简直是一种糟糕的编码实践
。欢迎使用stackoverflow!:-)欢迎来到stackoverflow!:-)