驅動: com.mysql.cj.jdbc.Driver
正確查詢方法:
public class JdbcConnection {
public static Connection getConn() {
String driver = "com.mysql.cj.jdbc.Driver";
// 1.url
String url = "jdbc:mysql://localhost:3306/ump?useSSL=false&nullCatalogMeansCurrent=true";
String username = "root";
String password = "123456";
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) throws Exception{
Connection conn = getConn();
DatabaseMetaData metaData = conn.getMetaData();
// 2.resultSet
ResultSet resultSet = metaData.getTables(null, null, "table_name", new String[]{"TABLE"});
System.out.println("是否存在:" + resultSet.next());
}
}
錯誤查詢方法:
當:2.resultSet
metaData.getTables(null, null, "table_name", new String[]{"TABLE"});
第一個參數未設置指定數據庫名稱,
同時1.url沒有設置nullCatalogMeansCurrent=true參數
jdbc就會在jdbc:mysql://101.132.44.225:3306/下掃描所以數據庫是否存在table_name表
-----------------------------------------------------------------------------------------------
發現問題:
springboot2.1.x 集成elastic-job不會自動創建JOB_EXECUTION_LOG,JOB_STATUS_TRACE_LOG表。
分析:
springboot2.1.x 集成mysql-connector-java爲8.0.x版本,
棄用com.mysql.jdbc.Driver,將會加載com.mysql.cj.jdbc.Driver驅動
elastic-job源碼-->JobEventRdbStorage類中createJobExecutionTableAndIndexIfNeeded方法:
private void createJobExecutionTableAndIndexIfNeeded(final Connection conn)
throws SQLException {
DatabaseMetaData dbMetaData = conn.getMetaData();
// 說明:第一個參數並沒有指定數據庫名,根據上面的必須在連接jdbcurl處添加
// nullCatalogMeansCurrent=true參數
try (ResultSet resultSet =
dbMetaData.getTables(null, null, TABLE_JOB_EXECUTION_LOG, new String[]{"TABLE"})) {
// 查詢表是否存在
if (!resultSet.next()) {
createJobExecutionTable(conn);
}
}
}
結論:
elastic-job會查詢表JOB_EXECUTION_LOG,JOB_STATUS_TRACE_LOG是否存在,如果在其他庫中存在,
則不會創建,所以當其他庫中存在時,url必須加上nullCatalogMeansCurrent=true參數,
公司項目正是因爲沒有設置nullCatalogMeansCurrent參數,其他庫存在該表,才導致不可以自動創建。
幫助博客:
Mybatis Generator使用com.mysql.cj.jdbc.Driver遇到的問題 :
https://www.cnblogs.com/boboooo/p/9100991.html
JDBC如何判斷數據庫的表是否存在 :
https://blog.csdn.net/naruto0025/article/details/74201730