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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> База данных на основе Excel 
:(
    Опции темы
Win MK 32
Дата 28.12.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне СРОЧНО нужна помощь! Нужно чтобы база данных на основе Excel-файла зафункционировала!!!
1. Создал Excel-файл c:\sampledb.xls (переименовал листы в table1, table2, table3. На первом из личтов заполнил 9 ячеек)
2. Залез в Панель управления > Администрирование > Источники данных ODBC > Добавить... 
Добавил "Driver for Microsoft Excel(*.xls)", написал "hoho", указал путь к файлу из п. 1.
3. В NetBeans создал проект со следующим кодом
Цитата

package data;
public class Main {
    public static void main(String[] args) {
        java.sql.Connection c = null;
        java.sql.Statement stmnt = null;
        java.sql.Statement stmnt2 = null;
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = java.sql.DriverManager.getConnection("jdbc:odbc:hoho");
            stmnt = c.createStatement();
            stmnt2 = c.createStatement();

            String query = "SELECT * FROM table1";
            java.sql.ResultSet rs = stmnt.executeQuery(query);
            String a;
            while(rs.next()) {
                a = rs.getString(1);
                System.out.println("a = " + a);
            }
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

Код заработал и выдал исключение
Цитата
java.sql.SQLException: [Microsoft][Драйвер ODBC Excel] Объект 'table1' не найден ядром базы данных Microsoft Jet.  Проверьте существование объекта и правильность имени и пути.

P.S. Трафик интернета очень сильно ограничен, поэтому пробовать другую тяжеловесную БД не желательно. Скачивать по GPRS проблематично.
PM   Вверх
rygel
Дата 28.12.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



указывай лист в запросе в таком формате:

Код

String query = "SELECT * FROM [table1$]";

PM MAIL   Вверх
Win MK 32
Дата 29.12.2008, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rygel, спасибо. Ты меня спас. Все работает.
PM   Вверх
Win MK 32
Дата 31.12.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не могу удалить строку из базы. Вот код. Закоментил некоторые из остальных нерабочих вариантов. По-идее executeUpdate должен работать, но нет. Исключение гласит:
Цитата
java.sql.SQLException: [Microsoft][Драйвер ODBC Excel] Удаление данных в присоединенной (или связанной) таблице не поддерживается этим драйвером ISAM.
Код
        java.sql.Connection c = null;
        java.sql.Statement stmnt = null;
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = java.sql.DriverManager.getConnection("jdbc:odbc:peopledb");
            
            stmnt = c.createStatement();
            String query = "DELETE * FROM [people$] WHERE name='"+ jComboBox1.getSelectedItem().toString() +"'";
            //stmnt.executeQuery(query);
            //stmnt.execute(query);
            stmnt.executeUpdate(query);
            
        }catch(Exception e){
            System.out.println(e);
        }

Помогите пожалуйста.
PM   Вверх
rygel
Дата 31.12.2008, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



так не получится.

http://support.microsoft.com/kb/257819


Код

Delete

You are more restricted in deleting Excel data than data from a relational data source. In a relational database,
"row" has no meaning or existence apart from "record"; in an Excel worksheet, this is not true. You can delete 
values in fields (cells). However, you cannot:

   1. Delete an entire record at once or you receive the following error message:
      Deleting data in a linked table is not supported by this ISAM.
      You can only delete a record by blanking out the contents of each individual field.

   2. Delete the value in a cell containing an Excel formula or you receive the following error message:
      Operation is not allowed in this context.

   3. You cannot delete the empty spreadsheet row(s) in which the deleted data was located, and your
recordset will continue to display empty records corresponding to these empty rows.



Отсюда следует что удаление будет представлять собой апдейт поля на пустое значение.

Советую попробовать http://poi.apache.org/spreadsheet/index.html . Очень удобная штука.

Это сообщение отредактировал(а) rygel - 31.12.2008, 01:38
PM MAIL   Вверх
Win MK 32
Дата 31.12.2008, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот так тоже не работает :(
Код

java.sql.Connection c = null;
        java.sql.Statement stmnt = null;
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = java.sql.DriverManager.getConnection("jdbc:odbc:peopledb");
            
            stmnt = c.createStatement();
            //String query = "DELETE * FROM [people$] WHERE name='"+ jComboBox1.getSelectedItem().toString() +"'";
            String query = "UPDATE [people$] SET pid='', name='', age='', sex='', contact='' WHERE name='"+jComboBox1.getSelectedItem().toString()+"'";
            System.out.println(jComboBox1.getSelectedItem().toString());
            System.out.println(query);
            //String query = "DELETE * FROM [people$] WHERE name='"+ jComboBox1.getSelectedItem().toString() +"'";
            //stmnt.executeQuery(query);
            //stmnt.execute(query);
            stmnt.executeUpdate(query);
            
        }catch(Exception e){
            System.out.println(e);
        }

Цитата
ывыв
UPDATE [people$] SET pid='', name='', age='', sex='', contact='' WHERE name='ывыв'
java.sql.SQLException: [Microsoft][Драйвер ODBC Excel] Несоответствие типов данных в выражении условия отбора.
BUILD SUCCESSFUL (total time: 56 seconds)


Цитата(rygel @  30.12.2008,  23:37 Найти цитируемый пост)
Советую попробовать http://poi.apache.org/spreadsheet/index.html . Очень удобная штука.

А там тоже можно делать SQL-запросы?

Добавлено через 9 минут и 41 секунду
Получилось: добавить в базу, выбрать из базы. 
Не выходит: удалить, обновить.
PM   Вверх
rygel
Дата 31.12.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



"Несоответствие типов данных в выражении условия отбора"

судя из запроса ошибка в set, потому как при несоответсвии типов в where или set ошибка одна и та же

Код

UPDATE [people$] SET pid='', name='', age='', sex='', contact='' WHERE name='ывыв'

Скорее всего pid и age у тебя это числа, а в запросе сетится строка. Программно проверить тип колонки можно так:
Код

ResultSetMetaData rsmd = resultSet.getMetaData();
int columnType = rsmd.getColumnType();

описание для числа columnType можно посмотреть в java.sql.Types

таким образом возможно правильным будет:
Код

UPDATE [people$] SET pid=0, name='', age=0, sex='', contact='' WHERE name='ывыв'

или null (но в итоге все-равно будет 0 в ячейке smile )

Цитата

А там тоже можно делать SQL-запросы?

Честно говоря не знаю. Друг работает с этой либой, говорил что ее возможностей ему вполне хватает для полноценной работы. На сайте множество примеров, может что-то для себя и найдешь. Но если у тебя только простая бд, где будет лишь операции crud, то видимо можно обойтись и odbc.



PM MAIL   Вверх
Win MK 32
Дата 31.12.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



rygel, спасибо!
А как потом удалить пустые строки из таблицы excel из Java?
PM   Вверх
rygel
Дата 31.12.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



Код

3. You cannot delete the empty spreadsheet row(s) in which the deleted data was located, and your
recordset will continue to display empty records corresponding to these empty rows.


Удалить строку нельзя будет через odbc. можно в запросе пропускать те строки в которых значимые поля пустые или содержат 0 например. Если хочешь иметь такую возможность используй Apache POI, потому как эта либа манипулирует самим документом.

Это сообщение отредактировал(а) rygel - 31.12.2008, 15:13
PM MAIL   Вверх
Win MK 32
Дата 31.12.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А чтобы задействовать Apache POI придется что-то скачивать и устанавливать на всех компах, где я буду использовать приложение? Мне через Apache POI  только пустые строки надо удалить...

Добавлено через 2 минуты и 54 секунды
Мне Apache POI не нравится тем, что там SQL-запросы нельзя делать. То есть это не база данных в привычном для многих смысле.
В идеале надо бы поставить MySQL, да весит он много, а я с мобильника качать не могу по GPRS.
PM   Вверх
rygel
Дата 1.1.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



Но ведь и excel это не совсем база данных. smile Поэтому или придется принять существующие ограничения при работе через odbc или принять иной путь. POI работает напрямую с форматом согласно которому формируются документы xls. Да, придется устанавливать на всех компах... но это лишь будет jar файлик в составе твоего приложения... у тебя ведь наверняка используются какие-либо еще библиотеки. 
Если тебе нужна полноценная бд которую ты хочешь распространять со своим приложением без надобности явной инсталляции со стороны юзера, то посмотри хотя бы на derby (всего-то несколько метров) или hsqldb.

Все зависит от требований которые предъявляются к твоему приложению. просто так гадать какое решение лучше вне контекста задачи - бесполезно. недостаточно возможностей через odbc - ищи альтернативу.
PM MAIL   Вверх
Connie
Дата 1.1.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



А почему не использовать sqlite? Ну как вариант базы данных, качать там нужно только драйвер pure около 1 Мбт, либо более быстрый около 2 Мбт, для небольшой базы вполне подойдет, и работать будет на всех системах.
http://www.zentus.com/sqlitejdbc/

работает с SQL запросами

PM MAIL WWW   Вверх
Win MK 32
Дата 3.1.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Теперь могу скачать практически любой объем. Спасибо за ссылки и предложения. Буду пробовать.

Но сейчас другая проблема. Моя программа вроде бы работает как положено. Создается ощущение что и SELECT, и UPDATE, и INSERT -запросы успешно работают. Но стоит мне перезапустить программу, как я вижу, что от предыдущего раза никаких изменения не видно. То есть сам xls-файл не меняется! Что за чудеса? smile
Вот мой код
Код
package people;
import org.jdesktop.application.Action;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JFrame;
public class PeopleView extends FrameView {
    public PeopleView(SingleFrameApplication app) {
        super(app);

        initComponents();
        
        // status bar initialization - message timeout, idle icon and busy animation, etc
        ResourceMap resourceMap = getResourceMap();
        int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
        messageTimer = new Timer(messageTimeout, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                statusMessageLabel.setText("");
            }
        });
        messageTimer.setRepeats(false);
        int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
        for (int i = 0; i < busyIcons.length; i++) {
            busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
        }
        busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
                statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
            }
        });
        idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
        statusAnimationLabel.setIcon(idleIcon);
        progressBar.setVisible(false);

        // connecting action tasks to status bar via TaskMonitor
        TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
        taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                String propertyName = evt.getPropertyName();
                if ("started".equals(propertyName)) {
                    if (!busyIconTimer.isRunning()) {
                        statusAnimationLabel.setIcon(busyIcons[0]);
                        busyIconIndex = 0;
                        busyIconTimer.start();
                    }
                    progressBar.setVisible(true);
                    progressBar.setIndeterminate(true);
                } else if ("done".equals(propertyName)) {
                    busyIconTimer.stop();
                    statusAnimationLabel.setIcon(idleIcon);
                    progressBar.setVisible(false);
                    progressBar.setValue(0);
                } else if ("message".equals(propertyName)) {
                    String text = (String)(evt.getNewValue());
                    statusMessageLabel.setText((text == null) ? "" : text);
                    messageTimer.restart();
                } else if ("progress".equals(propertyName)) {
                    int value = (Integer)(evt.getNewValue());
                    progressBar.setVisible(true);
                    progressBar.setIndeterminate(false);
                    progressBar.setValue(value);
                }
            }
        });
        update();
    }

    @Action
    public void showAboutBox() {
        if (aboutBox == null) {
            JFrame mainFrame = PeopleApp.getApplication().getMainFrame();
            aboutBox = new PeopleAboutBox(mainFrame);
            aboutBox.setLocationRelativeTo(mainFrame);
        }
        PeopleApp.getApplication().show(aboutBox);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        mainPanel = new javax.swing.JPanel();
        jButton2 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jButton3 = new javax.swing.JButton();
        jComboBox1 = new javax.swing.JComboBox();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        menuBar = new javax.swing.JMenuBar();
        javax.swing.JMenu fileMenu = new javax.swing.JMenu();
        javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();
        javax.swing.JMenu helpMenu = new javax.swing.JMenu();
        javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem();
        statusPanel = new javax.swing.JPanel();
        javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator();
        statusMessageLabel = new javax.swing.JLabel();
        statusAnimationLabel = new javax.swing.JLabel();
        progressBar = new javax.swing.JProgressBar();

        mainPanel.setName("mainPanel"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(people.PeopleApp.class).getContext().getActionMap(PeopleView.class, this);
        jButton2.setAction(actionMap.get("delete")); // NOI18N
        jButton2.setIcon(null);
        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(people.PeopleApp.class).getContext().getResourceMap(PeopleView.class);
        jButton2.setText(resourceMap.getString("jButton2.text")); // NOI18N
        jButton2.setName("jButton2"); // NOI18N

        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        jTextField1.setText(resourceMap.getString("jTextField1.text")); // NOI18N
        jTextField1.setEnabled(false);
        jTextField1.setName("jTextField1"); // NOI18N

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N

        jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
        jLabel3.setName("jLabel3"); // NOI18N

        jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N
        jLabel4.setName("jLabel4"); // NOI18N

        jTextField2.setText(resourceMap.getString("jTextField2.text")); // NOI18N
        jTextField2.setEnabled(false);
        jTextField2.setName("jTextField2"); // NOI18N

        jTextField3.setText(resourceMap.getString("jTextField3.text")); // NOI18N
        jTextField3.setEnabled(false);
        jTextField3.setName("jTextField3"); // NOI18N

        jTextField4.setText(resourceMap.getString("jTextField4.text")); // NOI18N
        jTextField4.setEnabled(false);
        jTextField4.setName("jTextField4"); // NOI18N

        jButton3.setAction(actionMap.get("update")); // NOI18N
        jButton3.setText(resourceMap.getString("jButton3.text")); // NOI18N
        jButton3.setName("jButton3"); // NOI18N

        jComboBox1.setEnabled(false);
        jComboBox1.setName("jComboBox1"); // NOI18N
        jComboBox1.addPopupMenuListener(new javax.swing.event.PopupMenuListener() {
            public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) {
            }
            public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {
                jComboBox1PopupMenuWillBecomeInvisible(evt);
            }
            public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {
            }
        });

        jButton4.setAction(actionMap.get("clearForm")); // NOI18N
        jButton4.setText(resourceMap.getString("jButton4.text")); // NOI18N
        jButton4.setName("jButton4"); // NOI18N

        jButton5.setAction(actionMap.get("save")); // NOI18N
        jButton5.setText(resourceMap.getString("jButton5.text")); // NOI18N
        jButton5.setName("jButton5"); // NOI18N

        jButton1.setAction(actionMap.get("add")); // NOI18N
        jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N

        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButton3)
                    .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
                    .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, mainPanelLayout.createSequentialGroup()
                        .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 252, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 78, Short.MAX_VALUE))
                    .addGroup(mainPanelLayout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)
                            .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)
                            .addComponent(jTextField1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)
                            .addGroup(mainPanelLayout.createSequentialGroup()
                                .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(jButton5, javax.swing.GroupLayout.DEFAULT_SIZE, 100, Short.MAX_VALUE)
                                .addGap(19, 19, 19)
                                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jTextField4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE))))
                .addContainerGap())
        );
        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton3)
                    .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton4)
                    .addComponent(jButton1)
                    .addComponent(jButton5))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        menuBar.setName("menuBar"); // NOI18N

        fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N
        fileMenu.setName("fileMenu"); // NOI18N

        exitMenuItem.setAction(actionMap.get("quit")); // NOI18N
        exitMenuItem.setText(resourceMap.getString("exitMenuItem.text")); // NOI18N
        exitMenuItem.setName("exitMenuItem"); // NOI18N
        fileMenu.add(exitMenuItem);

        menuBar.add(fileMenu);

        helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N
        helpMenu.setName("helpMenu"); // NOI18N

        aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N
        aboutMenuItem.setText(resourceMap.getString("aboutMenuItem.text")); // NOI18N
        aboutMenuItem.setName("aboutMenuItem"); // NOI18N
        helpMenu.add(aboutMenuItem);

        menuBar.add(helpMenu);

        statusPanel.setName("statusPanel"); // NOI18N

        statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N

        statusMessageLabel.setName("statusMessageLabel"); // NOI18N

        statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N

        progressBar.setName("progressBar"); // NOI18N

        javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel);
        statusPanel.setLayout(statusPanelLayout);
        statusPanelLayout.setHorizontalGroup(
            statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(statusPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(statusMessageLabel)
                .addGap(194, 194, 194)
                .addComponent(statusAnimationLabel)
                .addContainerGap())
            .addComponent(statusPanelSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 445, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, statusPanelLayout.createSequentialGroup()
                .addContainerGap(289, Short.MAX_VALUE)
                .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        statusPanelLayout.setVerticalGroup(
            statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, statusPanelLayout.createSequentialGroup()
                .addGap(2, 2, 2)
                .addComponent(statusPanelSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(statusMessageLabel)
                    .addComponent(statusAnimationLabel))
                .addGap(11, 11, 11))
        );

        setComponent(mainPanel);
        setMenuBar(menuBar);
        setStatusBar(statusPanel);
    }// </editor-fold>                        

private void jComboBox1PopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {                                                        
    java.sql.Connection c = null;
    java.sql.Statement stmnt = null;
    try{
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        c = java.sql.DriverManager.getConnection("jdbc:odbc:peopledb");
        stmnt = c.createStatement();

        String query = "SELECT name, age, sex, contact FROM [people$] WHERE name='" + jComboBox1.getSelectedItem().toString() + "'";
        java.sql.ResultSet rs = stmnt.executeQuery(query);
        while(rs.next()) {
            jTextField1.setText(rs.getString("name"));
            jTextField2.setText(rs.getString("age"));
            jTextField3.setText(rs.getString("sex"));
            jTextField4.setText(rs.getString("contact"));
        }
    }catch(Exception e){
        System.out.println(e);
    }
    jButton5.setEnabled(true);
}                                                       

    @Action
    public void update() {
        java.sql.Connection c = null;
        java.sql.Statement stmnt = null;
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = java.sql.DriverManager.getConnection("jdbc:odbc:peopledb");
            stmnt = c.createStatement();
            String query = "SELECT name FROM [people$]";
            java.sql.ResultSet rs = stmnt.executeQuery(query);
            
            jComboBox1.removeAllItems();
            while(rs.next()) {
                String str = rs.getString("name");
                if (str.length() > 0) {
                    jComboBox1.addItem(str);
                }
            }
        }catch(Exception e){
            System.out.println(e);
        }
        jComboBox1.setEnabled(true);
        jButton2.setEnabled(true);
        jButton1.setEnabled(true);
        jButton4.setEnabled(true);
        jTextField1.setEnabled(true);
        jTextField2.setEnabled(true);
        jTextField3.setEnabled(true);
        jTextField4.setEnabled(true);
        clearForm();
    }

    @Action
    public void add() {
        java.sql.Connection c = null;
        java.sql.Statement stmnt = null;
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = java.sql.DriverManager.getConnection("jdbc:odbc:peopledb");
            stmnt = c.createStatement();
            String query = "INSERT INTO [people$] (pid, name, age, sex, contact) VALUES ('" + (jComboBox1.getItemCount()+1) + "', '" + jTextField1.getText().toString() + "', '" + jTextField2.getText().toString() + "', '" + jTextField3.getText().toString() + "', '" + jTextField4.getText().toString()+"')";
            stmnt.executeQuery(query);
        }catch(Exception e){
            System.out.println(e);
        }
        clearForm();
        update();
    }

    @Action
    public void clearForm() {
        jTextField1.setText("");
        jTextField2.setText("");
        jTextField3.setText("");
        jTextField4.setText("");
    }

    @Action
    public void delete() {
        java.sql.Connection c = null;
        java.sql.Statement stmnt = null;
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = java.sql.DriverManager.getConnection("jdbc:odbc:peopledb");
            
            stmnt = c.createStatement();
            //String query = "DELETE * FROM [people$] WHERE name='"+ jComboBox1.getSelectedItem().toString() +"'";
            //String query = "UPDATE [people$] SET pid='', name='', age='', sex='', contact='' WHERE name='"+jComboBox1.getSelectedItem().toString()+"'";
            String query = "UPDATE [people$] SET pid=null, name='', age=null, sex='', contact='' WHERE name='"+jComboBox1.getSelectedItem().toString()+"'";
            //System.out.println(jComboBox1.getSelectedItem().toString());
            System.out.println(query);
            //String query = "DELETE * FROM [people$] WHERE name='"+ jComboBox1.getSelectedItem().toString() +"'";
            //stmnt.executeQuery(query);
            //stmnt.execute(query);
            stmnt.executeUpdate(query);
            
        }catch(Exception e){
            System.out.println(e);
        }
        update();
    }

    @Action
    public void save() {
        java.sql.Connection c = null;
        java.sql.Statement stmnt = null;
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = java.sql.DriverManager.getConnection("jdbc:odbc:peopledb");
            stmnt = c.createStatement();
            //int tmp = (jComboBox1.getSelectedIndex()+1);
            //String query = "UPDATE [people$] SET pid='"+(jComboBox1.getSelectedIndex()+1)+"', name='"+jTextField1.getText().toString()+"', age='" + jTextField2.getText().toString() + "', sex='" + jTextField3.getText().toString() + "', contact='" + jTextField4.getText().toString() + "' WHERE pid='"+tmp+"'";
            String query = "UPDATE [people$] SET pid="+(jComboBox1.getSelectedIndex()+1)+", name='"+jTextField1.getText().toString()+"', age=" + jTextField2.getText() + ", sex='" + jTextField3.getText().toString() + "', contact='" + jTextField4.getText().toString() + "' WHERE pid="+(jComboBox1.getSelectedIndex()+1);
            System.out.println(query);
            stmnt.executeQuery(query);
        }catch(Exception e){
            System.out.println(e);
        }
        update();
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JTextField jTextField3;
    private javax.swing.JTextField jTextField4;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JProgressBar progressBar;
    private javax.swing.JLabel statusAnimationLabel;
    private javax.swing.JLabel statusMessageLabel;
    private javax.swing.JPanel statusPanel;
    // End of variables declaration                   
    
    private final Timer messageTimer;
    private final Timer busyIconTimer;
    private final Icon idleIcon;
    private final Icon[] busyIcons = new Icon[15];
    private int busyIconIndex = 0;

    private JDialog aboutBox;
}


Это сообщение отредактировал(а) Win MK 32 - 3.1.2009, 16:53
PM   Вверх
rygel
Дата 3.1.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 110
Регистрация: 21.9.2007
Где: Харьков

Репутация: 6
Всего: 7



Во-первых у тебя не закрываются коннекшены. (c.close())
Во-вторых - перед закрытием сделай коммит (c.commit())

пример: http://www.java2s.com/Code/Java/Database-S.../JDBCupdate.htm

можно и не делать коммит, а просто close.. но это зависит от имплементации jdbc драйвера.. потому рекомендуется вызывать сначал commit

Это сообщение отредактировал(а) rygel - 3.1.2009, 19:29
PM MAIL   Вверх
Win MK 32
Дата 3.1.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не помогло :(((

Это сообщение отредактировал(а) Win MK 32 - 3.1.2009, 21:03
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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