2011-09-17 21 views
0

爲我的數據檢索java程序使用sparql給了我一個表輸出netbeans中的輸出區域。此語句如何在netbeans中從控制檯獲取數據?

ResultSetFormatter.out(System.out,results,query1);

以表格的形式給出了我的輸出結果。現在我必須從輸出區取這張表並使用jframe.how將它顯示在textarea中我可以實現它嗎?你能告訴我如何從輸出區域獲取數據嗎?

回答

0

我認爲你正在努力實現你的目標。如果我理解正確,你正在嘗試將ResultSet輸出到JTable中。

見的這個例子禮貌java2s

/* 
Java Swing, 2nd Edition 
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole 
ISBN: 0-596-00408-7 
Publisher: O'Reilly 
*/ 
// DatabaseTest.java 
//Let's try to make one of these databases work with a JTable for ouptut. 
// 

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.Statement; 
import java.util.Vector; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.table.AbstractTableModel; 

public class DatabaseTest extends JFrame { 

    JTextField hostField; 

    JTextField queryField; 

    QueryTableModel qtm; 

    public DatabaseTest() { 
    super("Database Test Frame"); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(350, 200); 

    qtm = new QueryTableModel(); 
    JTable table = new JTable(qtm); 
    JScrollPane scrollpane = new JScrollPane(table); 
    JPanel p1 = new JPanel(); 
    p1.setLayout(new GridLayout(3, 2)); 
    p1.add(new JLabel("Enter the Host URL: ")); 
    p1.add(hostField = new JTextField()); 
    p1.add(new JLabel("Enter your query: ")); 
    p1.add(queryField = new JTextField()); 
    p1.add(new JLabel("Click here to send: ")); 

    JButton jb = new JButton("Search"); 
    jb.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     qtm.setHostURL(hostField.getText().trim()); 
     qtm.setQuery(queryField.getText().trim()); 
     } 
    }); 
    p1.add(jb); 
    getContentPane().add(p1, BorderLayout.NORTH); 
    getContentPane().add(scrollpane, BorderLayout.CENTER); 
    } 

    public static void main(String args[]) { 
    DatabaseTest tt = new DatabaseTest(); 
    tt.setVisible(true); 
    } 
} 

//QueryTableModel.java 
//A basic implementation of the TableModel interface that fills out a Vector of 
//String[] structures from a query's result set. 
// 

class QueryTableModel extends AbstractTableModel { 
    Vector cache; // will hold String[] objects . . . 

    int colCount; 

    String[] headers; 

    Connection db; 

    Statement statement; 

    String currentURL; 

    public QueryTableModel() { 
    cache = new Vector(); 
    new gsl.sql.driv.Driver(); 
    } 

    public String getColumnName(int i) { 
    return headers[i]; 
    } 

    public int getColumnCount() { 
    return colCount; 
    } 

    public int getRowCount() { 
    return cache.size(); 
    } 

    public Object getValueAt(int row, int col) { 
    return ((String[]) cache.elementAt(row))[col]; 
    } 

    public void setHostURL(String url) { 
    if (url.equals(currentURL)) { 
     // same database, we can leave the current connection open 
     return; 
    } 
    // Oops . . . new connection required 
    closeDB(); 
    initDB(url); 
    currentURL = url; 
    } 

    // All the real work happens here; in a real application, 
    // we'd probably perform the query in a separate thread. 
    public void setQuery(String q) { 
    cache = new Vector(); 
    try { 
     // Execute the query and store the result set and its metadata 
     ResultSet rs = statement.executeQuery(q); 
     ResultSetMetaData meta = rs.getMetaData(); 
     colCount = meta.getColumnCount(); 

     // Now we must rebuild the headers array with the new column names 
     headers = new String[colCount]; 
     for (int h = 1; h <= colCount; h++) { 
     headers[h - 1] = meta.getColumnName(h); 
     } 

     // and file the cache with the records from our query. This would 
     // not be 
     // practical if we were expecting a few million records in response 
     // to our 
     // query, but we aren't, so we can do this. 
     while (rs.next()) { 
     String[] record = new String[colCount]; 
     for (int i = 0; i < colCount; i++) { 
      record[i] = rs.getString(i + 1); 
     } 
     cache.addElement(record); 
     } 
     fireTableChanged(null); // notify everyone that we have a new table. 
    } catch (Exception e) { 
     cache = new Vector(); // blank it out and keep going. 
     e.printStackTrace(); 
    } 
    } 

    public void initDB(String url) { 
    try { 
     db = DriverManager.getConnection(url); 
     statement = db.createStatement(); 
    } catch (Exception e) { 
     System.out.println("Could not initialize the database."); 
     e.printStackTrace(); 
    } 
    } 

    public void closeDB() { 
    try { 
     if (statement != null) { 
     statement.close(); 
     } 
     if (db != null) { 
     db.close(); 
     } 
    } catch (Exception e) { 
     System.out.println("Could not close the current connection."); 
     e.printStackTrace(); 
    } 
    } 
}