【问题标题】:Want to get single database value想要获取单个数据库值
【发布时间】:2013-01-21 05:18:51
【问题描述】:

我有一个登录表单,如果登录成功。我想获取记录的名称,这里查看我的代码:

 try {
             if(jTextField1.getText().equals(""))
        {
              JOptionPane.showMessageDialog(null, "Pleass Input Username");
        }
        else if(jPasswordField1.getText().equals(""))
        {
              JOptionPane.showMessageDialog(null, "Please Input Password");
        }
        else
        {
            rs = con.executeQuery("SELECT * FROM MsEmployee WHERE EmployeeID='"+jTextField1.getText()+"' And Password='"+jPasswordField1.getText()+"'");
            if (rs.next())
            {
             help.IDemployee = jTextField1.getText(); 
             JOptionPane.showMessageDialog(null, "Login Success! welcome "+ help.IDemployee);
             MainMenu mm = new MainMenu(true);
             mm.setVisible(true);
             this.dispose();
            }else
            {
            JOptionPane.showMessageDialog(null, "Username not found!!");
            }
        }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,ex.getMessage());
        }

所以我想显示来自MSEmployee 的EmployeeName,它来自EmployeeID。 我认为是这样的:

String qry;
qry = "Select EmployeeName From MsEmplyee WHERE EmployeeID = '" + jtextField1.gettext() + "'" ; 

但是当我编译时,它只是打印上面的文本,而不是获取值。有人可以帮忙吗?

【问题讨论】:

  • 你忘了 "rs = con.executeQuery(qry)"; ??
  • 您是否尝试过使用某些 SQL 工具直接在数据库上执行生成的查询? MsEmployee 表的结构是什么?第二个代码sn-p有错别字,你用MsEmplyee而不是MsEmployee
  • 同意 András Kerekes。哪个是正确的使用 - MsEmplyee / MsEmployee?
  • 注意 SQL 注入。永远不要将 gui 组件直接放在查询中。在您的情况下,您应该使用带有“?”的 PreparedStatement以避免这个问题。

标签: java sql database swing resultset


【解决方案1】:

根据评论中的建议,请检查哪个名称 MsEmplyee/MsEmployee 是正确的。

这与您的问题无关,但我认为您的代码可以有一个(可能的)改进。

而不是使用

if(jTextField1.getText().equals(""))

最好在使用 equals() 方法之前使用 trim() 方法。因此,如果用户在 jTextField1 中输入一个空格,在这种情况下您的检查将被绕过。所以最好使用 trim() 方法从字符串中删除所有第一个和最后一个空格字符。

if(jTextField1.getText().trim().equals(""))

密码字段也可以这样做。

【讨论】:

  • 最好使用 "".equals(jTextField1.getText()) 因为你最终可能会遇到 NPE
  • 如果使用了"".equals(jTextField1.getText()),则达不到使用trim()的目的。如果使用空格字符,它仍然会绕过添加到空输入的检查。关于 NPE,在 this 的情况下永远不会有 NPE。因为如果在 JTextField 中没有输入任何内容,它将返回 "" 而不是 null。但在其他情况下,是的,我同意更好地使用 "".equals() :)
  • @YogeshRalebhat 我永远不会相信getText 不会返回null 值的假设。在 Java 1.4 左右的某个地方它发生了变化,因此它不会(所以它有这样做的历史)并且不能保证它在未来不会(但我希望它不会)
  • 大家好,谢谢大家的回复,哦,是的,我在帖子里有错字,一定是 MsEmployee 不是 MsEmplyee,我会详细解释我的问题,在我的数据库 MsEmployee 中,我有 3 个表,其中包含 EmployeeID ,EmployeeName ,Password ,并且对于该登录表单,我使用 EmployeeID 和 Password ,我想要的是,如果用户正确登录,另一个表单将显示并包含显示您名称的标签EmployeeName 登录,所以我必须做的是像我之前说的或者别的什么?有人可以详细解释一下吗?谢谢
  • @MadProgrammer 您的建议似乎很重要,因为我们不能依赖当前时间点返回的“getText”方法。拥有这种面向未来的编程实践总是更好。感谢您的澄清。我试图在 Java 1.4 之前搜索此方法返回的内容,但找不到任何令人满意的链接。如果您有任何显示“getText”返回 null 的链接并可以与我们分享,那将会很有帮助。
【解决方案2】:

您没有读取结果集值。

// help.IDemployee = jTextField1.getText(); 
help.IDemployee = rs.getString(1);

第一列的列索引从 1 开始。不是从 0 开始

【讨论】:

    【解决方案3】:

    你可以试试这个!

    String EmployeeName = rs.getString("数据库中的列标签(如 EmployeeName)");

    System.out.println(EmployeeName);

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 2013-05-06
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2018-02-11
      相关资源
      最近更新 更多