Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные динамичекси менять в JTable 
V
    Опции темы
Entwickler
Дата 1.12.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 14.4.2007

Репутация: нет
Всего: 2



Привет !!! 
У меня проблемка с JTable... или с DB... короче никак не могу понять почему он мне не разрешает сделать ResultSet rs = stm.executeUpdate(sql); 
в методе public void deleteData(Object row) ... stm.executeQuery можно делать, а вот Update нет!!! 
Код

import java.sql.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class QueryTableModel extends AbstractTableModel {

    Vector cache; //will hold String[] objects
    int colCount;
    String headers[] = null;
    Connection db = null;
    Statement stm = null;
    String currentURL;

    public QueryTableModel() {
        cache = new Vector();
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    public String getColumnName(int i) {
        return headers[i];
    }

    public int getColumnCount() {
        return colCount;
    }

    public int getRowCount() {
        return cache.size();
    }

    public Object getValueAt(int row, int col) {
        return ((String[]) cache.elementAt(row))[col];
    }

    public void setHostURL(String url) {
        if (url.equals(currentURL)) {
            return;
        }
        closeDB();
        initDB(url);
        currentURL = url;
    }

    //All the real work happens here; in a real application, we'd probably
    //perform the query in a separate thread.
    public void setQuery(String q) {
        cache = new Vector();
        try {
            ResultSet rs = stm.executeQuery(q);
            ResultSetMetaData meta = rs.getMetaData();
            colCount = meta.getColumnCount();

            //Now we must rebuild the headers array with the new column names.
            headers = new String[colCount];
            for (int h = 1; h <= colCount; h++) {
                headers[h - 1] = meta.getColumnName(h);
            }

            //Now we must file the cache with the records from our query.
            //This would not be practical if we were expecting a few million
            //records in response to our query, but we aren't, so we can do this
            while (rs.next()) {
                String[] record = new String[colCount];
                for (int i = 0; i < colCount; i++) {
                    record[i] = rs.getString(i + 1);
                }
                cache.addElement(record);
            }
            fireTableChanged(null);

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    public void deleteData(Object row) {
        //cache = new Vector();
        if (cache.isEmpty()) {
            return;
        } else {
            try {
                String sql = "DELETE FROM personen WHERE nummer = " + row;
                //cache.removeAllElements();

                ResultSet rs = stm.executeUpdate(sql);
                ResultSetMetaData meta = rs.getMetaData();
                colCount = meta.getColumnCount();

                //Now we must rebuild the headers array with the new column names.
                headers = new String[colCount];
                for (int h = 1; h <= colCount; h++) {
                    headers[h - 1] = meta.getColumnName(h);
                }

                //Now we must file the cache with the records from our query.
                //This would not be practical if we were expecting a few million
                //records in response to our query, but we aren't, so we can do this
                while (rs.next()) {
                    String[] record = new String[colCount];
                    for (int i = 0; i < colCount; i++) {
                        record[i] = rs.getString(i + 1);
                    }
                    cache.addElement(record);
                }
                fireTableChanged(null);
            } catch (Exception exception) {
            }
        }
    }

    public void initDB(String url) {
        try {
            db = DriverManager.getConnection("jdbc:mysql://" + url, "root", "maximus");
            stm = db.createStatement();
        } catch (Exception exception) {
            System.out.println("Could not initialize the Database.");
            exception.printStackTrace();
        }
    }

    public void closeDB() {
        try {
            if (stm != null) {
                stm.close();
            }
            if (db != null) {
                db.close();
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

Код

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class DatenbankAbfrageTool extends JFrame {

    private JTextField name_in = null;
    private JTextField vorname_in = null;
    private JTextField strasse_in = null;
    private JTextField ort_in = null;
    private JTextField plz_in = null;
    private JTextField telefon_in = null;
    private JButton showData = null;
    private JButton executeQuery = null;
    private JButton deleteData = null;
    private JButton exitApplication = null;
    private JPanel eingabePanel = null;
    private QueryTableModel tableModel = null;
    private JTable resultTable = null;

    public DatenbankAbfrageTool() {
        super("Datendankabfragetool: ");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        eingabePanel = new JPanel(new GridLayout(4, 3));

        name_in = new JTextField();
        vorname_in = new JTextField();
        strasse_in = new JTextField();
        ort_in = new JTextField();
        plz_in = new JTextField();
        telefon_in = new JTextField();

        showData = new JButton("Show Data");
        executeQuery = new JButton("Execute Query");
        deleteData = new JButton("Delete Data");
        exitApplication = new JButton("Exit");

        eingabePanel.add(new JLabel("  Name: "));
        eingabePanel.add(name_in);
        eingabePanel.add(new JLabel("  Vorname: "));
        eingabePanel.add(vorname_in);
        eingabePanel.add(new JLabel("  Strasse: "));
        eingabePanel.add(strasse_in);
        eingabePanel.add(new JLabel("  Ort: "));
        eingabePanel.add(ort_in);
        eingabePanel.add(new JLabel("  PLZ: "));
        eingabePanel.add(plz_in);
        eingabePanel.add(new JLabel("  Telefon: "));
        eingabePanel.add(telefon_in);
        eingabePanel.add(showData);
        eingabePanel.add(executeQuery);
        eingabePanel.add(deleteData);
        eingabePanel.add(exitApplication);

        tableModel = new QueryTableModel();
        resultTable = new JTable(tableModel);
        JScrollPane scrollPane = new JScrollPane(resultTable);
        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, eingabePanel, scrollPane);


        showData.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                new MyShowData().start();
            }
        });
        deleteData.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                tableModel.setHostURL("localhost/pvt");
                tableModel.deleteData(resultTable.getValueAt(resultTable.getSelectedRow(), 0));
            }
        });

        add(splitPane);
        pack();
        setVisible(true);
    }

    class MyShowData extends Thread {

        public void run() {
            tableModel.setHostURL("localhost/pvt");
            tableModel.setQuery("SELECT * FROM personen");

        }
    }

    public static void main(String[] args) {
        new DatenbankAbfrageTool();
    }
}


работаю с MySQL... за совет или просто намёк буду очень признателен!!!!!! долблюсь уже неделю!!!! smile 
PM MAIL   Вверх
AntonSaburov
Дата 1.12.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



Цитата(Entwickler @  1.12.2008,  12:49 Найти цитируемый пост)
почему он мне не разрешает сделать ResultSet rs = stm.executeUpdate(sql)

Это надо у разработчиков Java спрашивать - почему метод executeUpdate возвращает количество измененнных столбцов командами UPDATE, DELETE, INSERT.

PM MAIL WWW ICQ   Вверх
Entwickler
Дата 1.12.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 14.4.2007

Репутация: нет
Всего: 2



Проблему решил следующим образом...
Код

public void deleteData(Object row) {
        //cache = new Vector();
        if (cache.isEmpty()) {
            return;
        } else {
            try {
                String sql = "DELETE FROM personen WHERE nummer = " + row;
                cache.removeAllElements();
                int t = stm.executeUpdate(sql);

                ResultSet rs = stm.executeQuery("SELECT * FROM personen");
                ResultSetMetaData meta = rs.getMetaData();
                colCount = meta.getColumnCount();

                //Now we must rebuild the headers array with the new column names.
                headers = new String[colCount];
                for (int h = 1; h <= colCount; h++) {
                    headers[h - 1] = meta.getColumnName(h);
                }

                //Now we must file the cache with the records from our query.
                //This would not be practical if we were expecting a few million
                //records in response to our query, but we aren't, so we can do this
                while (rs.next()) {
                    String[] record = new String[colCount];
                    for (int i = 0; i < colCount; i++) {
                        record[i] = rs.getString(i + 1);
                    }
                    cache.addElement(record);
                }
                fireTableChanged(null);

            } catch (Exception exception) {
            }
        }
    }


не знаю... как то мне это... не очень нравится... кто что подскажет?

Добавлено через 2 минуты и 42 секунды
Цитата

Это надо у разработчиков Java спрашивать - почему метод executeUpdate возвращает количество измененнных столбцов командами UPDATE, DELETE, INSERT.
 не хорошо прикалываться над молодежью!!!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.3329 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.