2013-06-19 4 views
-2

Я пытаюсь подключиться к базе данных и обновить таблицу в ней с помощью подготовленных операторов в java-программе - база данных называется «база данных», а в ней есть другая папка «Виды», в которой таблица («ТАБЛИЦА»), которую я пытаюсь обновить. Вот мой код:подготовленные операторы SQL в java

public void updateTable(Map<String, String> mp) throws SQLException { 

    String URL = "jdbc:oracle:thin:@localhost:1500:orcl"; 
    String USER = "user"; 
    String PASS = "password"; 
    Connection con = DriverManager.getConnection(URL, USER, PASS); 

    PreparedStatement updateTableName = null; 


    String updateString = 
     "update database.Views.TABLE " + 
     "set TABLENAME = ? " + 
     "where TABLENAME = ?"; 

    try { 
     con.setAutoCommit(false); 
     updateTableName = con.prepareStatement(updateString); 

     for (Map.Entry<String, String> e : mp.entrySet()) 
     { 
      updateTableName.setString(1, e.getValue()); 
      updateTableName.setString(2, e.getKey()); 
      updateTableName.executeUpdate(); 
      con.commit(); 

     } 

    } catch (SQLException e) { 

     if (con != null) 
     { 
      try { 
       System.err.print("Transaction is being rolled back"); 
       con.rollback(); 
      } catch (SQLException excep) { 

      } 
     } 
    } finally { 
     if (updateTableName != null) 
     { 
      updateTableName.close(); 
     } 
     con.setAutoCommit(true); 
} 
    con.close(); 
} 

Всякий раз, когда я запускаю код, он отображает «транзакция откатывается». Любая идея, какие ошибки я имею в заявлении try? Заранее спасибо!

EDIT: когда я изменяю его для печати исключения, он считывает ORA-00971: отсутствует ключевое слово SET.

+4

Вместо того, чтобы просто поймать, печать/вход исключение может GIV E некоторую подсказку – kosa

+3

Di Вы читали исключение? – SLaks

ответ

0

Хорошо, я понял это, @Spiff я изменить его на простой запрос с просто обновить table1, но я вынул:

String updateString = 
    "update database.Views.TABLE " + 
    "set TABLENAME = ? " + 
    "where TABLENAME = ?"; 

и соединил его в одну линию с

updateTableName = con.prepareStatement(updateString) 

сделать:

updateTableName = con.prepareStatement(update TABLE1 set TABLENAME = ? where TABLENAME = ?); 
+0

Отлично, рад, что это работает! – Spiff

6
"update database.Views.TABLE" + 
    "set TABLENAME = ?" + 
    "where TABLENAME = ?"; 

Значение этой строки является

update database.Views.TABLEset TABLENAME = ?where TABLENAME = ? 

Это не является допустимым SQL.

+0

Я перепутал интервал да, но является ли "database.Views.TABLE" недействительным? – user22

+0

@ user22 вы попробовали установить интервал? – djechlin

+0

@djechlin Да, я исправил это – user22

0

Вы должны попытаться выполнить регистрацию SQLException, которую вы улавливаете в первом блоке catch, что даст вам четкое указание на то, что проблема.

В любом случае, TABLE является ключевым словом SQL-зарезервировано, и вам не следует называть таблицу подобным образом - по крайней мере, попробуйте переименовать ее в TABLE1 из-за отсутствия лучшего имени.

+0

В моей программе это другое имя. Я просто изменил его здесь, так что это не проблема. Но когда я зарегистрировал его, он говорит, что это «отсутствует ключевое слово SET» – user22

+0

Как выглядит запрос сейчас? Похоже, что проблема с интервалом не решена. – Spiff

+0

теперь отредактировано с интервалом – user22

Смежные вопросы