Изменение записей в базе данных через Jtable

Я создал Jtable с помощью Netbeans 7.1. В таблице создана модель по умолчанию, как показано ниже.

table.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null},
            {null, null, null, null}
        },
        new String [] {
            "Title 1", "Title 2", "Title 3", "Title 4"
        }
    ));

Я также добавил следующие строки кода для заполнения данных из базы данных Sqlite.

public void tabl()
{
  try
  {
    stmt=conn.createStatement();
    String sql2="SELECT * FROM students";
    rs=stmt.executeQuery(sql2);
    int n=0;
    while(rs.next())
    {  

      table.setValueAt(rs.getString(1),n,0);
      table.setValueAt(rs.getString(2),n,1);
      table.setValueAt(rs.getString(3),n,2);
      table.setValueAt(rs.getString(4),n,3);
      n++;
    }
  }
  catch(SQLException e)
  {

  }
}

Моя викторина: как теперь сделать JTable способным обновлять и удалять записи... с моделью по умолчанию. Я новичок в табличных моделях.


person Xcoder    schedule 27.02.2012    source источник
comment
docs.oracle.com/javase/tutorial/uiswing/components/   -  person JB Nizet    schedule 27.02.2012
comment
@Xcoder: напишите rs.getXXX("column_title") в коде. это удалит дальнейшие ошибки из-за таблиц базы данных или манипуляций с представлениями.   -  person Not a bug    schedule 29.10.2013


Ответы (2)


DefaultTableModel dmReset = (DefaultTableModel) table.getModel();
try {
    stmt=conn.createStatement();
    String sql2="SELECT * FROM students";
    rs=stmt.executeQuery(sql2);
    while (rs.next()) {
          Vector v = new Vector();
          v.add(rs.getString(1));
          v.add(rs.getString(2));
          v.add(rs.getString(3));
          v.add(rs.getString(4));
          dmReset.addRow(v);
          }
    } catch (Exception e) {
          System.err.println(e.toString());
    }

Примечание. Используйте полные заголовки столбцов в методах rs.getXXX() вместо индексов столбцов. дополнительные сведения о TableModel см. в этом документе. .

Если вы хотите получить другие типы данных, такие как Float, int и т. д., с этим можно добавить случай переключения, вы можете найти пример здесь.

person Not a bug    schedule 28.10.2013

вы должны создать такое заявление

conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);

а также обратите внимание, что select * FROM table; всегда возвращает набор результатов только для чтения. вместо запроса следует выбрать столбец1, столбец ИЗ таблицы;

person invariant    schedule 27.02.2012
comment
@peter Как обновить изменения с помощью только что созданной кнопки? - person Xcoder; 28.02.2012