Java Jdbc SQL 异常(语法错误)

Posted

技术标签:

【中文标题】Java Jdbc SQL 异常(语法错误)【英文标题】:Java Jdbc SQL Exception (Syntax Error) 【发布时间】:2016-03-01 07:59:44 【问题描述】:

我正在为我的注册系统制作登录示例。在做一些研究时,抓取一些我在互联网上看到的代码。我将在用户名和密码字段中登录。我在使用 SQL 时遇到错误的地方。任何帮助,提示将不胜感激!

错误

Error message: Syntax error: Encountered "," at line 1, column 42.
Error code: -1
SQL State: 42X01

这是编译器将错误指向第 1 行第 42 列的地方。我使用 Windows 侦听器来关闭系统。

窗口监听代码

//Window Listener
    addWindowListener(new WindowAdapter()
       public void windowClosing(WindowEvent e)
           System.exit(0);
       //window Closing
       );

代码 这是我登录的地方。当我完成填写用户名和密码文本字段并点击登录按钮时,我遇到了错误。

loginButton.addActionListener(new ActionListener ()
     public void actionPerformed(ActionEvent e)

         String inputUsername = usernameTextField.getText().trim();
         String inputPassword = String.valueOf(passwordPasswordField.getText());
         String inputUserType = listUser.getSelectedItem().toString();

          if(inputUsername.isEmpty() && inputPassword.isEmpty())
                  JOptionPane.showMessageDialog(null, "Please fill up!");
          
          else if(inputUsername.isEmpty())
                 JOptionPane.showMessageDialog(null, "Please enter your username");
          
          else if(inputPassword.isEmpty())
                 JOptionPane.showMessageDialog(null, "Please enter your password");
          
          else
                String myQuery = "SELECT * FROM USERTYPE WHERE USERNAME = ?, PASSWORD = ?";

          try(Connection myConnection = DBUtil.getConnection(DBType.JDBC);
                       PreparedStatement myPs = myConnection.prepareStatement(myQuery);
                       ResultSet myResultSet = myPs.executeQuery()) 

                        while(myResultSet.next())

                            myPs.setString(1, inputUsername);
                            myPs.setString(2, inputPassword);

                            myPs.executeUpdate();
                            JOptionPane.showMessageDialog(null, "Succesfuly Inserted!");
                        //end of else
                    //end of try   

                   catch(SQLException ex) 
                        DBUtil.processException(ex);
                    //end of catch
                    //end of else
        //end of action performed
            );//end of action listener`

DBUtil 作为我的连接和异常这是我搁置我的连接和异常的地方,它会引发错误

private static final String dbUrl = "jdbc:derby://localhost:1527/Info";
private static final String username = "john";
private static final String pass = "john";
                                       //Argument for DBType
public static Connection getConnection(DBType dbType) throws SQLException
    return DriverManager.getConnection(dbUrl,username,pass);


public static void processException(SQLException e)
    System.err.println("Error message: "+e.getMessage());
    System.err.println("Error code: "+e.getErrorCode());
    System.err.println("SQL State: "+e.getSQLState());

【问题讨论】:

WHERE USERNAME = ?, PASSWORD = ? - 您在哪个手册中找到了该语法?应该是WHERE USERNAME = ? and PASSWORD = ? 谢谢你的回答几乎一样。你是神! :) 【参考方案1】:

您需要在查询中使用and 而不是逗号,,如下所示:

   String myQuery = "SELECT * FROM USERTYPE WHERE USERNAME = ? and PASSWORD = ?"

并且您需要在myPs.executeQuery() 之前设置2 参数,如下所示:

  PreparedStatement myPs = myConnection.prepareStatement(myQuery);
  myPs.setString(1, some_userName);
  myPs.setString(2, some_password);

【讨论】:

它已经摆脱了错误。现在我有错误“当前语句的至少一个参数未初始化。”我已经调用了我的 setString 1 和 2。第一个索引是用户名,第二个是密码?谢谢 你的救命稻草。谢谢你。我刚开始学习jdbc 谢谢你的帮助。【参考方案2】:

首先,你的代码中有很多语法错误,要么你只是从某个地方复制粘贴了它,要么你不小心把你的问题加上错误并希望找到正确的答案。

第二件事,

对于您尝试调用 executeUpdate 的查询不正确。这是一个 Select 查询,您必须在调用 executeQuery 之前先设置参数

String myQuery = "SELECT * FROM USERTYPE WHERE `USERNAME` = ? AND `PASSWORD` = ?";

          try(Connection myConnection = DBUtil.getConnection(DBType.JDBC);
                       PreparedStatement myPs = myConnection.prepareStatement(myQuery)


                            myPs.setString(1, inputUsername);
                            myPs.setString(2, inputPassword);
                       ResultSet myResultSet = myPs.executeQuery();


                        //end of else
                    //end of try   

                   catch(SQLException ex) 
                        DBUtil.processException(ex);
                    //end of catch
                    //end of else
        //end of action performed
            );//end of action listener`

【讨论】:

谢谢它已经在工作了。也许我只是对语法有点困惑。顺便说一句,这有很大帮助! :)

以上是关于Java Jdbc SQL 异常(语法错误)的主要内容,如果未能解决你的问题,请参考以下文章

线程“主”com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException 中的异常:您的 SQL 语法有错误

PreparedStatementCallback; JDBC Spring 中的错误 SQL 语法

来自 jdbc 的 Mysql 语法异常

我的 java 程序的 SQL 语法错误

Java JDBC 程序在从表中获取特定行时抛出 SQL 语法错误

MySQL语法错误异常: