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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема в обновлении таблицы, обновление таблицы 
V
    Опции темы
skif18
Дата 7.4.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



Код

    @SuppressWarnings("unchecked")
    public void setValueAt(Object value, int row, int column)
    {
      try
        {
          String columnName = dbcolumnNames[column];

                     //     System.out.println(columnName);
                     //     System.out.println(dbRepresentation(column, value));
         String query =
            "UPDATE "+tableName+
            " SET "+columnName+" = "+
             dbRepresentation(column, value)+
            " WHERE ";
        
        for(int col = 0; col < getColumnCount();col++)
        {
        //  String colName = getColumnName(col);
          
          String colName = getDBColumnName(col);

          if (colName==columnName)
           {
            continue;
           }
                          if (col != 0)
                           {
                             query = query + " and ";
                            }
                             query = query + colName +" = "+
                             dbRepresentation(col, getValueAt(row, col));
           }
        System.out.println(query);
        PreparedStatement pstmt =
        con.prepareStatement(query);
        pstmt.executeUpdate();
//        System.out.println(pstmt.executeUpdate());
        Object val;
        val = tbRepresentation(column,value);
        Vector dataRow = (Vector)rows.elementAt(row);
        dataRow.setElementAt(val, column);
        fireTableDataChanged();
//        System.out.println(dataRow);
//        fireTableCellUpdated(row,column);
        }
        catch (Exception ex)
        {
           System.err.println(ex);
        }
    }

Просто не работает. 


--------------------

PM MAIL ICQ   Вверх
powerOn
Дата 8.4.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(skif18 @  7.4.2008,  18:37 Найти цитируемый пост)
Просто не работает.  

Просто где-то ошибка. 

P.S.: Если хочешь подробный ответ, давай подробное описание проблемы, что бы код можно было запустить и посмотреть что не работает.




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
skif18
Дата 8.4.2008, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



powerOn, сохранилось только 30% сообщения.  smile Ща попробую ещё раз выложить проблему....

Добавлено через 3 минуты и 37 секунд
Код

private JTable getJTable() throws NullPointerException {
        if (jTable == null) {
            jTable = new JTable();
            jTable.setRowSelectionAllowed(true);
            jTable.setCellSelectionEnabled(true);
            jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            jTable.setShowGrid(true);
            jTable.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
//            jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            jTable.setModel(getDB());
            jTable.getColumnModel().getColumn(0).setPreferredWidth(5);
            jTable.getColumnModel().getColumn(1).setPreferredWidth(35);
            jTable.getColumnModel().getColumn(2).setPreferredWidth(180);
            jTable.getColumnModel().getColumn(3).setPreferredWidth(50);
            jTable.getColumnModel().getColumn(4).setPreferredWidth(50);
            jTable.getColumnModel().getColumn(5).setPreferredWidth(30);
        }
        return jTable;
    }

Создание таблицы.

Код

private database getDB() {
        if (DB == null) {
            DB = new database(
                    "SELECT id, code, name, cena, cena1, type, vmenu FROM bliuda ORDER BY code",
                    "stol", "postgres", "syrus", "bliuda",new  String[]{"Ид","Код","Наим.","Цена1","Цена2","Тип","ВМеню"});
        }
        return DB;
    }

Модель таблицы.

Ну собственно 
Код


//import java.awt.Container;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;


//import org.postgresql.Driver;

/*
 * Created on 14.06.2004
 *
 * To change the template for this generated file go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */

/**
 * @author golden
 *
 * To change the template for this generated type comment go to
 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
 */
//@SuppressWarnings("serial")
public class database extends AbstractTableModel{
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public String[] columnNames;
    public String[] dbcolumnNames;
    public Vector rows = new Vector();
    public ResultSetMetaData metaData;
    public Statement statement;
    public ResultSet resultSet;
    public Connection con; 
    public String tableName;
    
    public int getColumnCount()
    {
      return columnNames.length;
    }

    public String getColumnName(int n)
    {
        
        //String[] columnNames = {"Фамилия", "Имя", "Отчество", "Дата"};
      return columnNames[n];
    }
    public String getDBColumnName(int n)
    {
        
        //String[] columnNames = {"Фамилия", "Имя", "Отчество", "Дата"};
      return dbcolumnNames[n];
    }
    public int getDBColumnCount()
    {
      return dbcolumnNames.length;
    }
    
    public int getRowCount()
    {
        return rows.size();
    }
    public int addRow()
    {

        int r=rows.size()+1;
        return r;
    }

    public Object getValueAt(int aRow, int aColumn)
    {
        Vector row = (Vector)rows.elementAt(aRow);
        
        return row.elementAt(aColumn);
    }
//-----------------------------------------------------------------------------------------------
    public database(String query, String DBNAME, String USERNAME, String PASSWORD, String tableName,String[] columnNames)
    {
       
        this.columnNames = columnNames; 
        this.tableName = tableName;
        fireTableDataChanged();
        @SuppressWarnings("unused")
        Driver d;
        try{
            d = (Driver)Class.forName("org.postgresql.Driver").newInstance();
        }
        catch (Exception e) {
            System.out.println("Error 1");
            System.out.println(e.getStackTrace());
        }
        try{
            con = DriverManager.getConnection
        //("jdbc:postgresql://localhost:5432/"+DBNAME,USERNAME,PASSWORD);
            ("jdbc:postgresql://localhost:5432/"+DBNAME,USERNAME,PASSWORD);
    //    statement =con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

        statement = con.createStatement();
        SqlReload(query);
        }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
    }
    
//---------------------------------------------------------------------------------------------
    public boolean isCellEditable(int row, int column)
    {
        try
        {
          return metaData.isWritable(column+1);
        }
        catch (SQLException e)
        {
          return false;
        }
          // return true;
    }
//--------------------------------------------------------------------------------------------
    @SuppressWarnings("unchecked")
    public void setValueAt(Object value, int row, int column)
    {
      try
        {
          String columnName = dbcolumnNames[column];

                     //     System.out.println(columnName);
                     //     System.out.println(dbRepresentation(column, value));
         String query =
            "UPDATE "+tableName+
            " SET "+columnName+" = "+
             dbRepresentation(column, value)+
            " WHERE ";
        
        for(int col = 0; col < getColumnCount();col++)
        {
        //  String colName = getColumnName(col);
          
          String colName = getDBColumnName(col);

          if (colName==columnName)
           {
            continue;
           }
                          if (col != 0)
                           {
                             query = query + " and ";
                            }
                             query = query + colName +" = "+
                             dbRepresentation(col, getValueAt(row, col));
           }
        System.out.println(query);
        PreparedStatement pstmt =
        con.prepareStatement(query);
        pstmt.executeUpdate();
        System.out.println(pstmt.executeUpdate());
        Object val;
        val = tbRepresentation(column,value);
        Vector dataRow = (Vector)rows.elementAt(row);
        dataRow.setElementAt(val, column);
        fireTableDataChanged();
//        System.out.println(dataRow);
//        fireTableCellUpdated(row,column);
        }
        catch (Exception ex)
        {
           System.err.println(ex);
        }
    }
    

//-------------------------------------------------------------------------------------------    
    public Object dbRepresentation(int column, Object value) throws NumberFormatException
    {
        @SuppressWarnings("unused")
        Object val;
        int type;
        if (value == null)
        {
            return "null";
        }
        try
        {  //   System.out.println("column+1");    System.out.println("type");
            
           type = metaData.getColumnType(column+1);
        //   System.out.println("type");
        //   System.out.println(type);
        }
        catch (SQLException e)
        {
          return value.toString();
        }
        
        
        switch(type)
        {
            case Types.BIGINT:
                return val = new Long(value.toString().trim());
            case Types.CHAR:
                // System.out.println("CHAR");
                 return val = "'"+new String(value.toString().trim())+"'";
            case Types.TINYINT:
            case Types.SMALLINT:
            case Types.INTEGER:
//                 System.out.println("INTEGER");
                return val = new Integer(value.toString().trim());
            
            case Types.REAL:
            case Types.FLOAT:
            case Types.DOUBLE:
            case Types.NUMERIC:
//                 System.out.println("NUMERIC");
                return val = new Double(value.toString().trim());
            
            default: return val = "'"+new String(value.toString().trim())+"'";
        }
     }
    //---------------------------------------------------------------------------------------
    public Object tbRepresentation(int column, Object value)   throws NumberFormatException
    {
        @SuppressWarnings("unused")
        Object val;
        int type;
        if (value == null)
         {   return "null";   }
      try
       { type = metaData.getColumnType(column+1); }
      catch (SQLException e) {   return value.toString().trim(); }

      switch(type)
       {
         case Types.BIGINT:
               return val = new Long(value.toString().trim());
         case Types.TINYINT:
         case Types.SMALLINT:
         case Types.INTEGER:
              return val = new Integer(value.toString().trim());
         case Types.REAL:
         case Types.FLOAT:
         case Types.DOUBLE:
         case Types.NUMERIC:     
               return val = new Double(value.toString().trim());
         default: return val = new String(value.toString());
               
        }
    }
    //---------------------------------------------------------------------------------------

    @SuppressWarnings("unchecked")
    public void SqlReload(String query)
    {
     try{
         fireTableDataChanged();
                resultSet = statement.executeQuery(query);
                metaData = resultSet.getMetaData();
                int numberOfColumns =  metaData.getColumnCount();
                dbcolumnNames = new String[numberOfColumns];
                for(int column = 1; column <= numberOfColumns; column++)
                {
                    dbcolumnNames[column-1] =
                    metaData.getColumnName(column);
                }
                rows = new Vector();
                while (resultSet.next())
                {
                   Vector newRow = new Vector();
                    for (int i = 1; i <=  getColumnCount(); i++)
                    {
                      newRow.addElement(resultSet.getObject(i));
                    }
                    
                    rows.addElement(newRow);
                }
     }
     catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
    }
//----------------------------------------------------------------------------------------
    public void SqlInsert(String query,String query1)
    {
            try{
                PreparedStatement pstmt =
                    con.prepareStatement(query);
                    pstmt.executeUpdate();
                   SqlReload(query1);
                }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
    }
//******************************************************************************************    
    
    public void Sql(String query1)
    {
            try{
                PreparedStatement pstmt =
                    con.prepareStatement(query1);
                    pstmt.executeUpdate();
//                 SqlReload(query1);
                }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
    }
  //---------------------------------------------------------------------------------------
    public void SqlDelete(String query,String query1,int cur_row)
    {
            try{   
                String query_=query;
                query_= query_ + tbRepresentation(0, getValueAt(cur_row, 0));
                fireTableDataChanged();
                PreparedStatement pstmt = con.prepareStatement(query_);
            
                  System.out.println(query_);
                
                pstmt.executeUpdate();
             //   System.out.println(pstmt.execute());
            //    PreparedStatement pstmt =
            //    con.prepareStatement(query_);
            //    pstmt.setDouble(1,cur_row);
            //    query_= query_ + dbRepresentation(0, getValueAt(cur_row, 0));
//                System.out.println(pstmt.executeUpdate()); 
             //   System.out.println(query_);
                
              SqlReload(query1);
            }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
    }
  //---------------------------------------------------------------------------------------    
    
     public void fireTableRowsDeleted(int firstRow, int lastRow) {
//         System.out.println("fireTableRowsDeleted");
          //  rows.remove(firstRow);
          }
     public void fireTableRowsInserted(int firstRow, int lastRow) {
        // Vector newRow = new Vector();
        //    for (int i = 1; i <=  getColumnCount(); i++)
        //    {
        //      newRow.addElement(resultSet.getObject(i));
        //    }
                //    rows.addElement(newRow);
//         System.out.println("fireTableRowsInserted");
          }    
    
    
//------------------------------------------------------
}


Что самое интересное  - в этой же проге есть другая таблица так с ней все ок.  smile 


--------------------

PM MAIL ICQ   Вверх
skif18
Дата 8.4.2008, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



Скорее всего не работает обновление потому что есть хотя бы одно значение null в строке. executeUpdate() тогда дает 0. Если заполнить поля стандартными значениями то все идет...


--------------------

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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