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);
}
}
}
这里在我的代码中我想在数据库中插入值,但它会抛出异常,而在Statement接口中我们无法动态传递值但是我们可以手动传递值
C:\Users\MOHIT\Desktop\PACK>java Jdbc
Enter Id:-0 0
Exception is:-java.sql.SQLException: ORA-00984: column not allowed here
答案 0 :(得分:3)
关于错误
从链接here
如果是列名,则会抛出ORA-00984(就像在VALUES中一样) INSERT语句的子句,用于表达式中 不允许。您可能在表达式中使用了列名称 这是不允许的。通常,ORA-00984在包括a时发生 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);
...
答案 1 :(得分:0)
问题在于您的查询
当你对DB说:“插入st值(id)”; db不知道“id”是什么。它试图猜测它是一个列,因为它是一个没有用引号括起来的元素,这意味着它不是一个字符串值。
但是当时没有可用的列,这是由引发的Exception指示的。
执行此操作的方法是使用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();
}
}
}