【问题标题】:MySQL error: a column not found?MySQL错误:找不到列?
【发布时间】:2016-01-09 21:10:15
【问题描述】:

所以我这里有这段代码:

try {
            rs = stmt.executeQuery("SELECT * FROM systemaccount where ID = '"+getValue+"'");
            while(rs.next())
            {
                fname.setText(rs.getString("First_Name"));
                mname.setSelectedItem(rs.getObject("Middle_name"));
                lname.setText(rs.getString("Last_Name"));
                address.setText(rs.getString("address"));
                contact.setText(rs.getString("Contact_Number"));
                user.setText((String) getValue((Integer) rs.getObject("User"), "user"));
                usertype.setSelectedItem(getValue((Integer) rs.getObject("user_type"), "user_type")); //<-----THE ERROR IS HERE
            }
        } catch (SQLException ex) {
            Logger.getLogger(SystemAccount.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println(ex.getMessage());
        }

所以基本上我的代码所做的是,当我双击jTable 时,它也会自动填充ComboBoxTextFields。但是MySQL 会抛出一个错误,它没有找到任何user_type 列名。

正如您在下面看到的,我有证据证明它有一个名为 user_type 的列名。

systemaccount table having user_type column

我总是得到

java.sql.SQLException: Column 'user_type' not found. error on the line usertype.setSelectedItem(getValue((Integer) rs.getObject("user_type"), "user_type"));

关于发生了什么的任何提示?

【问题讨论】:

  • 我想没有人知道解决方案。是什么原因造成的?以及如何解决?

标签: java mysql swing


【解决方案1】:

创建对象数组。

ResultSet results = myStatement.executeQuery("SELECT * FROM systemaccount where ID = "+getValue);

    ResultSetMetaData meta = results.getMetaData();
    while (results.next()) {
      Object[] data = new Object[meta.getColumnCount()];
      for (int index = 1; index <= data.length; index++) {
          data[index - 1] = results.getObject(meta.getColumnName(index));
          System.out.println("Column " + index + " is named " + meta.getColumnName(index) + " having value " + data[index - 1]);
      }
      // fname.setText(data[0].toString());
      ...
    }

【讨论】:

  • 遍历该数组以将数据库值保存到变量中。
  • 糟糕,您的代码中有错误:java.sql.SQLException: Before start of result set 在线 data[index - 1] = rs.getObject(meta.getColumnName(index));
  • 对不起,我在 for 循环中使用了“rs”而不是“results”。
  • 您的代码仍然无法正常工作,因为在使用 .getObject() or .getString() 函数时需要 .next() 对吗?
  • 是的,我们最终得到了相同的结果。我也发布了我的答案。
【解决方案2】:

尝试使用不同的列名(“user_type”除外)。

【讨论】:

  • 我认为这也是我最坏的情况/最后的选择。 :(
  • 尝试最坏的情况。如果它有效,那么问题出在 mysql 上,否则检查完整的异常堆栈跟踪。它可能会有所帮助。
  • 我尝试将其更改为用户类型。它仍然找不到该列,但结果集元数据可以识别它。 :(
  • 在不访问 user_type 字段的情况下尝试您的代码。检查 mysql 表中的代码或列名是否有任何前导或尾随空格。
  • 如果 ResultSetMetaData 有效,最后你必须使用它。
【解决方案3】:

所以我现在有了这个答案,天啊,在经历了一个世纪的感觉之后。

所以在@SanjayChavan 的代码 sn-p 的帮助下,我终于得到了代码。

int row = tbl_data.getSelectedRow();
        Integer ID = (Integer) tbl_data.getModel().getValueAt(row, 0);
        try {
            rs = stmt.executeQuery("SELECT * FROM systemaccount where ID = "+ID);
            ResultSetMetaData meta = rs.getMetaData();
            Object[] data = new Object[meta.getColumnCount()];

            while(rs.next())
            {
                for (int index = 1; index <= meta.getColumnCount(); index++) {
                    System.out.println("Column " + index + " is named " + meta.getColumnName(index));
                    data[index - 1] = rs.getObject(meta.getColumnName(index));
                }

                fname.setText((String) data[1]);
                mname.setSelectedItem((String) data[2]);
                lname.setText((String) data[3]);
                address.setText((String) data[4]);
                contact.setText((String) data[5]);
                user.setText((String) getValue((Integer) data[6], "user"));
                usertype.setSelectedItem(getValue((Integer)data[7], "usertype"));
            }
        } 
        catch (SQLException ex) {
            Logger.getLogger(SystemAccount.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println(ex.getMessage());
        }
    }

这就是现在的样子。经过几个小时的测试。起初,我不会接受他的代码 sn-p 作为答案,尽管它是有效的,但由于在没有 .next() 函数的情况下访问函数的错误而不能接受。所以我所做的就是将填充数据放入 while 循环内的数组中,这样它就不会像before start of ResultSet 那样出现错误,并且它是有效的。谢谢大家!!!!!!

【讨论】:

    猜你喜欢
    • 2016-06-15
    • 2013-03-23
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多