java.sql.SQLSyntaxErrorException: ORA-01747 - PullRequest
       1

java.sql.SQLSyntaxErrorException: ORA-01747

0 голосов
/ 10 октября 2011

Просматривал весь сайт, но ничего не помогало, поэтому я решил открыть новую тему.Вот моя проблема: я разрабатываю простой графический интерфейс в Java, который использует JDBC за спиной.Вот несколько заголовков: - Я установил успешное соединение с базой данных, - Я могу запускать операторы SELECT и извлекать данные из своего кода.Но проблема в том, что когда я использую оператор INSERT, он выдает приведенную ниже ошибку, которая имеет описание типа «java.sql.SQLSyntaxErrorException: ORA-01747 неверное имя пользователя.копался в интернете в течение 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();           

Вот мой 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();

Ответы [ 2 ]

5 голосов
/ 10 октября 2011

В вашем операторе вставки есть запятая. Удалить его.

+ " DEPARTMENT_ID," // <-- Here is the trailing comma
+ ") VALUES(?, ?, ?, ?, ?, ?)";

Кроме того, я предполагаю, что USER_ID имеет тип NUMBER, и вы пытаетесь сохранить строку "user_id_seq.nextval" в этом столбце.

Если вы хотите вставить следующее значение последовательности, вы должны сначала выполнить SQL-запрос, который выбирает следующее значение последовательности, извлечь число, возвращаемое этим запросом, и установить его в операторе вставки, используя setInteger или setLong.

Или вы можете просто использовать следующий запрос:

"INSERT INTO DQMP.DQ_USER(user_id_seq.nextval, 
+ " USER_SHORTNAME,"
+ ...
+ ") VALUES(?, ?, ?, ?, ?)"; // only 5 parameters
2 голосов
/ 10 октября 2011

Не знаю, так ли это, но ваше утверждение INSERT будет выглядеть как INSERT INTO ... DEPARTMENT_ID,) VALUES(....

У вас есть шальные , после DEPARTMENT_ID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...