Java 为什么这个SQL语句会导致错误?

Java 为什么这个SQL语句会导致错误?,java,sql,phpmyadmin,Java,Sql,Phpmyadmin,我对此非常生气,所以我向人群寻求帮助;) 我想做的是:我们有一个统一学习游戏,它将实现一个登录窗口。然后对输入的凭证进行散列(pw是)并发送到服务器,然后服务器应根据数据库进行检查 我有下表: xy.U使用以下立柱进行确认: id用户名电子邮件密码哈希代码已创建 为什么我的代码 String sql = "SELECT " + "xy.users_confirms.password as pwhash, " +"FROM xy.users_conf

我对此非常生气,所以我向人群寻求帮助;)

我想做的是:我们有一个统一学习游戏,它将实现一个登录窗口。然后对输入的凭证进行散列(pw是)并发送到服务器,然后服务器应根据数据库进行检查

我有下表:

xy.U使用以下立柱进行确认:

id用户名电子邮件密码哈希代码已创建

为什么我的代码

String sql = "SELECT " + "xy.users_confirms.password as pwhash, "
                        +"FROM xy.users_confirms "  +"WHERE xy.users_confirms.username = " +"\"userNameToGetHashFor\"";
引导我找到SQLException“参数索引超出范围(1>参数数量,即0)”

?


谢谢,非常感谢您的任何意见

试试这个:

 String parameter = "'"+ strNameToGetHashFor + "'";
 String sql = "SELECT " + "xy.users_confirms.password as pwhash, "
             +"FROM xy.users_confirms "  
             +"WHERE xy.users_confirms.username ="+ parameter;

您正在使用
varchar
值作为参数,因此它必须是这样的引号。
用户名'
。或者您可以使用。

试试这个:

 String parameter = "'"+ strNameToGetHashFor + "'";
 String sql = "SELECT " + "xy.users_confirms.password as pwhash, "
             +"FROM xy.users_confirms "  
             +"WHERE xy.users_confirms.username ="+ parameter;

您正在使用
varchar
值作为参数,因此它必须是这样的引号。
用户名'
。或者您可以使用。

试试这个:

 String parameter = "'"+ strNameToGetHashFor + "'";
 String sql = "SELECT " + "xy.users_confirms.password as pwhash, "
             +"FROM xy.users_confirms "  
             +"WHERE xy.users_confirms.username ="+ parameter;

您正在使用
varchar
值作为参数,因此它必须是这样的引号。
用户名'
。或者您可以使用。

试试这个:

 String parameter = "'"+ strNameToGetHashFor + "'";
 String sql = "SELECT " + "xy.users_confirms.password as pwhash, "
             +"FROM xy.users_confirms "  
             +"WHERE xy.users_confirms.username ="+ parameter;

您正在使用
varchar
值作为参数,因此它必须是这样的引号。
用户名'
。或者您也可以使用。

我个人会尝试直接在phpmyadmin中使用自定义查询框来获取一个工作查询。一旦有了一个工作查询,就可以用java重新编写它

我会尝试将如下语法写入phpmyadmin查询框:

SELECT password as pwhash
FROM xy.users_confirms
WHERE username ='userNameToGetHashFor'
使用上述语法,我看不出您的错误会继续存在

显示自定义查询框的Phpmyadmin屏幕帽:
(screen cap中的两个空文本框只是我隐藏了我的数据库信息)

就我个人而言,我会尝试直接在phpmyadmin中使用自定义查询框获取一个工作查询。一旦有了一个工作查询,就可以用java重新编写它

我会尝试将如下语法写入phpmyadmin查询框:

SELECT password as pwhash
FROM xy.users_confirms
WHERE username ='userNameToGetHashFor'
使用上述语法,我看不出您的错误会继续存在

显示自定义查询框的Phpmyadmin屏幕帽:
(screen cap中的两个空文本框只是我隐藏了我的数据库信息)

就我个人而言,我会尝试直接在phpmyadmin中使用自定义查询框获取一个工作查询。一旦有了一个工作查询,就可以用java重新编写它

我会尝试将如下语法写入phpmyadmin查询框:

SELECT password as pwhash
FROM xy.users_confirms
WHERE username ='userNameToGetHashFor'
使用上述语法,我看不出您的错误会继续存在

显示自定义查询框的Phpmyadmin屏幕帽:
(screen cap中的两个空文本框只是我隐藏了我的数据库信息)

就我个人而言,我会尝试直接在phpmyadmin中使用自定义查询框获取一个工作查询。一旦有了一个工作查询,就可以用java重新编写它

我会尝试将如下语法写入phpmyadmin查询框:

SELECT password as pwhash
FROM xy.users_confirms
WHERE username ='userNameToGetHashFor'
使用上述语法,我看不出您的错误会继续存在

显示自定义查询框的Phpmyadmin屏幕帽:
(screen cap中的两个空文本框只是我隐藏了我的数据库信息)

pwhash后面的逗号是一个潜在原因:

       + "xy.users_confirms.password as pwhash*!*,*!* "
根据DBMS的不同,您可能还需要使用单引号而不是双引号,如下所示:

       + "'userNameToGetHashFor'";

此外,此代码可能容易受到SQL注入攻击,因此您可能希望将UsernameTogethash设置为参数,而不是将字符串连接到SQL语句中。

pwhash后面的逗号是一个潜在原因:

       + "xy.users_confirms.password as pwhash*!*,*!* "
根据DBMS的不同,您可能还需要使用单引号而不是双引号,如下所示:

       + "'userNameToGetHashFor'";

此外,此代码可能容易受到SQL注入攻击,因此您可能希望将UsernameTogethash设置为参数,而不是将字符串连接到SQL语句中。

pwhash后面的逗号是一个潜在原因:

       + "xy.users_confirms.password as pwhash*!*,*!* "
根据DBMS的不同,您可能还需要使用单引号而不是双引号,如下所示:

       + "'userNameToGetHashFor'";

此外,此代码可能容易受到SQL注入攻击,因此您可能希望将UsernameTogethash设置为参数,而不是将字符串连接到SQL语句中。

pwhash后面的逗号是一个潜在原因:

       + "xy.users_confirms.password as pwhash*!*,*!* "
根据DBMS的不同,您可能还需要使用单引号而不是双引号,如下所示:

       + "'userNameToGetHashFor'";

此外,此代码可能容易受到SQL注入攻击,因此您可能希望将用户名设置为参数,而不是将字符串连接到SQL语句中。

我想知道来自的
phash、
之前的逗号是否会导致此问题。话虽如此,您应该使用一个
preprepred语句
。请参阅以了解更多详细信息。很抱歉,字符串sql随后使用PreparedStatement=connection.prepareStatement(sql)进行准备;我想知道
phash、
之后和
之前的逗号是否会引起问题。话虽如此,您应该使用一个
preprepred语句
。请参阅以了解更多详细信息。很抱歉,字符串sql随后使用PreparedStatement=connection.prepareStatement(sql)进行准备;我想知道
phash、
之后和
之前的逗号是否会引起问题。话虽如此,您应该使用一个
preprepred语句
。请参阅以了解更多详细信息。很抱歉,字符串sql随后使用PreparedStatement=connection.prepareStatement(sql)进行准备;我想知道
phash、
之后和
之前的逗号是否会引起问题。话虽如此,您应该使用一个
preprepred语句
。请参阅以了解更多详细信息。很抱歉,字符串sql随后使用PreparedStatement=connection.prepareStatement(sql)进行准备;是的,没错。这绝对是单引号。但是,即使该语句在phpMyAdmin中工作,它还是通过Java工作的……是的,没错。这绝对是单引号。但是性病