Java JDBC-ORA-00984:此处不允许列
在我的代码中,我希望在数据库中插入值,但它会引发异常,而在语句接口中,我们不能动态传递值,但可以手动传递值Java JDBC-ORA-00984:此处不允许列,java,oracle,jdbc,Java,Oracle,Jdbc,在我的代码中,我希望在数据库中插入值,但它会引发异常,而在语句接口中,我们不能动态传递值,但可以手动传递值 import java.util.*; import java.sql.*; public class Jdbc { public static void main(String j[]) { Scanner sc = new Scanner(System.in); System.out.print("Enter Id:-");
import java.util.*;
import java.sql.*;
public class Jdbc {
public static void main(String j[]) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter Id:-");
int id = sc.nextInt();
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "System", "Mohit");
String sql = "insert into st values(id)";
Statement stmt = conn.createStatement();
boolean res = stmt.execute(sql);
if (!res) {
System.out.println("Value Inserted");
} else {
System.out.println("Value Not Inserted");
}
} catch (Exception k) {
System.out.println("Exception is:-" + k);
}
}
}
关于错误 从链接 如果列名称(如值中所示),则将抛出ORA-00984 INSERT语句的子句),用于 不允许。您可能在表达式中使用了列名,其中 这是不允许的。通常,ORA-00984在包含 INSERT语句的VALUES子句中的列名 要更正ORA-00984,只需查看SQL的语法即可 语句,仅在适当的地方使用列名。 您还可能会发现,在 INSERT语句,而不是列名
解决方案 如果仔细查看查询,您会发现语法不正确。以下是正确的插入语法:
C:\Users\MOHIT\Desktop\PACK>java Jdbc
Enter Id:-0 0
Exception is:-java.sql.SQLException: ORA-00984: column not allowed here
如果要传递所有列,则不需要指定列名称
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
如果您的表仅包含id,则可以使用:
INSERT INTO table_name VALUES (value1, value2);
String sql = "insert into st values(" + id + ")";
//---concat your id with your query-^--^-^----
String sql = "insert into st(id) values(" + id + ")";
//---------------------------^^-------------^^-------
如果表包含多列,则可以使用:
INSERT INTO table_name VALUES (value1, value2);
String sql = "insert into st values(" + id + ")";
//---concat your id with your query-^--^-^----
String sql = "insert into st(id) values(" + id + ")";
//---------------------------^^-------------^^-------
注意 语句可能导致语法错误或必须使用的错误 因此,您可以使用:
INSERT INTO table_name VALUES (value1, value2);
String sql = "insert into st values(" + id + ")";
//---concat your id with your query-^--^-^----
String sql = "insert into st(id) values(" + id + ")";
//---------------------------^^-------------^^-------
问题在于您的查询 当你对DB说:“插入st值(id)”; db不知道“id”是什么。它试图猜测它是一个列,因为它是一个没有用引号括起来的元素,这意味着它不是一个字符串值 但是,此时没有可用的列,这是由引发的异常指示的 一种方法是使用YCF_L所述的准备好的语句。另外,始终关闭结果集(这里没有)、语句和连接也是一个好主意
String sql="insert into st values(?)";
PreparedStatement insert = connection.prepareStatement(sql);
insert.setInt(1, id);
boolean res = insert.execute(sql);
...