JTable не показывает вывод - PullRequest
0 голосов
/ 01 июля 2011

Вот мой код:

private void show(java.awt.event.ActionEvent evt) {
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "phone";
    String driver = "com.mysql.jdbc.Driver";
    String userName = "root";
    String password = "school";
    try {
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url + dbName, userName, password);
        PreparedStatement pStmt = conn.prepareStatement("SELECT * FROM contacts");
        ResultSet rs = pStmt.executeQuery();
        JFrame frame1 = new JFrame();
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame1.setSize(300, 150);
        frame1.setVisible(true);
        while (rs.next() == true) {

            Object rowData[][] = {{"Name"},
                {"Phone"}};
            Object columnNames[] = {"Column One", "Column Two"};
            JTable table = new JTable(rowData, columnNames);
            JScrollPane scrollPane = new JScrollPane(table);
            frame1.add(scrollPane, BorderLayout.CENTER);


        }
        rs.close();
        pStmt.close();
        conn.close();
    } catch (Exception ex) {
        System.out.println(ex);
    }
}

Я хочу отобразить запись в отдельном окне, но на ней отображается пустой экран. Предлагаются какие-либо исправления?

Ответы [ 4 ]

1 голос
/ 25 июля 2011
            Vector columnNames = new Vector();
            Vector data = new Vector();                 
            try{
            Connection conn = null;
            DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
            conn = DriverManager.getConnection(
            "jdbc:oracle:thin:@localhost:1521:XE","yedal ","yedal121288");
            Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("");            
                ResultSetMetaData meta=rs.getMetaData();                
                int columns = meta.getColumnCount();
                for (int i = 1; i <= columns; i++) 
                {
                    columnNames.addElement( meta.getColumnName(i) );
                }
                while (rs.next()) 
                { 
                    Vector row = new Vector(columns);
                    for (int i = 1; i <= columns; i++)
                    {
                        row.addElement( rs.getObject(i) );
                    }   
                    data.addElement( row );
                }
                rs.close();
                stmt.close();
                } 
             catch (SQLException ex) { 
                ex.printStackTrace(); 
                } 
             t= new JTable(data, columnNames); t.setVisible(true);             
             TableColumn col; 
             for (int i = 0; i < t.getColumnCount(); i++) 
             {
                 col = t.getColumnModel().getColumn(i);
                 col.setMaxWidth(200);
             } 
             JScrollPane scrollPane = new JScrollPane(t);
0 голосов
/ 25 декабря 2013

лучше использовать файл библиотеки rs2xml.jar. включить его в свою библиотеку

сначала создайте соединение с базой данных, используя jdbc. импортировать это -> импортировать net.proteanit.sql.DbUtils;

 String query ="select * from employee"; //let
 pst = conn.prepareStatement(query);

  rs = pst.executeQuery();
  s.append (QueryArea.getText()).append("\n");
  jTable.setModel(DbUtils.resultSetToTableModel(rs));

Будет сгенерировано исключение, поэтому обработайте его с помощью оператора try catch. если у вас есть какие-либо проблемы, вы можете спросить.

0 голосов
/ 01 июля 2011

Полагаю, вы видите исключение java.lang.ArrayIndexOutOfBoundsException, если посмотрите в консоль. JTable заполняется табличной моделью, которая имеет два столбца, но вы создаете ее с массивом с данными только одного.

Обратите внимание: поскольку вы устанавливаете рамку видимой до того, как произойдет это исключение, рамка отображается, компонент добавляется к ней, но когда свинг пытается ее закрасить, произойдет сбой.

Если вы замените свои тестовые данные, например, на

Object rowData[][] = { { "Name", "Phone" }, { "Name2", "Phone2" } };

это сработает (если rs.next() никогда не будет верным).

0 голосов
/ 01 июля 2011

Вы создаете несколько JTables в своем цикле while, я предполагаю, что это не то, что вы собираетесь делать, а также вы не указываете их размер.Вы должны установить размер JTable с помощью метода setPreferredSize или setSize:

tblObj.setPreferredSize(new Dimension(300,400));

, а также передать true в метод setFillsViewportHeight для содержимого таблицы, чтобы заполнить порт представления.использовать JTable:

Как использовать JTable

...