Java 运行Servlet时获取错误消息(第1行:“密码”附近的语法不正确)

Java 运行Servlet时获取错误消息(第1行:“密码”附近的语法不正确),java,jakarta-ee,Java,Jakarta Ee,我正在使servlet与J2ME一起工作,但每当运行这个servlet时,就会收到下面的错误消息 错误: java.sql.SQLException:[Microsoft][ODBC sql Server驱动程序][sql 服务器]第1行:“密码”附近的语法不正确 最直接的问题是:您没有引用acct字符串,并且它后面没有空格,因此您将得到如下结果: Select balance from acctInfo where account = fredand password = 'bloggs'

我正在使servlet与J2ME一起工作,但每当运行这个servlet时,就会收到下面的错误消息

错误:

java.sql.SQLException:[Microsoft][ODBC sql Server驱动程序][sql 服务器]第1行:“密码”附近的语法不正确


最直接的问题是:您没有引用acct字符串,并且它后面没有空格,因此您将得到如下结果:

Select balance from acctInfo where account = fredand password = 'bloggs'
更重要的问题是:首先不应该像这样在SQL中包含值。您应该使用参数化SQL。目前,您的代码对您开放

进一步的安全问题:您的代码表明密码是以纯文本形式保存的。请不要这样做

设计问题:

您似乎将帐户余额视为字符串。真奇怪。BigDecimal将是更自然的表示形式。 您捕获的是异常,而不是特定的异常 您将返回异常字符串表示形式,就像它是帐户余额一样。哎呀!实际上,您应该让SQLException冒泡到调用方 您永远不会关闭连接、语句或结果集
最直接的问题是:您没有引用acct字符串,并且它后面没有空格,因此您将得到如下结果:

Select balance from acctInfo where account = fredand password = 'bloggs'
更重要的问题是:首先不应该像这样在SQL中包含值。您应该使用参数化SQL。目前,您的代码对您开放

进一步的安全问题:您的代码表明密码是以纯文本形式保存的。请不要这样做

设计问题:

您似乎将帐户余额视为字符串。真奇怪。BigDecimal将是更自然的表示形式。 您捕获的是异常,而不是特定的异常 您将返回异常字符串表示形式,就像它是帐户余额一样。哎呀!实际上,您应该让SQLException冒泡到调用方 您永远不会关闭连接、语句或结果集
我知道这不是你问题的原因,但你的压痕很糟糕。我知道这不是你问题的原因,但是你的缩进很糟糕。你能告诉我这个代码中缺少的确切问题吗?我正在使用query-ResultSet rs=stmt从sql server获取记录。executeQuery从acctInfo中选择余额,其中account=+acct+和password='+pwd+'@user1369219:我已经非常清楚地向您展示了确切的问题-看看将生成的示例SQL。。。你觉得这样对吗?我还指出,应该使用参数化SQL来避免SQL注入攻击。如果你对此进行研究,你会很快找到正确的方法,使用准备好的语句和参数-但我恐怕没有时间向你灌输代码。感谢亲爱的Jon,我已经尝试过了,现在我能够使用相同的方法,我将连接J2ME,请在这篇文章中提供帮助。您能告诉我这个代码中缺少的确切问题吗?我正在使用query-ResultSet rs=stmt从sql server获取记录。executeQuery从acctInfo中选择余额,其中account=+acct+和password='+pwd+'@user1369219:我已经非常清楚地向您展示了确切的问题-看看将生成的示例SQL。。。你觉得这样对吗?我还指出,应该使用参数化SQL来避免SQL注入攻击。如果你在这方面做了研究,你会很快找到正确的方法,准备好语句和参数,但我恐怕没有时间给你填鸭式地输入代码。谢谢亲爱的Jon,我已经尝试过了,现在我能够使用它,我将连接J2ME,请在这篇文章中提供帮助-