java.sql.SQLSyntaxErrorException:ORA-01747

neo*_*orp 0 java eclipse oracle jdbc

通过整个网站搜索但没有任何帮助,所以我决定开辟一个新的主题.这是我的问题:我正在开发一个简单的GUI,它在后面使用JDBC.以下是一些标题: - 我建立了一个成功的数据库连接, - 我可以运行SELECT语句并在我的代码中获取数据.但问题是当我使用INSERT语句时,它给出了下面的错误,其中有一个描述,如"java.sql.SQLSyntaxErrorException:ORA-01747 invalid username.tablename.columnname或tablename.columnname etc ..."我是挖掘网络2天,但我找不到满足我需求的解决方案.上面是我的代码,展示了我如何实现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();           
Run Code Online (Sandbox Code Playgroud)

这是我的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
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

这是我的代码,包含最新的更改:

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();
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 5

您的insert语句中有一个尾随逗号.去掉它.

+ " DEPARTMENT_ID," // <-- Here is the trailing comma
+ ") VALUES(?, ?, ?, ?, ?, ?)";
Run Code Online (Sandbox Code Playgroud)

此外,我猜USER_ID的类型为NUMBER,您尝试在此列中存储字符串"user_id_seq.nextval".

如果要插入序列的下一个值,则必须首先发出一个SQL查询,该查询选择序列下一个值,提取此查询返回的数字,然后使用setInteger或在insert语句中设置它setLong.

或者您可以使用以下查询:

"INSERT INTO DQMP.DQ_USER(user_id_seq.nextval, 
+ " USER_SHORTNAME,"
+ ...
+ ") VALUES(?, ?, ?, ?, ?)"; // only 5 parameters
Run Code Online (Sandbox Code Playgroud)