2017-03-17 101 views
1
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); 
     } 
    } 
} 

在这里,在我的代码要插入数据库的价值,但它引发了我的异常,而在对帐单接口,我们不能通过值动态,但我们可以通过数值手动JDBC - ORA-00984:列在这里不允许

C:\Users\MOHIT\Desktop\PACK>java Jdbc 
Enter Id:-0 0 
Exception is:-java.sql.SQLException: ORA-00984: column not allowed here 

回答

2

关于错误

从链接here

如果列表名称(如INSERT语句的VALUES 子句)在不允许的表达式中使用,则会抛出ORA-00984。您可能在 不允许的表达式中使用了列名。通常,ORA-00984在INSERT语句的VALUES子句中包含 列名时发生。

要更正ORA-00984,只需查看SQL 语句的语法,并仅在适当的地方使用列名。

您也可能发现在INSERT语句中,而不是列名中包含字符值是合适的。


解决方案

如果你看看你的查询更近,那么你会发现语法是不正确的这里是插入正确的语法:

INSERT INTO table_name (column1, column2) VALUES (value1, value2); 

如果你想要传递所有列,那么您不需要指定列名称。

INSERT INTO table_name VALUES (value1, value2); 

如果你的表格只包含ID,那么你可以使用:

String sql = "insert into st values(" + id + ")"; 
//---concat your id with your query-^--^-^---- 

如果您的表包含多个列,那么你可以使用:

String sql = "insert into st(id) values(" + id + ")"; 
//---------------------------^^-------------^^------- 

声明可能会导致语法错误或SQL Injection,你必须使用PreparedStetement

因此,你可以使用:

String sql="insert into st values(?)"; 
PreparedStatement insert = connection.prepareStatement(sql); 
insert.setInt(1, id); 
boolean res = insert.execute(sql); 
... 
0

问题是与您的查询

,当你在说DB:“插入st值(id)”; db不知道“id”是什么。它试图猜测它是一个列,因为它是一个不包含在引号中的元素,这意味着它不是一个字符串值。

但是当时没有这样的列可用,这是由引发的异常表示的。

一种方法是使用YCF_L所述的准备好的语句。总是关闭ResultSet(这里没有一个),语句和连接是一个好主意。

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(?)"; 
      PreparedStatement psmt = connection.prepareStatement(sql); 
      psmt.setInt(1, id); 
      boolean res = psmt.executeUpdate(); 
      if (!res) { 
       System.out.println("Value Inserted"); 
      } else { 
       System.out.println("Value Not Inserted"); 
      } 
     } catch (Exception k) { 
      System.out.println("Exception is:-" + k); 
     } 
     finally { 
      psmt.close(); 
      conn.close();   
     } 
    } 
} 
相关问题