我正在研究一個AAA(認證等..)應用程序在java中,我想知道是否有一種方法來檢查錯誤代碼或任何如果我想要在其中插入數據的表存在。如果它丟失或出現任何類型的問題,程序會自動創建表。
P.S:我查了其他相關的問題,答案並不符合我想要的java程序的檢查。如果它不存在,在oracle數據庫中自動創建一個表
2
A
回答
2
我所知道的最有效的方式,是這樣的:
public static boolean tableExists(String tableName, Connection con) {
try (Statement stmt = con.createStatement();
ResultSet trs = stmt.executeQuery(
String.format(
"SELECT count(*) from (SELECT 1 FROM %s WHERE ROWNUM = 1) T",
tableName
)
)
) {
return trs.next();
}
catch (SQLException e) {
if (LOG.isDebugEnabled()) {
LOG.debug("SQLException occurs while checking the table " + tableName, e);
}
return false;
}
}
注:的標準方法是用connection.getMetaData().getTables(String catalog, String schemaPattern,String tableNamePattern, String types[])
與數據庫中的元數據換句話說,但你需要指定模式名,你需要額外的像oracle這樣的數據庫特權,使用上面的方法,您不必指定模式名稱,因爲它將使用默認的名稱,而且您不需要任何其他特權。即使它可以被認爲是一個有爭議的方法,相信我它工作得很好,事實上我們有數百個客戶在生產。
NB 2:如果你是一個有點好奇,我們甚至推廣這一做法,以使其在最常用的數據庫工作,只有查詢改變一點點,你可以看到here。
3
我會用ALL_TABLES(字典)爲:
--your procedure
--some logic
--check the table in the dictionary
SELECT count(*)
INTO v_count
FROM all_tables s
WHERE s.table_name = p_table_name;
IF v_count = 0 THEN
....
END IF;
--the rest of logic
相關問題
- 1. Oracle創建表(如果它不存在)
- 2. 創建一個表,如果它不存在,並創建一個序列,如果它不存在於Oracle
- 3. SQLAlchemy中,創建一個SQLite數據庫,如果它不存在
- 4. 如果不存在,創建數據庫
- 5. 創建一個表,如果在Oracle(使用Java)不存在
- 6. 如何防止EF4.1創建數據庫,如果它不存在?
- 7. Android編程新手 - 創建數據庫如果它不存在
- 8. 配置grails創建數據庫,如果它不存在。
- 9. 創建數據庫,如果它不存在
- 10. 使Pythonic成爲可能:創建一個sqlite3數據庫,如果它不存在?
- 11. 如果它不存在,mongoose.connect默認創建一個Mongo數據庫嗎?
- 12. 創建一個數據庫表,如果它不存在於Java產品代碼中並在JUnit中確認
- 13. 檢查一個表是否存在,如果它不存在,創建它... iOS/SQLite
- 14. 創建一個表,它不存在?
- 15. 在數據庫中創建一個表
- 16. 新表創建,如果不存在數據庫
- 17. 檢查數據庫是否存在(MySQL),如果不是在PHP中創建它
- 18. Oracle數據庫表創建
- 19. 在SQLite數據庫中創建Oracle數據庫表的副本
- 20. 創建一個存儲過程,如果它不存在
- 21. 在oracle中爲手動創建的用戶創建數據庫
- 22. 如果表存在drop table然後創建它,如果它不存在,只創建它
- 23. 如何創建一個文件夾,如果它不存在?
- 24. Oracle數據庫11g:oe.orders表不存在
- 25. 在Oracle中創建一個觸發器,它從另一個表
- 26. 是否可以構造一個SQL查詢來自動創建一個表,如果它尚不存在?
- 27. Ansible - 創建svn存儲庫(如果它們不存在)
- 28. 創建桶如果它不存在
- 29. 創建索引,如果它不存在
- 30. 如何創建數據庫,如果不存在於C#Winforms
遺憾的語法錯誤或任何可能的錯誤。 –
我不確定你會想要在銀行應用程序中的那種事情。這些系統往往被鎖定很多(並有一個很好的理由)。 – Thilo
@Moudiz它更多的研究知道什麼方式更好,或者有什麼辦法在第一個地方和它的Java方面 –