
Опытный
 
Профиль
Группа: Участник
Сообщений: 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). Когда второй раз пользователь выбирает дату, таблица не обновляется. В чем дело не понятно?
--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
|