java从ResultSet填充JTable的最简单代码

我整天用谷歌搜索,没有运气。我getnPrintAllData()按确定按钮后调用方法。所以代码是:

public class DatabaseSQLiteConnection {

Connection conn = null;

PreparedStatement statement = null;

ResultSet res = null;

public DatabaseSQLiteConnection(){

try{

Class.forName("org.sqlite.JDBC");

conn = DriverManager.getConnection("jdbc:sqlite:test.sqlite");

statement = conn.prepareStatement("SELECT * from product_info;");

}

catch(Exception e){

e.printStackTrace();

}

}

public void getnPrintAllData(){

String name, supplier, id;

DefaultTableModel dtm = new DefaultTableModel();

Window gui = new Window(); //My JPanel class

try{

res = statement.executeQuery();

testResultSet(res);

ResultSetMetaData meta = res.getMetaData();

int numberOfColumns = meta.getColumnCount();

while (res.next())

{

Object [] rowData = new Object[numberOfColumns];

for (int i = 0; i < rowData.length; ++i)

{

rowData[i] = res.getObject(i+1);

}

dtm.addRow(rowData);

}

gui.jTable1.setModel(dtm);

dtm.fireTableDataChanged();

//////////////////////////

}

catch(Exception e){

System.err.println(e);

e.printStackTrace();

}

finally{

try{

res.close();

statement.close();

conn.close();

}

catch(Exception e){

e.printStackTrace();

}

}

}

public void testResultSet(ResultSet res){

try{

while(res.next()){

System.out.println("Product ID: "+ res.getInt("product_id"));

System.out.println("Product name: "+ res.getString("product_name"));

System.out.println("Supplier: "+ res.getString("supplier"));

}

}

catch(Exception e){

e.printStackTrace();

}

}

}

我的testResultSet()方法工作正常。现在,如何改变我的代码,以便它工作,或者什么是最简单的代码,以使DefaultTableModel从ResultSet?提前致谢。

编辑:我正在接收java.lang.IllegalStateException: SQLite JDBC: inconsistent internal state错误。

回答:

我认为从的实例构建模型的最简单方法ResultSet如下。

public static void main(String[] args) throws Exception {

// The Connection is obtained

ResultSet rs = stmt.executeQuery("select * from product_info");

// It creates and displays the table

JTable table = new JTable(buildTableModel(rs));

// Closes the Connection

JOptionPane.showMessageDialog(null, new JScrollPane(table));

}

方法buildTableModel:

public static DefaultTableModel buildTableModel(ResultSet rs)

throws SQLException {

ResultSetMetaData metaData = rs.getMetaData();

// names of columns

Vector<String> columnNames = new Vector<String>();

int columnCount = metaData.getColumnCount();

for (int column = 1; column <= columnCount; column++) {

columnNames.add(metaData.getColumnName(column));

}

// data of the table

Vector<Vector<Object>> data = new Vector<Vector<Object>>();

while (rs.next()) {

Vector<Object> vector = new Vector<Object>();

for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {

vector.add(rs.getObject(columnIndex));

}

data.add(vector);

}

return new DefaultTableModel(data, columnNames);

}

更新

你喜欢用javax.swing.SwingWorker吗?你喜欢使用该try-with-resources语句吗?

public class GUI extends JFrame {

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

new GUI().setVisible(true);

}

});

}

private final JButton button;

private final JTable table;

private final DefaultTableModel tableModel = new DefaultTableModel();

public GUI() throws HeadlessException {

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

table = new JTable(tableModel);

add(new JScrollPane(table), BorderLayout.CENTER);

button = new JButton("Load Data");

button.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

new SwingWorker<Void, Void>() {

@Override

protected Void doInBackground() throws Exception {

loadData();

return null;

}

}.execute();

}

});

add(button, BorderLayout.PAGE_START);

setSize(640, 480);

}

private void loadData() {

LOG.info("START loadData method");

button.setEnabled(false);

try (Connection conn = DriverManager.getConnection(url, usr, pwd);

Statement stmt = conn.createStatement()) {

ResultSet rs = stmt.executeQuery("select * from customer");

ResultSetMetaData metaData = rs.getMetaData();

// Names of columns

Vector<String> columnNames = new Vector<String>();

int columnCount = metaData.getColumnCount();

for (int i = 1; i <= columnCount; i++) {

columnNames.add(metaData.getColumnName(i));

}

// Data of the table

Vector<Vector<Object>> data = new Vector<Vector<Object>>();

while (rs.next()) {

Vector<Object> vector = new Vector<Object>();

for (int i = 1; i <= columnCount; i++) {

vector.add(rs.getObject(i));

}

data.add(vector);

}

tableModel.setDataVector(data, columnNames);

} catch (Exception e) {

LOG.log(Level.SEVERE, "Exception in Load Data", e);

}

button.setEnabled(true);

LOG.info("END loadData method");

}

}

以上是 java从ResultSet填充JTable的最简单代码 的全部内容, 来源链接: utcz.com/qa/426812.html

回到顶部