【问题标题】: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 ' ' in Line 1您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 1 行中的 ' ' 附近使用的正确语法
【发布时间】:2017-04-29 12:52:20
【问题描述】:

我尝试将以下数据插入数据库。但它给了我以上 这个错误。 您的 SQL 语法有错误;检查对应的手册 您的 MariaDB 服务器版本,以便在第 1 行的 ' ' 附近使用正确的语法。

我尝试了几件事,但没有解决。

  try{
         Statement stat = Database.getStatement();
         stat.executeUpdate("INSERT  INTO"+" admission"+
             " (a_id,sickness,recPhysicianDetails,
                admittedDate,Patient_ID,Doctor_id,Doctor_id1)"+" 
              VALUES
               ('"+txt1.getText()+"',
                '"+txt7.getText()+"','"+txt8.getText()+"', '"+txt6.getText()+"',
 (  SELECT  ID  FROM  patient  WHERE  Patient_name='"+txt3.getText()+"' ),
 (  SELECT  ID  FROM  employee WHERE  Name='"+txt9.getText()+"' ),
 (  SELECT  ID  FROM  employee WHERE  Name='"+txt10.getText()+"')"  );

        }
        catch(Exception e){
            e.printStackTrace();
        }

【问题讨论】:

  • 你在txt6.getText()之前有''...这是连续两个'字符。删除其中一个。
  • 为了避免这个问题,你必须使用 PrepapredStatement
  • 查询字符串中缺少一个括号试试这个。 stat.executeUpdate("INSERT INTO"+"入院"+" (a_id,sickness,recPhysicianDetails,admittedDate,Patient_ID,Doctor_id,Doctor_id1)"+" VALUES('"+txt1.getText()+"','"+txt7 .getText()+"','"+txt8.getText()+"', '"+txt6.getText()+"',(SELECT ID FROM patient WHERE Patient_name='"+txt3.getText()+" '),(SELECT ID FROM employee WHERE Name='"+txt9.getText()+"'),(SELECT ID FROM employee WHERE Name='"+txt10.getText()+"'))");跨度>
  • 不要将值连接到查询字符串中,这会使您容易受到 SQL 注入的攻击,您应该使用带参数的预准备语句。

标签: java mysql mariadb


【解决方案1】:

在您的解决方案中,引号 (') 放置不正确,而且末尾缺少右括号。使用PreparedStatement 将确保您无需担心引号,试试这个:

Connection conn = //get connection
PreparedStatement stat = conn.prepareStatement("INSERT INTO  admission (a_id,sickness,recPhysicianDetails,admittedDate,Patient_ID,Doctor_id,Doctor_id1)"
+" VALUES(?, ?, ?, ?, (SELECT ID FROM patient WHERE Patient_name = ?),(SELECT ID FROM employee WHERE Name = ?),(SELECT ID FROM employee WHERE Name = ?))");
stat.setString(1, txt1.getText());
stat.setString(2, txt7.getText());
stat.setString(3, txt8.getText());
stat.setString(4, txt6.getText());
stat.setString(5, txt3.getText());
stat.setString(6, txt9.getText());
stat.setString(7, txt10.getText());
stat.executeUpdate();

【讨论】:

    【解决方案2】:

    我会建议使用准备好的语句,而不是直接从文本框中调用值。

     try{
         Statement stat = Database.getStatement();
         stat.executeUpdate("INSERT INTO admission"+
         "(a_id,sickness,recPhysicianDetails,admittedDate,Patient_ID,Doctor_id,Doctor_id1)"+
         " VALUES('"+txt1.getText()+"','"+txt7.getText()+"','"+txt8.getText()+"','"+txt6.getText()+"',"+
         "(SELECT ID FROM patient WHERE Patient_name='"+txt3.getText()+"'),"+
         "(SELECT ID FROM employee WHERE Name='"+txt9.getText()+"'),"+
         "(SELECT ID FROM employee WHERE Name='"+txt10.getText()+"')");
        }
        catch(Exception e){
            e.printStackTrace();
        }
    

    你这里插入了一些双引号错误的地方,请检查一下,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2017-02-14
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多