рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдПрдХ рдЯрд░реНрдо рдкреЗрдкрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢реНрд░рдо рдирд╣реАрдВ рд╣реБрдЖред рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╖рдп рдЪреБрдирд╛, рдПрдХ рдИрдЖрд░-рдЖрд░реЗрдЦ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреЛрдИ рднрд╛рд╖рд╛ рдирд╣реАрдВ рдЪреБрдиреА рдереА, рдЙрд╕ рд╕рдордп рдореИрдВрдиреЗ рдЧреНрд░рд╣рдг рдореЗрдВ рдЬрд╛рд╡рд╛ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдПрдХ рдбреАрдмреАрдПрдордПрд╕ рдЪреБрдирд╛, рдореЗрд░реА рдкрд╕рдВрдж рдлрд╛рдпрд░рдмрд░реНрдб рдкрд░ рдЧрд┐рд░ рдЧрдИред рдореИрдВрдиреЗ IBExpert рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╕рдм рдХреБрдЫ рд╕реЗ рдкреНрд░рд╕рдиреНрди рдерд╛, рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдпреВрдЖрдИ рдХреЛ рдПрдХ-рджреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдХреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдХреЛрдб рднрдпрд╛рдирдХ рдирд┐рдХрд▓рд╛ (рдореИрдВрдиреЗ OOP рдирд╣реАрдВ рд╕реБрдирд╛? рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ), рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп рд╕рдм рдХреБрдЫ рдореБрдЭреЗ рдкреНрд░рд╕рдиреНрди рдХрд░ рдЧрдпрд╛ред рдПрдХ рд╕рд╛рд▓ рдмреАрдд рдЧрдпрд╛ рдФрд░ рд╕рдВрдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рдПрдХ рдЕрддреБрд▓рдиреАрдп рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднрдпрд╛рдирдХ рдерд╛ред
рдореИрдВрдиреЗ рдХрдИ рд▓рдХреНрд╖реНрдп рддрдп рдХрд┐рдП:
- рдЖрд╕рд╛рди рдЬреЛрдбрд╝рдиреЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ
- рдЕрдВрдд рдореЗрдВ OOP рд▓рд╛рдЧреВ рдХрд░реЗрдВ
- рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП)
рдпрд╣ рдЕрдм рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдерд╛рди рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ (рдпрд╛ рдЖрд▓рд╕реНрдп) рд▓рд┐рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд╛рджрдЧреА рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рджреГрд╖реНрдЯрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ)ред
рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ
рдбреЗрдЯрд╛рдмреЗрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП
- рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╣рдг рдЖрдИрдбреАрдИ
- рдлрд╛рдпрд░рдмрд░реНрдб
- рдЬрдпрдмрд░реНрдб (JDBC рдбреНрд░рд╛рдЗрд╡рд░, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЬрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА)
- IBExpert (рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП)
рдпрд╣ рд╕рдм рдмрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреЛрдб рд▓реЗрдЦрди
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ID рдФрд░ RANK рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рд░реИрдВрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрдЧреАред

рдореИрдВрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдВрдЧ рдХреЛ рдЪреБрдирд╛ред
рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА
- рддрд╛рд▓рд┐рдХрд╛ рдЪрдпрди
- рдЖрдЙрдЯрдкреБрдЯ \ рддрд╛рд▓рд┐рдХрд╛ рдЕрджреНрдпрддрди
- рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝реЗрдВ / рд╣рдЯрд╛рдПрдБ рдбрд╛рд▓реЗрдВ
рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдЧрд╛

рдореИрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реВрдВ
- рдореБрдЦреНрдп рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╡рд░реНрдЧ (..) (рдЖрд╡реЗрджрди)
- рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди (DBHelper)
- рдХрд┐рд╕реА рднреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдореЙрдбрд▓ (AbsTable, рдЯреЗрдмрд▓реНрд╕)
- рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ (BaseFrame) рдФрд░ рд╡рд╛рд░рд┐рд╕ рддрд╛рд▓рд┐рдХрд╛рдУрдВ (RankFrame) рдХреА рдХрдХреНрд╖рд╛рдПрдВ
- рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рдШрдЯрдХ рдмрдирд╛рддрд╛ рд╣реИ (рдШрдЯрдХ)
- Android рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рддрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ (рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕)
рдПрдХ рдЯреЗрдмрд▓ рдореЙрдбрд▓ рд▓реЗрдЦрди
рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдИрдбреА - рдЗрдВрдЯреЗрдЧрд░ рдФрд░ рд░реИрдВрдХ - рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред рд╕реНрддрдВрднреЛрдВ рдХреЗ рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред
рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдЯреЗрдмрд▓реНрд╕ рдореЗрдВ рд░рдЦреЗрдВред рд╕рднреА рдирдП рдмрдирд╛рдП рдЧрдП рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рднреА рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
public class Tables { public static final Class<?>[] RANKS_TYPE = { Integer.class, String.class }; public static final String[] RANKS_TABLE = { "ID", "Rank" }; }
рд╣рдо AbsTable рдХреНрд▓рд╛рд╕ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ (AbstractTableModel рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА), рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ; рдЖрдкрдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдмрд▓реНрд╕ рд╡рд░реНрдЧ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИред рддреЛ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдмреЗрдХрд╛рд░ рдирдХрд▓ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
public class AbsTable extends AbstractTableModel { private List<String> mColumnNames; private List<ArrayList<Object>> mTableData; private List<Object> mColumnTypes; public AbsTable(Class<?>[] types, String[] columns) { mColumnTypes = new ArrayList<Object>(types.length); mColumnNames = new ArrayList<String>(columns.length); for (int i = 0; i < columns.length; ++i) { mColumnTypes.add(i, types[i]); mColumnNames.add(columns[i]); } } @Override public int getColumnCount() { return mColumnNames.size(); } @Override public int getRowCount() { return mTableData.size(); } @Override public Object getValueAt(int row, int column) { return mTableData.get(row).get(column); } public String getColumnName(int column) { return mColumnNames.get(column); } @Override public boolean isCellEditable(int row, int column) { return false; } @Override public void setValueAt(Object obj, int row, int column) { } @Override public Class<?> getColumnClass(int col) { return (Class<?>) mColumnTypes.get(col); } public void setTableData(ArrayList<ArrayList<Object>> tableData) { mTableData = tableData; } }
DB рдХрдиреЗрдХреНрд╢рди
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рдиреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред рдЖрдк getInstance () рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрдиреЗрдХреНрдЯ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ FDB рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб / рдкрде рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧреЗрдЯрдбрд╛рдЯрд╛ (рд╕реНрдЯреНрд░рд┐рдВрдЧ sql) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд▓реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рд╣рдореЗрдВ рдЕрдм рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд░рд┐рд▓реАрдЬ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
public class DBHelper { private Connection dbConnection; private static DBHelper sDBHelper ; private static final String DRIVER = "org.firebirdsql.jdbc.FBDriver"; private static final String URL = "jdbc:firebirdsql:localhost/3050:C:\\DB\\DB.FDB"; private static final String LOGIN = "SYSDBA"; private static final String PASSWORD = "masterkey"; public static synchronized DBHelper getInstance() { if (sDBHelper == null) { sDBHelper = new DBHelper (); } return sDBHelper ; } private DBHelper () { } public void connect() { try { Class.forName(DRIVER); dbConnection = DriverManager.getConnection(URL, LOGIN, PASSWORD); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public PreparedStatement getPrepareStatement(String sql) throws SQLException { return dbConnection.prepareStatement(sql); } public synchronized ArrayList<ArrayList<Object>> getData(String query) { ArrayList<ArrayList<Object>> dataVector = new ArrayList<ArrayList<Object>>(); Statement st = null; ResultSet rs = null; try { st = dbConnection.createStatement(); rs = st.executeQuery(query); int columns = rs.getMetaData().getColumnCount(); while (rs.next()) { ArrayList<Object> nextRow = new ArrayList<Object>(columns); for (int i = 1; i <= columns; i++) { nextRow.add(rs.getObject(i)); } dataVector.add(nextRow); } } catch (SQLException e) { e.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } } return dataVector; } public void release() { if (sDBHelper != null) { sDBHelper = null; } if (dbConnection != null) { try { dbConnection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
рдШрдЯрдХ рдирд┐рд░реНрдорд╛рдг
рд╣рдореЗрдВ JTable, JScrollPane, JComboBox, JLabel, JTextField, JButton рдЬреИрд╕реЗ рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╕рдордп рдШрдЯрдХ рдирд┐рд░реНрдорд╛рдг рдХреЛрдб рдХреА рдмреЗрдХрд╛рд░ рдирдХрд▓ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public class Components { public static AbsTable createTableModel(Class<?>[] types, String[] col, String sql) { AbsTable table = new AbsTable(types, col); table.setTableData(DBHelper .getInstance().getData(sql)); return table; } public static JTable createTable(AbsTable model) { JTable table = new JTable(model); table.getColumnModel().getColumn(0).setMaxWidth(50); return table; } public static JScrollPane createScroll(JTable table) { return new JScrollPane(table); } public static JComboBox<String> createCombo(String[] items, ItemListener listener) { JComboBox<String> combo = new JComboBox<String>(items); combo.setEditable(false); combo.setSelectedIndex(-1); combo.addItemListener(listener); return combo; } public static JLabel createLabel(String name) { JLabel label = new JLabel(name); label.setHorizontalTextPosition(JLabel.LEFT); label.setIconTextGap(5); label.setForeground(Color.black); return label; } public static JTextField createEdit(String text) { JTextField tf= new JTextField(text); tf.setEditable(true); tf.setForeground(Color.black); return tf; } public static JButton createButton(String name, ActionListener listener) { JButton button = new JButton(name); button.addActionListener(listener); return button; } }
рдлреНрд░реЗрдо рдФрд░ рдЯреЗрдмрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдЯреЗрдмрд▓
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдВ рдЯреЗрдмрд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЯреЗрдмрд▓ рдХреЛ \ update \ de рд╣рдЯрд╛рдирд╛ \ _ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо JFrame рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдПрдХ рдЖрдзрд╛рд░ рд╕рд╛рд░ рд╡рд░реНрдЧ BaseFrame рдмрдирд╛рдПрдВрдЧреЗред
рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЗ рдЬреЛрдбрд╝ / рд╡рд┐рд▓реЛрдкрди / рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдРрдб (), рдбрд┐рд▓реАрдЯ (), рд╕реЗрд╡ (), рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ DBHelper рд╣реИ)ред
рдлреНрд░реЗрдо рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛
- рдЯреЗрдмрд▓ JTable
- рдЬреЗрдмрдЯрди рдмрдЯрди \ save \ delete рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
- JScrollPane рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ
рдпрд╣ рд╕рдм рд╕рднреА рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ, рд╣рдо рдмрдЯрди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╢рди рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдХрдХреНрд╖реЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП ListSelectionListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
abstract class BaseFrame extends JFrame implements ListSelectionListener { protected JButton mDeleteBtn; protected JButton mAddBtn; protected JButton mSaveBtn; protected JPanel mControlArea; protected JPanel mEditArea; protected JScrollPane mScroll; protected JTable mTable; protected Container mContainer; protected AbsTable mTableModel; protected DBHelper sDBHelper ; private static final int SIZE_X = 300; private static final int SIZE_Y = 450; public BaseFrame(String name) { super(name); sDBHelper = DBHelper .getInstance(); sBDHelper.connect(); mAddBtn = Components.createButton(Strings.ADD, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { add(); } }); mDeleteBtn = Components.createButton(Strings.DELETE, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { delete(); } }); mSaveBtn = Components.createButton(Strings.SAVE, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { save(); } }); setSize(new Dimension(SIZE_X, SIZE_Y)); setVisible(true); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } abstract void updateTable(); abstract void add(); abstract void delete(); abstract void save(); }
рдЕрдВрдд рдореЗрдВ рд╣рдо рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 2 JTextField рдФрд░ 2 JLabel рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рдо рдШрдЯрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдлреНрд░реЗрдо рдореЗрдВ рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рдЕрдореВрд░реНрдд рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рдПрдВ \ n рдЬреЛрдбрд╝реЗрдВ) рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП SQL рдХрд╛ рдереЛрдбрд╝рд╛ рдЬреНрдЮрд╛рди рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдУрд╡рд░рд░рд╛рдЗрдб рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВред рд╣рдо рд╕реЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд▓реНрдпреВрдЪреЗрдВрдЬреНрдб (..) рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
public class RanksFrame extends BaseFrame { private JLabel mIdLabel; private JLabel mRankLabel; private JTextField mIdEdit; private JTextField mRankEdit; public RanksFrame() { super(Strings.RANK); mContainer = getContentPane(); mTableModel = Components.createTableModel(Tables.RANKS_TYPE, Tables.RANKS_TABLE, "SELECT * FROM RANKS ORDER BY ID"); mTable = Components.createTable(mTableModel); mScroll = Components.createScroll(mTable); mIdLabel = Components.createLabel(Strings.ID); mIdEdit = Components.createEdit(""); mRankLabel = Components.createLabel(Strings.RANK); mRankEdit = Components.createEdit(""); mTable.getSelectionModel().addListSelectionListener(this); mControlArea = new JPanel(new GridLayout(1, 3)); mEditArea = new JPanel(new GridLayout(2, 2)); mEditArea.add(mIdLabel); mEditArea.add(mIdEdit); mEditArea.add(mRankLabel); mEditArea.add(mRankEdit); mControlArea.add(mSaveBtn); mControlArea.add(mDeleteBtn); mControlArea.add(mAddBtn); mContainer.add(mScroll); mContainer.add(mEditArea); mContainer.add(mControlArea); mContainer.setLayout(new BoxLayout(mContainer, BoxLayout.Y_AXIS)); } @Override public void updateTable() { SwingUtilities.invokeLater(new Runnable() { public void run() { mTableModel.setTableData(sBDHelper .getData("SELECT * FROM RANKS ORDER BY ID")); mTable.updateUI(); mRankEdit.setText(null); mIdEdit.setText(null); } }); } @Override public void add() { PreparedStatement ps = null; try { ps = sBDHelper .getPrepareStatement("INSERT INTO RANKS (ID,RANK) VALUES(?,?)"); ps.setString(1, mIdEdit.getText()); ps.setString(2, mRankEdit.getText()); ps.executeUpdate(); } catch (SQLException r) { r.printStackTrace(); } finally { if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } updateTable(); } } @Override public void delete() { PreparedStatement ps = null; try { ps = sBDHelper.getPrepareStatement("DELETE FROM RANKS WHERE ID=?"); ps.setString(1, mIdEdit.getText()); ps.executeUpdate(); } catch (SQLException r) { r.printStackTrace(); } finally { if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } updateTable(); } } @Override public void save() { PreparedStatement ps = null; try { ps = sBDHelper .getPrepareStatement("UPDATE RANKS SET RANK=? WHERE ID=?"); ps.setString(1, mRankEdit.getText()); ps.setString(2, mIdEdit.getText()); ps.executeUpdate(); } catch (SQLException r) { r.printStackTrace(); } finally { if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } updateTable(); } } @Override public void valueChanged(ListSelectionEvent e) { mIdEdit.setText(mTable.getModel() .getValueAt(mTable.getSelectedRow(), 0).toString()); mRankEdit.setText(mTable.getModel() .getValueAt(mTable.getSelectedRow(), 1).toString()); } }
рдЕрдВрдд рдирд┐рдХрдЯ рд╣реИ, рдЯреЗрдмрд▓ рдЪрдпрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рд╣рдо рдореБрдЦреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЪрдпрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ mTables рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ JComboBox рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЪрдпрдирд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рджрдмрд╛рдХрд░, рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рднреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдУрд╣, рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо WindowListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЙрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдмрд╛рдХреА рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдХреЛрдб рд╣реИ), рдмрдВрдж рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред
public class Application extends JFrame implements WindowListener { private String[] mTables = { "Ranks" }; private static final int RANKS = 0; private JComboBox<String> mComboMenu; public Application() throws SQLException { super(Strings.DB_NAME); mComboMenu = Components.createCombo(mTables, new ItemListener() { @Override public void itemStateChanged(ItemEvent evt) { switch (mComboMenu.getSelectedIndex()) { case RANKS: new RanksFrame(); break; } SwingUtilities.invokeLater(new Runnable() { public void run() { mComboMenu.setSelectedIndex(-1); } }); } }); Container container = getContentPane(); container.add(mComboMenu); container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 80); setResizable(false); setVisible(true); addWindowListener(this); } public static void main(String[] args) throws SQLException { new Application(); } @Override public void windowClosing(WindowEvent arg0) { DBHelper .getInstance().release(); } }
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдердХ рдирд╣реАрдВ, рд▓реЗрдЦ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд╢реИрдХреНрд╖рд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рд▓рд┐рдЦрдирд╛ / рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕ рднреНрд░рдо рдХреА рдЖрд╢рдВрдХрд╛ рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЫрд╛рддреНрд░ рдЖрдЦрд┐рд░ рдореЗрдВ рдмреИрдардХрд░ рдЦреБрдж рдбреЗрдЯрд╛рдмреЗрд╕ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдкреАрдПрд╕ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реА рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдПрдХ рд╕рдлрд▓рддрд╛ рдереА рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИред рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдореЗрдВред
рдпреБрдкреАрдбреА:
рд╡реЗрдХреНрдЯрд░ -> ArrayList рдзрдиреНрдпрд╡рд╛рдж javax
рдХрдИ рдХрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдзрдиреНрдпрд╡рд╛рдж gvsmirnov рдФрд░ aleksandy