Java 50894读取错误:尝试选择查询以比较用户名和密码时,关键字“user”附近的语法不正确

Java 50894读取错误:尝试选择查询以比较用户名和密码时,关键字“user”附近的语法不正确,java,sql-server,database,Java,Sql Server,Database,将标识符保护为,并且不能使用。考虑下面的,使用[]-引号-引文也可以工作; 从[用户]中选择用户名、密码,其中用户名=?密码=? 对于不同的保留字,此错误相当常见-请务必参阅手册。理想情况下,我会给表和列命名,使它们不是任何保留关键字 另外,将executeUpdate更改为,因为这是一个选择操作 也可以谨慎地切换到不存储纯文本密码的用户表。。纯文本密码的问题有两个方面 桌上未经授权的阅读会立即损害所有账户,并且; 人们经常重复使用密码,这会使他们的其他帐户(如电子邮件、银行帐户)易受攻击。 将

将标识符保护为,并且不能使用。考虑下面的,使用[]-引号-引文也可以工作; 从[用户]中选择用户名、密码,其中用户名=?密码=? 对于不同的保留字,此错误相当常见-请务必参阅手册。理想情况下,我会给表和列命名,使它们不是任何保留关键字

另外,将executeUpdate更改为,因为这是一个选择操作

也可以谨慎地切换到不存储纯文本密码的用户表。。纯文本密码的问题有两个方面

桌上未经授权的阅读会立即损害所有账户,并且; 人们经常重复使用密码,这会使他们的其他帐户(如电子邮件、银行帐户)易受攻击。 将标识符保护为,并且不能使用。考虑下面的,使用[]-引号-引文也可以工作; 从[用户]中选择用户名、密码,其中用户名=?密码=? 对于不同的保留字,此错误相当常见-请务必参阅手册。理想情况下,我会给表和列命名,使它们不是任何保留关键字

另外,将executeUpdate更改为,因为这是一个选择操作

也可以谨慎地切换到不存储纯文本密码的用户表。。纯文本密码的问题有两个方面

桌上未经授权的阅读会立即损害所有账户,并且; 人们经常重复使用密码,这会使他们的其他帐户(如电子邮件、银行帐户)易受攻击。
在使用select查询时,请替换此查询

state.executeUpdate;使用ResultSet rs=state.executeQuery

然后检查是否存在具有如下指定用户名和密码的记录

  public void login(String name,String password) throws SQLException{
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
    }
    java.sql.Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;"+"user=looi963;password=1234;database=user");
    PreparedStatement state=conn.prepareStatement("Select username,password from user where username=? and password = ?");
    state.setString(1,name);
    state.setString(2, password );
    int count = state.executeUpdate();
    if(count>0){
        System.out.println("Successful login");
    }
}

在使用select查询时,请替换此查询

state.executeUpdate;使用ResultSet rs=state.executeQuery

然后检查是否存在具有如下指定用户名和密码的记录

  public void login(String name,String password) throws SQLException{
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(SocketServer.class.getName()).log(Level.SEVERE, null, ex);
    }
    java.sql.Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;"+"user=looi963;password=1234;database=user");
    PreparedStatement state=conn.prepareStatement("Select username,password from user where username=? and password = ?");
    state.setString(1,name);
    state.setString(2, password );
    int count = state.executeUpdate();
    if(count>0){
        System.out.println("Successful login");
    }
}

不同客户端语言可能存在重复,但问题相同运行查询时不要使用executeUpdate。改用executeQuery。请阅读您正在使用的方法的Javadoc,并阅读JDBC教程,例如Oracle的官方教程:不同客户端语言可能重复,但问题相同运行查询时不要使用executeUpdate。改用executeQuery。请阅读您正在使用的方法的Javadoc,并阅读JDBC教程,例如Oracle的官方教程:但是,还有另一个错误55447错误阅读:生成了一个用于更新的结果集。有什么想法吗?我需要一个resultset语句来运行它吗?@looi963确保针对不同的问题问不同的问题-但首先搜索!但是,还有另一个错误55447错误读取:为更新生成了一个结果集。有什么想法吗?我需要一个resultset语句来运行它吗?@looi963确保针对不同的问题问不同的问题-但首先搜索!