我在Oracle數據庫上通過JDBC控制器創建表格時遇到問題。 當我通過「creata table ....」創建表時沒問題。表創建,我看到SQL Developer的表。我有方法來檢查是否存在具有該名稱的表 - 它運作良好。 所以,當我創建表(我嘗試做承諾,太 - 不幫忙),表出現在SQL開發人員,但是當我用我的方法檢查,如果該表存在,我得到「假」(不存在),當我重新啓動數據庫並再次運行,我的方法返回'true'。 我認爲會議有問題,但我現在不知道如何解決這個問題。通過JDBC在Oracle數據庫中創建表格
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;
}
這是我的主要方法是如何使用:(condDB是具有上述方法的對象)
enter code here String table_name="BBB";
System.out.println(conDB.ifExistTable(table_name));
conDB.prepStatExecuteCreateTable(table_name);
,所以如果我跑第一,我得到消息,「假」(表不存在) ,並創建(通過SQL開發人員,表名「BBB」出現) 檢查,當我運行其次,我得到消息,「假」和錯誤消息從第二個方法: 錯誤與執行:ORA-00955:名稱已由現有物體使用
聽起來像是您的權利問題。您的過程無法看到表格,因爲它沒有看到它的權利。 – 2012-02-28 16:43:50
我們可以看到創建表的代碼和檢查它是否存在的代碼? – GriffeyDog 2012-02-28 16:53:34
@Mthethew Farwell:我不這麼認爲。當他重新啓動數據庫,程序看到表... – 2012-02-28 16:54:42