2017-03-17 116 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();   
     } 
    } 
}