[英]java.sql.SQLSyntaxErrorException: ORA-01747
搜索了整个站点,但没有任何帮助,因此我决定打开一个新主题。 这是我的问题:我正在用Java开发一个简单的GUI,该GUI在后面使用JDBC。 以下是一些标题:-我建立了成功的数据库连接,-我可以运行SELECT语句并在代码内获取数据。 但是问题是,当我使用INSERT语句时,它给出下面的错误,该错误的描述为“ java.sql.SQLSyntaxErrorException:ORA-01747无效的username.tablename.columnname或tablename.columnname等...”在网上挖了两天,但我无法提出解决方案。 上面的代码显示了如何实现INSERT:
String query = "INSERT INTO DQMP.DQ_USER("
+ " USER_ID,"
+ " USER_SHORTNAME,"
+ " USER_NAME,"
+ " GSM1,"
+ " E_MAIL,"
+ " DEPARTMENT_ID,"
+ ") VALUES(?, ?, ?, ?, ?, ?)";
PreparedStatement st = conn.prepareStatement(query);
st.setString(1, "user_id_seq.nextval");
st.setString(2, str1);
st.setString(3, str2);
st.setLong(4, lng);
st.setString(5, str4);
st.setInt(6, 1);
st.executeUpdate();
System.out.println("Insertion successful");
st.close();
这是我的DESC DQ_USER:
TABLE DQ_USER
Name Null? Type
----------------------------------------- -------- ----------------------------
USER_ID NOT NULL NUMBER
USER_SHORTNAME VARCHAR2(30)
USER_NAME VARCHAR2(128)
GSM1 VARCHAR2(30)
E_MAIL VARCHAR2(512)
DEPARTMENT_ID NOT NULL NUMBER
任何帮助,将不胜感激。
这是我的最新更改的代码:
Statement st = conn.createStatement();
String query = "SELECT USER_ID_SEQ.NEXTVAL FROM DUAL;";
ResultSet rs = st.executeQuery(query);
int seq = 0;
while(rs.next()){
seq = rs.getInt("USER_ID_SEQ");
System.out.println(seq);
}
CallableStatement stmt = conn.prepareCall("{call PKDQ_CONTROL_MNG.ADD_USER (?, ?, ?, ?, ?, ?)}");
stmt.setInt(1, seq);
stmt.setString(2, str1);
stmt.setString(3, str2);
stmt.setInt(4, int1);
stmt.setString(5, str4);
stmt.setString(6, "1");
stmt.executeUpdate();
stmt.close();
您的插入语句中有一个逗号结尾。 去掉它。
+ " DEPARTMENT_ID," // <-- Here is the trailing comma
+ ") VALUES(?, ?, ?, ?, ?, ?)";
另外,我猜想USER_ID的类型为NUMBER,并且您尝试在此列中存储字符串“ user_id_seq.nextval”。
如果要插入序列的下一个值,则必须首先发出SQL查询,该查询选择序列的下一个值,提取此查询返回的数字,并使用setInteger
或setLong
在插入语句中setInteger
setLong
。
或者,您可以只使用以下查询:
"INSERT INTO DQMP.DQ_USER(user_id_seq.nextval,
+ " USER_SHORTNAME,"
+ ...
+ ") VALUES(?, ?, ?, ?, ?)"; // only 5 parameters
我不知道是不是这样,但是您的INSERT
语句最终看起来像是INSERT INTO ... DEPARTMENT_ID,) VALUES(...
在DEPARTMENT_ID
之后,
您流浪了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.