У меня проблема с созданием таблиц контроллером JDBC в базе данных Oracle.
Когда я создаю таблицу с помощью "Creata Table ...." все в порядке. Создание таблицы, и я вижу эту таблицу от разработчика SQL. У меня есть метод, чтобы проверить, если таблица с таким именем существует - и она работает хорошо.
Поэтому, когда я создаю таблицу (я тоже пытаюсь сделать коммит - не помогает), таблица появляется в SQL-разработчике, но когда я проверяю своим методом, существует ли эта таблица, я получаю «ложь» (не существует), когда я перезапускаю базу данных и запустите снова, мой метод вернет 'true'.
Я думаю, что это проблема с сессией, но я не знаю, как покончить с этим.
enter code here public void prepStatExecuteCreateTable(String name){
String createTable= "Create table "+ name +" (ID NUMBER(*, 0) NOT NULL PRIMARY KEY, CZAS NUMBER(*, 0) NOT NULL, OTWARCIE NUMBER(6, 2) NOT NULL , MAX_KURS NUMBER(6, 2) NOT NULL , MIN_KURS NUMBER(6, 2) NOT NULL , ZAMKNIECIE NUMBER(6, 2) NOT NULL , VOLUMEN NUMBER(*, 0) NOT NULL , FOREIGN KEY(czas) references CZAS(ID))";
PreparedStatement ps=null;
try{
ps = returnConnection().prepareStatement(createTable);
}catch(SQLException e){
System.out.println("Error with preperadStatement(create table): "+ e.getMessage());
}
try{
ps.execute();
returnConnection().commit();
ps.close();
closeConnection();
}
catch(SQLException e){
System.out.println("Error with execute: "+ e.getMessage());
}
}
public boolean ifExistTable(String tablename) throws SQLException{
String sql = "Select TABLE_NAME from user_tables where table_name='"+tablename.toUpperCase()+"' ";
System.out.println(sql);
ResultSet rs =null;
Statement ps = null;
try{
ps = returnConnection().createStatement();
}catch(SQLException e){
System.out.println("Error with preperadSatement(checking): "+ e.getMessage());
}
try{
rs=ps.executeQuery(sql);
while (rs.next()){
System.out.println (rs.getString(1)); // Print col 1
if(rs.getString(1).equals(tablename)){
return true;
}
}
}
catch(SQLException e){
System.out.println("Error with executing checking " +e.getMessage()+ " " + e.getStackTrace());
}
ps.close();
return false;
}
это то, как я использую в методе Main: (condDB - это объект, который имеет методы выше)
enter code here String table_name="BBB";
System.out.println(conDB.ifExistTable(table_name));
conDB.prepStatExecuteCreateTable(table_name);
поэтому, если я запускаю первым, я получаю сообщение "false" (таблица не существует)
и создан (проверьте разработчиком SQL, появится таблица с именем «BBB»)
при втором запуске я получаю сообщение «false» и сообщение об ошибке из второго метода:
Ошибка выполнения: ORA-00955: имя уже используется существующим объектом