我用Jtable 显示数据库里的数据,必需要将数据先保存到数组然后再用JTable 显示数组里面的内容吗?
当将表格里的数据保存到数据库里时难道也非得先要将表格中的数据保存到数组中吗?
另外JTable中有没有将整个表中的数据保存到数组里的方法呀?我查了下api但没有找到将整张表保存到数据里的方法。要想将整张表中的数据保存到数组中时有没有比循环更好的方法呀???
当将表格里的数据保存到数据库里时难道也非得先要将表格中的数据保存到数组中吗?
另外JTable中有没有将整个表中的数据保存到数组里的方法呀?我查了下api但没有找到将整张表保存到数据里的方法。要想将整张表中的数据保存到数组中时有没有比循环更好的方法呀???
解决方案 »
- 英语音标读取乱码
- ==算法,,看看这个面试题==
- canvas可以嵌入JPanel或NB的TopComponent中么?急急急
- 这样写为什么就不能连接上数据库,是不是类之间的关系放的不对?
- [百分帖]web.xml相关,主要是涉及到多个servet的定义!
- 循环连表——约瑟芬问题。运行出错,帮忙看看
- 有关applet的问题
- 如何获得一个目录下面的所有文件夹(不包括文件)
- 如何检测有没有SELECT到符合条件的结果。
- 又是几个问题JList XYLayOut applet下
- <xsd:element saw-name:hello="world"/>如何解析?
- 问个初级问题,java的参数是怎么传递的啊?
有啊,你写个存储过程,传入二维数组,数据库里面去用for循环啊,比在外面for循环拆了一条条去insert要快好多哦。而且保证了要么全部insert,要么一个都不insert
import javax.swing.table.*;
import java.sql.*;
import java.util.*;
/** an immutable table model built from getting
metadata about a table in a jdbc database
*/
public class JDBCTableModel extends AbstractTableModel {
Object[][] contents;
String[] columnNames;
Class[] columnClasses; public JDBCTableModel (Connection conn,
String tableName)
throws SQLException {
super();
getTableContents (conn, tableName); }
protected void getTableContents (Connection conn,
String tableName)
throws SQLException { // get metadata: what columns exist and what
// types (classes) are they?
DatabaseMetaData meta = conn.getMetaData();
System.out.println ("got meta = " + meta);
ResultSet results =
meta.getColumns (null, null, tableName, null) ;
System.out.println ("got column results");
ArrayList colNamesList = new ArrayList();
ArrayList colClassesList = new ArrayList();
while (results.next()) {
colNamesList.add (results.getString ("COLUMN_NAME"));
System.out.println ("name: " +
results.getString ("COLUMN_NAME"));
int dbType = results.getInt ("DATA_TYPE");
switch (dbType) {
case Types.INTEGER:
colClassesList.add (Integer.class); break;
case Types.FLOAT:
colClassesList.add (Float.class); break;
case Types.DOUBLE:
case Types.REAL:
colClassesList.add (Double.class); break;
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
colClassesList.add (java.sql.Date.class); break;
default:
colClassesList.add (String.class); break;
};
System.out.println ("type: " +
results.getInt ("DATA_TYPE"));
}
columnNames = new String [colNamesList.size()];
colNamesList.toArray (columnNames);
columnClasses = new Class [colClassesList.size()];
colClassesList.toArray (columnClasses);
// get all data from table and put into
// contents array Statement statement =
conn.createStatement ();
results = statement.executeQuery ("SELECT * FROM " +
tableName);
ArrayList rowList = new ArrayList();
while (results.next()) {
ArrayList cellList = new ArrayList();
for (int i = 0; i<columnClasses.length; i++) {
Object cellValue = null;
if (columnClasses[i] == String.class)
cellValue = results.getString (columnNames[i]);
else if (columnClasses[i] == Integer.class)
cellValue = new Integer (
results.getInt (columnNames[i]));
else if (columnClasses[i] == Float.class)
cellValue = new Float (
results.getInt (columnNames[i]));
else if (columnClasses[i] == Double.class)
cellValue = new Double (
results.getDouble (columnNames[i]));
else if (columnClasses[i] == java.sql.Date.class)
cellValue = results.getDate (columnNames[i]);
else
System.out.println ("Can't assign " +
columnNames[i]);
cellList.add (cellValue);
}// for
Object[] cells = cellList.toArray();
rowList.add (cells);
} // while
// finally create contents two-dim array
contents = new Object[rowList.size()] [];
for (int i=0; i<contents.length; i++) contents[i] = (Object []) rowList.get (i);
System.out.println ("Created model with " +
contents.length + " rows"); // close stuff
results.close();
statement.close(); }
// AbstractTableModel methods
public int getRowCount() {
return contents.length;
} public int getColumnCount() {
if (contents.length == 0)
return 0;
else
return contents[0].length;
} public Object getValueAt (int row, int column) {
return contents [row][column];
} // overrides methods for which AbstractTableModel
// has trivial implementations public Class getColumnClass (int col) {
return columnClasses [col];
} public String getColumnName (int col) {
return columnNames [col];
}
}示例使用了HSQL数据库
import javax.swing.*;
import javax.swing.table.*;
import java.sql.*;
import java.util.*;
import java.io.*;
public class TestJDBCTable {
public static void main (String[] args) {
try { /*
driver, url, user, and pass can be passed in as
system properties "jdbctable.driver",
"jdbctable.url", "jdbctable.user", and
"jdbctable.pass", or specified in a file
called "jdbctable.properties" in current
directory
*/
Properties testProps = new Properties();
String ddriver = System.getProperty ("jdbctable.driver");
String durl = System.getProperty ("jdbctable.url");
String duser = System.getProperty ("jdbctable.user");
String dpass = System.getProperty ("jdbctable.pass"); if (ddriver != null)
testProps.setProperty ("jdbctable.driver", ddriver);
if (durl != null)
testProps.setProperty ("jdbctable.url", durl);
if (duser != null)
testProps.setProperty ("jdbctable.user", duser);
if (dpass != null)
testProps.setProperty ("jdbctable.pass", dpass);
try {
testProps.load (new FileInputStream (
new File ("jdbctable.properties")));
} catch (Exception e) {} // ignore FNF, etc.
System.out.println ("Test Properties:");
testProps.list (System.out);
// now get a connection
// note care to replace nulls with empty strings
Class.forName(testProps.getProperty
("jdbctable.driver")).newInstance();
String url = testProps.getProperty ("jdbctable.url");
url = ((url == null) ? "" : url);
String user = testProps.getProperty ("jdbctable.user");
user = ((user == null) ? "" : user);
String pass = testProps.getProperty ("jdbctable.pass");
pass = ((pass == null) ? "" : pass); Connection conn =
DriverManager.getConnection (url, user, pass);
// create db table to use
String tableName = createSampleTable(conn); // get a model for this db table and add to a JTable
TableModel mod =
new JDBCTableModel (conn, tableName);
JTable jtable = new JTable (mod);
JScrollPane scroller =
new JScrollPane (jtable,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
JFrame frame = new JFrame ("JDBCTableModel demo");
frame.getContentPane().add (scroller);
frame.pack();
frame.setVisible (true); conn.close(); } catch (Exception e) {
e.printStackTrace();
}
} public static String createSampleTable (Connection conn)
throws SQLException { Statement statement = conn.createStatement();
// drop table if it exists
try { statement.execute ("DROP TABLE EMPLOYEES");
} catch (SQLException sqle) {
sqle.printStackTrace(); // if table !exists
}
statement.execute ("CREATE TABLE EMPLOYEES " +
"(Name CHAR(20), Title CHAR(30), Salary INT)");
statement.execute ("INSERT INTO EMPLOYEES VALUES " +
"('Jill', 'CEO', 200000 )");
statement.execute ("INSERT INTO EMPLOYEES VALUES " +
"('Bob', 'VP', 195000 )");
statement.execute ("INSERT INTO EMPLOYEES VALUES " +
"('Omar', 'VP', 190000 )");
statement.execute ("INSERT INTO EMPLOYEES VALUES " +
"('Amy', 'Software Engineer', 50000 )");
statement.execute ("INSERT INTO EMPLOYEES VALUES " +
"('Greg', 'Software Engineer', 45000 )"); statement.close();
return "EMPLOYEES";
}
}