1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
8064
8064
EMPFEHLEN
-
10.03.04 11:52 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Beispiel JTable Mysql:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; /** * @author Darimont<br> * @version 1.0<br> * Date of creation: 10.03.2004<br> * File: JTableExample.java<br> * Modifier: Darimont<br> * Revision: Revision<br> * State: Germany<br> */ public class JTableExample extends JFrame { private static final String dbDriverClass = "org.gjt.mm.mysql.Driver"; static { try { try { Thread .currentThread() .getContextClassLoader() .loadClass(dbDriverClass) .newInstance(); } catch (InstantiationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IllegalAccessException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private JButton btnConnect, btnRefresh; private JTextField txtSQL; private JTable table; private JScrollPane scrollPane; private DefaultTableModel dtm; private javax.swing.JPanel btnPanel, contentPanel; private final String dbName = "mysql"; private final int dbPort = 3306; private final String dbURL = "jdbc:mysql://localhost:" + dbPort + "/" + dbName; private final String dbUser = "Administrator"; private final String dbpasswd = ""; private MysqlDataSource ds; private Connection con; private ResultSet rs; public JTableExample() { super("JTableExample"); GridBagConstraints gridBagConstraints; contentPanel = new JPanel(); btnPanel = new JPanel(); btnConnect = new JButton(); btnRefresh = new JButton(); txtSQL = new JTextField(); scrollPane = new JScrollPane(); table = new JTable(); dtm = new DefaultTableModel(); getContentPane().setLayout(new FlowLayout()); setTitle("JTableExample"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { try { if (con != null && !con.isClosed()) { con.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } setVisible(false); dispose(); System.exit(0); } }); contentPanel.setLayout(new GridBagLayout()); contentPanel.setBackground(new Color(102, 153, 255)); contentPanel.setMinimumSize(new Dimension(400, 300)); contentPanel.setPreferredSize(new Dimension(400, 300)); btnPanel.setBackground(new Color(255, 153, 51)); btnPanel.setMinimumSize(new Dimension(400, 100)); btnPanel.setPreferredSize(new Dimension(400, 100)); btnConnect.setText("Connect"); btnPanel.add(btnConnect); btnRefresh.setText("Refresh"); btnPanel.add(btnRefresh); txtSQL.setColumns(25); btnPanel.add(txtSQL); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; contentPanel.add(btnPanel, gridBagConstraints); scrollPane.setMinimumSize(new Dimension(400, 200)); scrollPane.setPreferredSize(new Dimension(400, 200)); table.setModel(dtm); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); scrollPane.setViewportView(table); contentPanel.add(scrollPane, new GridBagConstraints()); getContentPane().add(contentPanel); setSize(400, 300); Container container = getContentPane(); //con.setLayout(FillLayout()); btnConnect.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub connect(); } }); btnRefresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub refresh(); } }); setVisible(true); } /** * */ protected void refresh() { // TODO Auto-generated method stub try { if (con == null || con.isClosed()) { JOptionPane.showMessageDialog( this, "Keine Datenbaknverbindung!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } Statement stmt = null; try { stmt = con.createStatement(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (stmt == null) { throw new RuntimeException("stmt is null"); } String sql = txtSQL.getText(); if (sql == null) { JOptionPane.showMessageDialog( this, "Keine SQL Abfrage angegeben!", "Fehler", JOptionPane.ERROR_MESSAGE); return; } try { rs = stmt.executeQuery(sql); } catch (SQLException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } putRSinTableModel(rs, dtm); table.setModel(dtm); table.updateUI(); } /** * @param rs * @param dtm */ private void putRSinTableModel(ResultSet rs, DefaultTableModel dtm) { // TODO Auto-generated method stub ResultSetMetaData rsmd = null; int clmCnt = -1; try { rsmd = rs.getMetaData(); clmCnt = rsmd.getColumnCount(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (rsmd == null || clmCnt == -1) { throw new RuntimeException("rsmd is null"); } try { rs.first(); rs.last(); int rowCnt = rs.getRow(); rs.first(); Object[][] odata = new Object[rowCnt][clmCnt]; Object[] clmHeaders = new Object[clmCnt]; for (int i = 1; i <= clmCnt; i++) { clmHeaders[i - 1] = rsmd.getColumnName(i); } int row = 0; while (rs.next()) { for (int i = 1; i <= clmCnt; i++) { System.out.print(rs.getString(i) + " "); odata[row][i - 1] = rs.getString(i); } row++; System.out.println(); } dtm.setDataVector(odata, clmHeaders); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } /** * */ protected void connect() { // TODO Auto-generated method stub if(con != null) return; ds = new MysqlDataSource(); ds.setDatabaseName(dbName); ds.setPort(dbPort); ds.setUser(dbUser); ds.setPassword(dbpasswd); ds.setURL(dbURL); try { con = ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { new JTableExample(); } }
Gruß Tom
-
03.04.04 18:40 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Um den Bug zu beheben, dass die erste Zeile ausgelassen wird...
einfach
rs.first();
durch
rs.beforeFirst();
ersetzen....
Gruß Tom
-
hast mir damit sehr
geholfen 
kann ich bei der in der dtm
table.setModel(dtm);
auch spalten deaktivieren, d.h. sie sollen nicht dargestellt werden.
gr33tz,
-
@Thomas Darimont
leider stoße ich mit deiner implementierung auf ein problem
hier
kannst du mir da evtl. helfen?
gondor(..)
-
11.08.04 23:02 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Neue Version der Beispielanwendung:
Die Main Klasse:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
package de.tutorials.main; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import de.tutorials.db.DatabaseHelper; public class Main extends JFrame { private DatabaseHelper hlp = new DatabaseHelper("localhost", "mysql", 3306, "root", ""); private JButton btnConnect, btnRefresh; private JTextField txtSQL; private JScrollPane scrollPane; private JTable table; private TableModel model; private final Dimension perfectSize; public Main() { super("Main"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { if (hlp != null) { hlp.disconnect(); System.out.println("disconnected"); hlp = null; } setVisible(false); dispose(); System.exit(0); } }); addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { if (!isVisible()) return; Dimension d = getSize(); if (d.width < perfectSize.width || d.height < perfectSize.height) { setSize(perfectSize); } } }); model = new DefaultTableModel(new Object[0][0], new Object[0]); table = new JTable(model); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); scrollPane = new JScrollPane(table); getContentPane().add(scrollPane, BorderLayout.NORTH); ActionListener handler = new ActionHanlder(); btnConnect = new JButton("Connect"); btnConnect.addActionListener(handler); btnRefresh = new JButton("Refresh"); btnRefresh.addActionListener(handler); JPanel panel = new JPanel(); panel.add(btnConnect, BorderLayout.WEST); panel.add(btnRefresh, BorderLayout.EAST); getContentPane().add(panel, BorderLayout.SOUTH); txtSQL = new JTextField(30); getContentPane().add(txtSQL, BorderLayout.CENTER); hlp.init(); pack(); setVisible(true); perfectSize = getSize(); } public static void main(String[] args) { new Main(); } class ActionHanlder implements ActionListener { public void actionPerformed(ActionEvent e) { Object src = e.getSource(); if (btnConnect == src) { hlp.connect(); System.out.println("connected"); } else if (btnRefresh == src) { String sql = txtSQL.getText(); if (sql != null && !sql.equals("") && !(sql.toLowerCase().indexOf("select") < 0)) { System.out.println("About to execute SQL: " + sql); Object[][] data = (Object[][]) hlp.transformResult(hlp .getResultFor(sql)); DefaultTableModel mod = (DefaultTableModel) model; mod.setDataVector(data, hlp.getColumnNames()); mod = null; table.setModel(model); table.updateUI(); } } } } }
Die DatabaseHelper Klasse:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
package de.tutorials.db; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; public class DatabaseHelper { static { try { Thread.currentThread().getContextClassLoader().loadClass( "com.mysql.jdbc.Driver").newInstance(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException( "Fehler beim laden des Datenbank Treibers!\n Liegt der Treiber im Classpath?"); } } private Connection con; private MysqlDataSource dataSource = new MysqlDataSource(); private String userName; private String passWord; private String hostName; private String dbName; private int port; private Object[] columnNames; public DatabaseHelper(String hostName, String dbName, int port, String userName, String passWord) { this.hostName = hostName; this.dbName = dbName; this.port = port; this.userName = userName; this.passWord = passWord; dataSource.setServerName(hostName); dataSource.setDatabaseName(dbName); dataSource.setPort(port); dataSource.setUser(userName); dataSource.setPassword(passWord); } public void init() { connect(); } public void connect() { if (con == null) try { con = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } } public void disconnect() { if (con != null) try { if (!con.isClosed()) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { con = null; } } public ResultSet getResultFor(String sql) { if (con == null) return null; try { Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); return rs; } catch (SQLException e) { e.printStackTrace(); } return null; } public Object[][] transformResult(ResultSet rs) { if (rs == null) { return new Object[0][0]; } try { ResultSetMetaData rsmd = rs.getMetaData(); int clmCnt = rsmd.getColumnCount(); columnNames = new Object[clmCnt]; for (int i = 0; i < columnNames.length; i++) { columnNames[i] = rsmd.getColumnName(i + 1); } List list = new ArrayList(); while (rs.next()) { Object[] rowData = new Object[clmCnt]; for (int i = 1; i <= clmCnt; i++) { rowData[i - 1] = rs.getString(i); } list.add(rowData); } rs.close(); Object[][] data = new Object[list.size()][clmCnt]; for (int i = 0; i < data.length; i++) { data[i] = (Object[]) list.get(i); } return data; } catch (SQLException e) { e.printStackTrace(); } return null; } public Object[] getColumnNames() { return columnNames; } }
Gruß Tom
-
Danke, damit hast du mir sehr weitergeholfen und Zeit gespart.
Schöne Grüsse aus der Schweiz,
Adrian Ambros Frey
-
Hallo.
Erst mal ein großes Dankeschön für dieses Beispiel.
An diesem Problem sitze ich schon seit gut einer Woche.
Aber:
Ich habe noch einen Fehler gefunden. Und zwar in der MySQLHelperKlasse an dieser Stelle:
muss statt einem while ein do-while genutzt werden. Ansonsten hat das Programm bei mir den ersten Datensatz ausgelassen.Code :1 2 3 4 5 6
while (rs.next()) { Object[] rowData = new Object[clmCnt]; for (int i = 1; i <= clmCnt; i++) { rowData[i - 1] = rs.getString(i); } }
Also wie folgt:Bin mir aber nicht sicher, ob das an mir liegt, oder an dem Beispiel von Thomas Darimont.Code :1 2 3 4 5 6
do { Object[] rowData = new Object[clmCnt]; for (int i = 1; i <= clmCnt; i++) { rowData[i - 1] = rs.getString(i); } } while (rs.next());
Lg, sim4000.
Ähnliche Themen
-
MySql JTable Probleme mit Heap Space
Von PUM1212 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 03.12.07, 03:33 -
MySQL JTable Probleme mit groser Datenmenge
Von PUM1212 im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 03.12.07, 03:19 -
mysql- Ausgabe in JTable
Von mbertholl im Forum JavaAntworten: 6Letzter Beitrag: 12.03.06, 20:03 -
Von JTable Date Angaben in MySql einlesen
Von ME34 im Forum JavaAntworten: 0Letzter Beitrag: 27.07.05, 11:26 -
Einlesen aus JTable in die DB MySql
Von ME34 im Forum JavaAntworten: 2Letzter Beitrag: 14.06.05, 17:18






Zitieren
Login





