Помогите реализовать следующее. Есть таблица (данные берутся из бд). На пример в ней отображаются: марка машины,год выпуска и тип(купе,седан и др). Ниже таблицы располагается Jtextfield. Пользователь становиться на строку и в Jtextfield отображается цвет машины. Нажимает кнопку вниз или вверх - Jtextfield динамически изменяется. модель таблицы | Код | 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 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 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.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://localhost:5432/"+DBNAME,USERNAME,PASSWORD); ("jdbc:postgresql://ip: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; } //--------------------------------------------------------------------------------------------
public void setValueAt(Object value, int row, int column) { try { String columnName = getColumnName(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); 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(); // 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 { // 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 { 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(); columnNames = new String[numberOfColumns]; for(int column = 1; column <= numberOfColumns; column++) { columnNames[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"); } //------------------------------------------------------ }
|
Это сообщение отредактировал(а) izver84 - 13.2.2009, 15:59
--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
|