当前位置: 首页 > 知识库问答 >
问题:

尝试将java连接到mysql时获取MySQLSyntaxErrorException[duplicate]

狄玉书
2023-03-14

我不擅长java,还在尝试如何通过jdbc驱动程序将java连接到mysql(xampp),有人知道我为什么总是出错吗?

    public class connect {



        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException{


            ResultSet rs = null;
            PreparedStatement pst = null;
            String hostName = "localhost";
            String dbPort = "3306";
            String databaseName = "Libraryusers";
            String dbUser = "root";
            String dbPassword = "";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
          Connection conn = DriverManager.getConnection("jdbc:mysql://"+hostName+":"
                + dbPort+"/"+databaseName+"?"+"user="+dbUser+"&password=" + dbPassword);
            System.out.print("Database is connected !");

             String sql = "select * from login where username = ? and password = ?";

            pst = conn.prepareStatement(sql);
            pst.setString(1,"rod1");
            pst.setString(2,"rod");
            rs = pst.executeQuery(sql);
            if (rs.next())
            {
                System.out.println("username and password is correct");
            }
            else
            {
                System.out.println("invalid username and password");
            }





        }

}

以下是控制台结果

run:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? and password = ?' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2483)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2441)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1381)
at login.connect.main(connect.java:44)
Database is connected 
!C:\Users\rodchris\AppData\Local\NetBeans\Cache\8.2\executor-
snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

我已经创建了数据库并插入了两个数据,其中一个是“username=rod1,password=rod”

共有2个答案

何兴学
2023-03-14

根据https://dev.mysql.com/doc/refman/5.7/en/keywords.html,密码是MySQLSQL中的保留字。因此,如果您想将其用作SQL标识符,则需要使用反引号对其进行引用;例如。

  String sql = "select * from login where username = ? and `password` = ?";

(但是用户名登录不要……)

严宏旷
2023-03-14

通过在executeQuery(SQL)再次指定SQL脚本,您取消了参数。。。

试试这样:

public static void main(String[] args)
      throws ClassNotFoundException, InstantiationException, IllegalAccessException,
             SQLException
{
   final String hostName = "localhost";
   final String dbPort = "3306";
   final String databaseName = "Libraryusers";
   final String dbUser = "root";
   final String dbPassword = "";

   // this is not needed anymore, but many still use it...
   Class.forName("com.mysql.jdbc.Driver").newInstance();

   try (final Connection conn = DriverManager.getConnection("jdbc:mysql://" + hostName + ":" +
                           dbPort + "/" + databaseName + "?user=" + dbUser + "&password=" +
                           dbPassword))
   {
      System.out.print("Database is connected !");

      final String sql = "SELECT * FROM `login` WHERE `username` = ? AND `password` = ?";

      try ( final PreparedStatement pst = conn.prepareStatement(sql))
      {
         pst.setString(1,"rod1");
         pst.setString(2,"rod");
         try (final ResultSet rs = pst.executeQuery())
         {
            if (rs.next())
            {
               System.out.println("username and password is correct");
            }
            else
            {
               System.out.println("invalid username and password");
            }
         }
      }
   }
}
 类似资料:
  • 尝试连接到SQL服务器2014时出错。我使用JRE7和sqljdbc4-4.0.jar 以下是我的java代码: 以下是完整的堆栈跟踪: JAVAext.dirs:C:\Cisco\CallStudio\eclipse\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext-com。微软sqlserver。jdbc。SQLServerException:驱动程序无法使用安全

  • 我试图连接到mysql数据库使用hibernate从cfg文件作为 虽然我的连接字符串、用户名、密码是正确的,并且在其他具有基本jdbc连接的项目中运行良好,但当我使用hibernate尝试它时,我在控制台上遇到了这个错误 是的,数据库服务器已启动并运行,但来自此Hibernate应用程序的连接被拒绝

  • 我是新来的,对Mysql和Python非常陌生。我对这个insert语句有一个问题: 错误是: 使用以下语句创建表: 我花了一整天的时间想弄清楚这件事。谁能给我一个指针吗?

  • 我正在使用SpringMVC和Hibernate构建一个应用程序。我还没有将Hibernate和Spring集成在一起(对两者都是新的),并且希望确保可以首先通过Hibernate打开会话。 我创建了一个简单的函数来测试,当前收到以下错误: 线程“main”java.lang.nosuchmethoderror中出现异常:org.hibernate.integrator.internal.inte

  • 我正试图让node.js将信息发送回一个网站我正试图从这里获取信息(rn它是一个临时值),但是我如何使用JavaScript获取信息呢?或者我需要更改node.js项目中的某些内容吗 当我试着 它将错误:“TypeError:Failed to Fetch”

  • 问题内容: 我正在尝试使用Java中的PreparedStatement执行查询。 尝试执行查询时出现错误号1064(语法错误)。 我已经在MySQL查询浏览器中使用替代值测试了此方法,效果很好。 我的代码有什么问题? 以下是相关代码: 这是我得到的例外: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法有错误;检查与您