1 Востаннє редагувалося Lujok (18.09.2015 11:47:49)

Тема: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Модель таблиці успадкована від AbstractTableModel. Рядки додаються нормально крім випадку коли перед цим видалити всі рядки. тобто не може добавити перший рядок.
метод який додає строки до таблиці БД та перемальовує jTable:

public void addPerson){
        try {
            PreparedStatement prstm = null;
            String sqlInsert = " INSERT INTO   testTable(ua, en)  VALUES(?,?)";
            prstm = conn.prepareStatement(sqlInsert);
            prstm.setString(1, " ");
            prstm.setString(2, "m");

             prstm.executeUpdate(); 
             data.clear(); // зберігаються дані jTable
             getTableContents(tableName); //   заповнює jTable даними з БД , повністю є тут 3-тє повідомлення http://replace.org.ua/topic/5415/

            fireTableRowsInserted(getRowCount()+1, getRowCount()+1);
          fireTableDataChanged();
            if (prstm!=null ) prstm.close();
        } catch (SQLException ex) {
            Logger.getLogger(TM.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

Listener  викликає метод addPerson :
  @Override
    public void actionPerformed(ActionEvent ae) {
       
        obTM.addPerson();

    }

2

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Що ви вкладаєте в поняття "ненормально"?

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

3

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

quez написав:

Що ви вкладаєте в поняття "ненормально"?

Ви про що ?

4

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Lujok написав:
quez написав:

Що ви вкладаєте в поняття "ненормально"?

Ви про що ?

Рядки додаються нормально крім випадку коли перед цим видалити всі рядки.

Що відбувається в цьому випадку?

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

5 Востаннє редагувалося fed_lviv (18.09.2015 19:38:06)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Lujok написав:

Рядки додаються нормально крім випадку коли перед цим видалити всі рядки. тобто не може добавити перший рядок.

Якщо чесно, то не дуже розумію питання, але є пару запитаннь
1. Навіщо використовуєте цих два методи разом, Вам одного з них не вистачає?

Lujok написав:
...
 fireTableRowsInserted(getRowCount()+1, getRowCount()+1);
 fireTableDataChanged();
...

2. Випадок з видаленням всіх рядків, що в той момент повертає метод getRowCount()?

6 Востаннє редагувалося Lujok (18.09.2015 20:52:20)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

quez написав:

Що відбувається в цьому випадку?

fed_lviv

2. Випадок з видаленням всіх рядків, що в той момент повертає метод getRowCount()?

  @Override
    public int getColumnCount() {
        Object[] obj = data.get(0);
        return obj.length;           
    }

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
Тут мені зрозуміла причина ,  в data даних нема і тому- IndexOutOfBoundsException: Index: 0, Size: 0 .
Рішення очевидно просте . та голова зараз щось не фуриче ) .
Намагаюсь так :
if(data.isEmpty()){
        //     не знаю що тут написати   
        }else{
        Object[] obj = data.get(0);

        return obj.length;
}

7 Востаннє редагувалося fed_lviv (18.09.2015 20:57:24)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

А, Ви спробуйте використати тільки метод fireTableDataChanged(); А даний метод викиньте:    fireTableRowsInserted(getRowCount()+1, getRowCount()+1);

8 Востаннє редагувалося Lujok (18.09.2015 21:06:48)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

fed_lviv написав:

А, Ви спробуйте використати тільки метод fireTableDataChanged(); А даний метод викиньте:    fireTableRowsInserted(getRowCount()+1, getRowCount()+1);

Ні все рівно - Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at person.TM.getColumnCount(TM.java:84) .

TM.java:84-  це строка -  Object[] obj = data.get(0);
                    return obj.length;

9

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Ну тоді спробуйте

if(data.isEmpty()){
        //     не знаю що тут написати   return 0;
        }else{
        Object[] obj = data.get(0);
        return obj.length;
}

Або ловіть виключення і обробляйте його. Хоч мені, що перший, що другий варіант не дуже подобаються.

10

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Lujok написав:

Ні все рівно - Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at person.TM.getColumnCount(TM.java:84) .

TM.java:84-  це строка -  Object[] obj = data.get(0);
                    return obj.length;

А, хто викликаэ даний метод, піднімітся трошки вище?

11 Востаннє редагувалося fed_lviv (18.09.2015 21:19:56)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Ой, це ж метод getColumnCount, щось я прогавив, а чому масив з назвою колонок у Вас порожній?

12

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

fed_lviv написав:

Ой, це ж метод getColumnCount, щось я прогавив, а чому масив з назвою колонок у Вас порожній?

Та то колекція з даними ...
Треба ж з іменами колонок !?

зробив так  і здається запрацювало:
@Override
    public int getColumnCount() {
       
        return colNamesList.size();
    }

colNamesList - це колекція з іменами колонок.

13 Востаннє редагувалося Lujok (18.09.2015 21:34:17)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

тут таке ще питання
коли я добавляю дані в БД:
PreparedStatement prstm = null;
            String sqlInsert = " INSERT INTO   testTable(ua, en)  VALUES(?,?)";
            prstm = conn.prepareStatement(sqlInsert);
            prstm.setString(1, " ");
            prstm.setString(2, "m");

Коли при додаванні строки я добавляю дані в одну або дві (як у мене в коді :" prstm.setString(1, " "),  prstm.setString(2, "m");") колонки , то в інші ячейки що добавляється ? Я десь читав щось але зараз непамятаю.

14

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Вітаю, працюйте з колекціями, а не з масивами. Нарахунок порожнього масиву з назвою колонок, я прочто не бачив у Вашому коді, де він очищуэться і де він наповнюэться

Подякували: Lujok1

15

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Lujok написав:

тут таке ще питання
коли я добавляю дані в БД:
PreparedStatement prstm = null;
            String sqlInsert = " INSERT INTO   testTable(ua, en)  VALUES(?,?)";
            prstm = conn.prepareStatement(sqlInsert);
            prstm.setString(1, " ");
            prstm.setString(2, "m");

Коли при додаванні строки я добавляю дані в одну або дві (як у мене в коді :" prstm.setString(1, " "),  prstm.setString(2, "m");") колонки , то в інші ячейки що добавляється ? Я десь читав щось але зараз непамятаю.

Ну це вже треба дивитися на БД, що там прописано дефолтним значенням.

Подякували: Lujok1

16 Востаннє редагувалося Lujok (18.09.2015 21:43:46)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Ну це вже треба дивитися на БД, що там прописано дефолтним значенням.

це воно ?
http://savepic.ru/7749230m.png

17 Востаннє редагувалося fed_lviv (18.09.2015 21:51:01)

Re: Проблема з додаванням строк в пусту (без рядків) таблицю SQLIte

Так, це воно. Але, якщо хоч одне поле (колонка) буде мати NOT NULL, і Ви його не заповните, то будите мати експепшн. Також можити дивитися скільки рядків додали (видалили, редагували) int x=executeUpdate();

Подякували: Lujok1