【问题标题】:Switching table column for entering data切换表格列输入数据
【发布时间】:2014-05-12 18:15:38
【问题描述】:

我正在做一个项目,我从选定的 mysql 表中获取数据(要从中获取数据的表由用户选择)。我正在使用以下代码从选定的表中获取数据:

jTextArea1.setText(null);
tableModel.setColumnCount(0);
tableModel.setRowCount(0);
try {
    try {
        Class.forName("java.sql.DriverManager");
        timeget();
        jTextArea4.append(now + ":   " + "/ Driver name Detected successfully / \n \n");
    } catch (ClassNotFoundException e) {
        timeget();
        jTextArea4.append(now + ":   " + "/ Failed in finding Driver \n " + e.getMessage() + " / \n It is recommended that you DO NOT PROCEED ANY FURTHER \n \n");
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
    con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:" + GlobalParams.portvar + "/" + (String) jList1.getSelectedValue(), "" + GlobalParams.uservar, "" + GlobalParams.passvar);
    Statement stmnt = (Statement) con.createStatement();
    String query1 = "Use " + GlobalParams.dbvar;
    stmnt.executeQuery(query1);
    String query2 = "desc " + (String) jList2.getSelectedValue();
    ResultSet rs = stmnt.executeQuery(query2);
    while (rs.next()) {
        fieldo = rs.getString("Field");
        jTextArea1.append(fieldo + "\n");
    }
    tableModel.addColumn(jTextArea1.getText().substring(0, jTextArea1.getText().indexOf("\n")));
    Scanner scanner = new Scanner(jTextArea1.getText());
    timeget();
    jTextArea4.append(now + ":   " + "/ Scanning Available feeds from table '" + (String) jList2.getSelectedValue() + "' / \n");
    timeget();
    jTextArea4.append(now + ":   " + "/ Getting feeds from table '" + (String) jList2.getSelectedValue() + "' / \n \n");
    if (scanner.hasNextLine()) {
        scanner.nextLine();
        while (scanner.hasNextLine()) {

//I BELIEVE MY CODE STARTS TO GO SOMEWHERE WRONG HERE BELOW:

            String line = scanner.nextLine();
            tableModel.addColumn(line);
            Statement stmnt2 = (Statement) con.createStatement();
            String tdataget = "Select " + line + " from " + (String) jList2.getSelectedValue();
            ResultSet rs2 = stmnt2.executeQuery(tdataget);
            while (rs2.next()) {
                String field = rs2.getString(line);
                tableModel.addRow(new Object[]{field});
            }
            int end = jTextArea1.getLineEndOffset(0);
            jTextArea1.replaceRange("", 0, end);
        }
    }
} catch (SQLException e) {
    if (!(e.getMessage().contains("You have an error in your SQL syntax"))) {
        JOptionPane.showMessageDialog(this, e.getMessage());
    }
} catch (BadLocationException ex) {
    JOptionPane.showMessageDialog(this, ex.getMessage());
}

(jList2 是表名的来源,jList1 包含数据库名称)

问题是,例如。如果mysql中的表是这样的->

Col1    |    Col2    |    Col3    |    Col4    |    Col5
---------------------------------------------------------
Data1   |    Data2   |    Data3   |    Data4   |    Data5
Datab1  |    Datab2  |    Datab3  |    Datab4  |    Datab5

在我的框架中,表格是这样的->

Col1    |    Col2    |    Col3    |    Col4    |    Col5
---------------------------------------------------------
Data1

Data2

Data3

Data4

Data5

Datab1

Datab2

Datab3

Datab4

Datab5

那么任何人都可以建议我在java中“切换到下一列”的代码吗? 谢谢

【问题讨论】:

  • 首先,您是否打算为每个查询获取一列?或者在单个查询中获取所有列?其次,tableModel.setValueAt(field, row, column); 可能比tableModel.addRow() 更有用。
  • 谢谢,如果有人不想使用外部资源,这是一个很好的工作方法,只需创建一个循环就可以了:D

标签: java mysql swing jtable


【解决方案1】:
tableModel.addRow(new Object[]{field});

您一直在添加一个包含单个值的数组的行。相反,您需要添加一个包含行的所有值的数组。

查看Table From Database 中的TableFromDatabaseExample.java 代码,了解如何执行此操作的更通用方法。

【讨论】:

  • 谢谢,这肯定会在未来有所帮助。这是一个非常简单的方法,基本上什么也没做,这消除了 3 个循环。
猜你喜欢
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 2018-06-15
  • 2010-09-30
  • 2018-05-30
相关资源
最近更新 更多