【问题标题】:java.sql.SQLSyntaxErrorException: ORA-00947: not enough valuesjava.sql.SQLSyntaxErrorException: ORA-00947: 没有足够的值
【发布时间】:2020-08-16 02:28:07
【问题描述】:
System.out.println("Enter the code: ");
Code=input.next();                       
System.out.println("Enter the title: ");
Title=input.next();   
System.out.println("Enter the semster: ");
Semester=input.next(); 
System.out.println("Enter the year: ");
Year=input.next();           
System.out.println("Enter the grade: ");
Grade=input.next(); 

String insertStatement ="insert into Courses values('"+Code+"'+'"+Title+"'+'"+Semester+"'+'"+Year+"'+'"+Grade+"')";
System.out.println(insertStatement);
s.execute(insertStatement); 
continue;

当我插入值并运行代码时,它会显示给我

insert into Courses values('GET'+'CS'+'Fall'+'2016'+'C+')

错误

java.sql.SQLSyntaxErrorException: ORA-00947: not enough values

有人可以为我解释一下吗?谢谢

【问题讨论】:

  • 一些提示:变量名应该几乎总是小写(代码应该是代码,年份应该是年份等)...也请查看PreparedStatement 类。将变量直接连接成 sql 字符串是非常糟糕的做法
  • 为什么要连接成一个字符串?您不想将 5 个单独的值传递给 Oracle 吗? String insertStatement ="insert into Courses values('"+Code+"','"+Title+"','"+Semester+"','"+Year+"','"+Grade+"')";

标签: java mysql sql database oracle


【解决方案1】:

更新您的 SQL 语句以使用如下所示的列名称:

String insertStatement = "INSERT INTO Courses (codeColName, titleColName, semesterColName, yearColName, gradeColName)"
                + "VALUES ('" + code + "', '" + title + "', '" + semester + "', '" + year + "', '" + grade + "')";

,使用PreparedStatement 避免SQL 注入的最佳实践

【讨论】:

  • @user13016777 检查更新的语法以及列文本是否保留引号如果数字删除如果
【解决方案2】:

正确准备查询,你的双引号搞砸了。

你需要这样的东西:

"insert into Courses values('"+Code+"'"+"'"+Title+"'"+"'"+Semester+"'"+"'"+Year+"'"+"'"+Grade+"')"

但是是的,它很容易发生 SQL 注入,所以最好使用 PreparedStatement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多