【问题标题】:Lookup and extract db value based on input (Java & SQL Server)根据输入查找和提取 db 值(Java 和 SQL Server)
【发布时间】:2018-02-13 20:25:21
【问题描述】:

Java 新手。
我正在尝试编写一个将输入用户名的类,对用户名运行查询以查找 ID,然后在我所有其他类的“where 子句”中使用该 ID。

这是我执行的语句(它只会返回单行的记录集):

String sqlStatement = "SELECT AccountHolderId, Passcode from CIS4720.DBO.AccountHolder " +
"where Username = '" + logonName + "'";  

这是我尝试通过用户名提取 ID...

while (rset.next())
    {
        if(rset.getInt("Username")==logonName){
            int whosOnFirst = rset.getInt("AccountHolderId");
        }

我在论坛上看到另一个答案说您不能将数据库值分配给变量。如果是这样,有什么更好的策略?

(另外,我意识到我没有进行参数化,但我想在解决这个问题之前让它工作。这是一个课程作业,所以我不担心黑客攻击)。

P。 S. 谢谢我在上面的代码中修复了双等号(和额外的括号)。

【问题讨论】:

  • rset.getInt("Username") 将从结果中获取用户名列,但由于getInt,它也会查找整数列。您没有在 sql 语句中选择该列,因此会出错。此外,如果您选择它并获取一个字符串,请使用.equals() 而不是== 来比较字符串。另外,= 是赋值,== 是比较。
  • 您可以使用getString 从结果集中读取字符串。您无需检查用户名并进行匹配,因为您的查询应该准确返回该用户的数据,因此我将完全删除 if 条件,只在其中添加 getInt 行。
  • 查询中Username 后面多了一个括号。
  • 还有什么问题吗?似乎它应该适用于 cmets 中提到的更改。
  • 谢谢@clinomaniac。它现在正在工作,但是当我将 whosOnFirst 整数变量放在另一个类中时,它无法识别它。我原以为通过在标有“public class void”的类中声明它可以让我在程序中的任何地方使用这个变量。

标签: java sql sql-server variables recordset


【解决方案1】:

这里有一些关于代码的cmets:

  • rset.getInt("Username") 将从结果中获取 Username 列,但由于 getInt,它还会查找 Integer 列。您没有在 sql 语句中选择该列,因此会出错。
  • 如果你选择它并得到一个字符串,使用.equals()而不是==来比较字符串。另外,= 是赋值,== 是比较。
  • 您可以使用getString 从结果集中读取字符串。
  • 您无需检查用户名并进行匹配,因为您的查询应该准确返回该用户的数据,因此我将完全删除 if 条件,只在其中保留 getInt 行。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多