java “com.mysql.jdbc.exceptions.MySQLSyntaxErrorException”大于号和小于号的可能性?

9rbhqvlz  于 2022-10-30  发布在  Java
关注(0)|答案(1)|浏览(156)

异常错误类型:您的SQL语法中有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在第1行“1”附近使用的正确语法

try
{
    Class.forName("com.mysql.jdbc.Driver");  
    Connection con=DriverManager.getConnection( "jdbc:mysql://localhost:3306/jsupermarket","root","");  

    String signString ="";
    if (type == 1)//greater
    {
        signString  = ">=" ;
        System.out.print("1 selected \n");
    }
    if (type == 2)//lesser
    {
        signString  = "<=" ;
        System.out.print("2 selected \n");
    }
    if (type == 3)//equa;
    {
        signString  = "=" ;
        System.out.print("3 selected \n");
    }

    String sql = "SELECT * FROM total WHERE totals ? ?;";

    PreparedStatement stmt = con.prepareStatement(sql);
    stmt.setString(1,signString);
    stmt.setString(2,amount);

    ResultSet rs = stmt.executeQuery();

该语句是根据“WHERE”语句后替换的条件返回数据。我得到了语法错误,但我没有看到问题,请帮助
当接收到数据时,它保存在2D ARRAY中,然后返回到另一个名为“客户端”的类,从而将数据分散到JTable中

  • 我正在使用RMI
mf98qq94

mf98qq941#

主要的问题是使用?语法的参数绑定只能绑定SQL语句中的 values,不能用于>==等运算符。
您需要使用字符串连接来构建查询字符串。正如Ksu在注解中指出的,分号也应该被省略。

String sql = "SELECT * FROM total WHERE totals " + signString + " ?";

PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1,amount);

您可能知道,通常不鼓励使用字符串串联来构建SQL查询,因为它可能会导致SQL注入漏洞。这是首选绑定参数的一个原因。
在这种情况下,signString值完全由程序控制,恶意用户没有机会注入另一个值,在这里使用串联是安全的。
仍然建议在允许的情况下使用绑定参数,如上面的示例所示。

相关问题