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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JXDatePicker+Jtable, отображение данных в jtable  
V
    Опции темы
izver84
Дата 28.4.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как такое реализовать (в чем ошибка)?

В Фрейме есть компонент  JXDatePicker(календарь),кнопка,таблица.

1)
Пользователь выбирает в календаре дату
Код

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
            _DateString =df.format(JXDatePicker.getDate());        

     
Первая строка преобразование даты в необходимый формат. Вторая строка - переменной _DateString  задается значение выбранной даты.

2)
Нажимает на кнопку, таблица отображает данные согласно этой дате.

код кнопки 
Код

jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
          
                    jTable.setModel(getDB());//вызов модели
                
                }
            });


код вызова модели (передача параметров,значение getDB()) 
Код

private database getDB() {
        if (DB == null) {
            DB = new database(
        
                     "SELECT id,nbp,datbp,serd,nd,KPOT,npot,sumo,SUMV,SUMD,PR_ANNUL,KVOD FROM JRBP where  datbp='"+_DateString.toString()+"' ORDER BY nd",    
                     "database", "user", "password", "jrbp",new  String[]{"","Номер","Дата","Серия","Накладная","Код","Наименование","Сумма","Сумма 8%","Сумма 20%","Х","Код экспедитора"});
        }
        return DB;
    }


Который состоит из селекта (выборка),database - наименование базы,user -пользователь базы, password -пароль, jrbp - таблица,
new  String[] - шабка таблицы.

модель
Код

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;



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)
    {
        

      return columnNames[n];
    }
    public String getDBColumnName(int n)
    {
        

      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 tableName1, String tableName2,String[] columnNames)
    {
       
        this.columnNames = columnNames; 
        this.tableName = tableName;
        fireTableDataChanged();

        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://192.168.4.164:5432/"+DBNAME,USERNAME,PASSWORD);
        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;
    }
//--------------------------------------------------------------------------------------------

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

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

          if (colName==columnName)
           {
            continue;
           }
                     
                           if (col >1)
                           {
                             query = query + " and ";
                            }
                             query = query + colName +" = "+
                             dbRepresentation(col, getValueAt(row, col));
           }

        PreparedStatement pstmt =
        con.prepareStatement(query);
        pstmt.executeUpdate();
                Object val;
        val = tbRepresentation(column,value);
        Vector dataRow = (Vector)rows.elementAt(row);
        dataRow.setElementAt(val, column);
        fireTableDataChanged();
        
        fireTableCellUpdated(row,column);
        }
        catch (Exception ex)
        {
           System.err.println(ex);
        }
    }
    

//-------------------------------------------------------------------------------------------    
    public Object dbRepresentation(int column, Object value) throws NumberFormatException
    {
    
        Object val;
        int type;
        if (value == null)
        {
            return "null";
        }
        try
        {  
            
           type = metaData.getColumnType(column+1);
        
        }
        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:
                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().trim())+"'";
        }
     }
    //---------------------------------------------------------------------------------------
    public Object tbRepresentation(int column, Object value)   throws NumberFormatException
    {
        
        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());
               
        }
    }
    //---------------------------------------------------------------------------------------

    
    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();
        
                
              SqlReload(query1);
            }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
    }
  //---------------------------------------------------------------------------------------    
    
            
}



Во общем, в чем проблема. Первый раз все работает нормально (данные отображаются соответственно параметру _DateString).

Когда второй раз пользователь выбирает дату, таблица не обновляется. В чем дело не понятно?
  


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
CrasyMen
Дата 29.4.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сложно сказать. Если бы ты показал весь проект и дамп БД, то можно было бы поковыряться.


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
izver84
Дата 30.4.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



решил 

вызов модели не корректно работал
Код

private database getDB() {
        if (DB == null) {
            DB = new database(
        
                     "SELECT id,nbp,datbp,serd,nd,KPOT,npot,sumo,SUMV,SUMD,PR_ANNUL,KVOD FROM JRBP where  datbp='"+_DateString.toString()+"' ORDER BY nd",    
                     "database", "user", "password", "jrbp",new  String[]{"","Номер","Дата","Серия","Накладная","Код","Наименование","Сумма","Сумма 8%","Сумма 20%","Х","Код экспедитора"});
        }
        return DB;
    }


После первого вызова значение модели не пустое поэтому и не работало
Код

private database getDB() {
               DB = new database(
        
                     "SELECT id,nbp,datbp,serd,nd,KPOT,npot,sumo,SUMV,SUMD,PR_ANNUL,KVOD FROM JRBP where  datbp='"+_DateString.toString()+"' ORDER BY nd",    
                     "database", "user", "password", "jrbp",new  String[]{"","Номер","Дата","Серия","Накладная","Код","Наименование","Сумма","Сумма 8%","Сумма 20%","Х","Код экспедитора"});
             return DB;
    }


так работает



--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
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.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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