JAVA - 使用 SQL 中的二维字符串数组填充 JTable

标签 java sql arrays string swing

我试图在 JTable 中显示字符串数组(创建的方法)的结果 - 但它似乎不起作用。

方法代码(仅粘贴前两个):

    package t3.isprojekt.uppg2.dal;

    import java.sql.*;
    import java.util.*;

    public class DAL {

        private static String connStr = "jdbc:sqlserver://Localhost:1433;databases=CronusDB;user=root;password=root;";

        public static Connection getConn() throws SQLException {
            return DriverManager.getConnection(connStr);
        }

        // ------ Methods for Employee & related tables ------\\

        public String[][] getEmpData() throws SQLException {
            String getEmp = "SELECT [No_], [First Name], [Last Name], [Address], [City] FROM [CRONUS Sverige AB$Employee];";
            Statement stmt = null;
            stmt = getConn().createStatement();
            ResultSet rset = stmt.executeQuery(getEmp);
            ResultSetMetaData rsetMeta = rset.getMetaData();
            int colCount = rsetMeta.getColumnCount();
            int rowCount = 0;
            while (rset.next()) {
                rowCount = rset.getRow();
            }
            String[][] temp = convertRsToArray(rset, rowCount, colCount);
            return temp;
        }

        public String[][] getEmployeeMetaData() throws SQLException {
            String empMetaData = "SELECT TABLE_CATALOG, TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM [CronusDB].[INFORMATION_SCHEMA].[COLUMNS]";
            Statement stmt = null;
            stmt = getConn().createStatement();
            ResultSet rset = stmt.executeQuery(empMetaData);
            ResultSetMetaData rsetMeta = rset.getMetaData();
            int colCount = rsetMeta.getColumnCount();
            int rowCount = 0;
            while (rset.next()) {
                rowCount = rset.getRow();
            }
            String[][] temp = convertRsToArray(rset, rowCount, colCount);
            return temp;
        }

GUI 类 - 这里我不知道如何将模型连接到字符串数组。尝试谷歌,但没有返回任何信息到我想要实现的目标:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.sql.SQLException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import t3.isprojekt.uppg2.controller.Controller;
import t3.isprojekt.uppg2.dal.DAL;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class View extends JFrame {

    private JPanel contentPane;
    private Controller ctrl;
    private DefaultTableModel tableModel = new DefaultTableModel(new Object[][] { ctrl.getEmployeeData() },
            new Object[] { ctrl.getEmpMetaData() });
    private JTable table_2;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    View frame = new View();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     * 
     * @throws SQLException
     */
    public View() throws SQLException {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JTable table = new JTable(tableModel);
        table.setBounds(0, 65, 432, 188);
        contentPane.add(table_2);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(0, 247, 432, -175);
        contentPane.add(scrollPane);

    }
}

最佳答案

我认为您的代码中有一个简单的拼写错误。你打电话:

enterJTable table = new JTable(tableModel); 

但不是将 table 添加到 contentPane 中,而是添加其中没有数据的 table_2:

     private JTable table_2;   

     ...

     contentPane.add(table_2);

它已经初始化了吗?我是瞎子吗?

我认为它应该是这样的:

contentPane.add(table);

此外,如果我没有忽略某些内容,您的 table_2 就是死代码。

编辑:

你的Controller类是吗,它被实例化了吗?

Controller ctrl;

...

new DefaultTableModel(new Object[][] { **ctrl.getEmployeeData()** },
            new Object[] { **ctrl.getEmpMetaData()** });

如果我看不到你的方法的作用,我无法进一步帮助你。 也许,只是猜测,还有其他错别字吗?你想打电话吗:

DAL dal = new DAL()

...

new DefaultTableModel(new Object[][] { **dal.getEmployeeData()** },
            new Object[] { **dal.getEmpMetaData()** });

如果是这种情况,您不能这样做:

new DefaultTableModel(new Object[][] { ctrl.getEmployeeData() },
        **new Object[]** { dal.getEmpMetaData() });

因为 getEmpMetaData() 返回一个 String[][] 而不是 String[]

最后但并非最不重要的一点是,要在滚动 Pane 中显示您的 Jtable,请执行以下操作:

JScrollPane scrollPane = new JScrollPane(table);

它对您的代码进行了微小的更改,但它确实起到了作用:P

关于JAVA - 使用 SQL 中的二维字符串数组填充 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32779741/

相关文章:

mysql - SQL - 聚合函数曼哈顿距离

c++ - 实现功能的麻烦(递归)

java - 在 Java 中使用类型推断和泛型方法

java - 单元测试有问题,怎样才能让它只工作一次?

java - YouTube API v3 Java 授权

SQL Server 批量插入 - "Bulk load data conversion error"

sql - 是否可以拒绝从特定程序访问 SQL Server?

java - 如何从 Midlet 运行 java 应用程序

php - 将数组附加到多维数组,保留键

python - 在 numpy 中用数组填充数组?