Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC-ORA-00984:此处不允许列_Java_Oracle_Jdbc - Fatal编程技术网

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);
...