Searched through the entire site but nothing helped at all so I decided to open up a new topic. Here's my problem: I'm developing a simple GUI in java which uses JDBC behind the back. Here are some 开发者_StackOverflowheadlines: - I established a successful database connection, - I can run SELECT statements and fetch data within my code. But the problem is that when I use an INSERT statement, It gives the error below which has a description like "java.sql.SQLSyntaxErrorException: ORA-01747 invalid username.tablename.columnname or tablename.columnname etc..." I'm digging the web for 2 days but I couldn't come up with a solution to my need. Above is my code showing how I implemented the 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();
Here's my 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
Any help would be appreciated.
Here's my code with latest changes:
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();
You have a trailing comma in your insert statement. Remove it.
+ " DEPARTMENT_ID," // <-- Here is the trailing comma
+ ") VALUES(?, ?, ?, ?, ?, ?)";
Also, I guess that the USER_ID is of type NUMBER, and you try to store the String "user_id_seq.nextval" in this column.
If you want to insert the next value of a sequence, you must first issue a SQL query which selects the sequence next value, extract the number returned by this query, ans set it in your insert statement using setInteger or setLong.
Or you can just use the following query :
"INSERT INTO DQMP.DQ_USER(user_id_seq.nextval,
+ " USER_SHORTNAME,"
+ ...
+ ") VALUES(?, ?, ?, ?, ?)"; // only 5 parameters
I don't know if that's it, but your INSERT statement will end up looking like INSERT INTO ... DEPARTMENT_ID,) VALUES(....
You've got a stray , after DEPARTMENT_ID.
加载中,请稍侯......
精彩评论