如何判断一张表存不存在?

最近项目查询报错了,去查看了问题。发现表不存在,表示定时任务创建的,他会创建未来7天的表,所以以为查询表肯定是存在的。然而并不是,但数据不存在时,表就不会创建。所以导致了查询表不存在的问题。

现在解决思路是在查表时,先判断表是否存在。存在才去查询,jfinal有相关判断表存不存在的方案吗?


评论区

杜福忠

2021-02-05 17:47

应该搜索:SQL 判断 表 是否存在
这样搜索23333

JFinal

2021-02-05 19:41

String sql = "select table_name from information_schema.tables where table_name = ?"
String tableName = Db.queryStr(sql, 这里输入你要查的表名);
if (tableName != null)
存在
else
不存在

一只敲代码的猫

2021-02-05 20:58

我这里的数据库是多个的。有没有一种指定Connection的判断方法?

一只敲代码的猫

2021-02-05 21:03

@JFinal 我这里的Connection是不一样的。用Db好像跑不通?

一只敲代码的猫

2021-02-05 21:04

@杜福忠 搜不到吖

杜福忠

2021-02-06 15:07

@一只敲代码的猫 ”数据库是多个“ 是啥意思? 多个数据源? 多个ActiveRecordPlugin ?还是多个DruidPlugin? https://jfinal.com/doc/5-14

一只敲代码的猫

2021-02-06 17:09

@杜福忠 不同的数据源

杜福忠

2021-02-06 18:27

@一只敲代码的猫 String tableName = Db.use("数据源的名字").queryStr(sql, 这里输入你要查的表名); 文档上有写用法:https://jfinal.com/doc/5-14

zzutligang

2021-02-07 13:59

根据不同的数据源连接的数据库,去系统表里查指定的表是否存在就行了。波总给的demo是mysql怎么写,其他数据库按这个方法走就行了。

一只敲代码的猫

2021-02-19 15:20

@zzutligang
//检测表是否存在
String selectDbName = "select database() as dbName";
Map DbNameMap = JdbcUtil.queryForOneMap(logConn,selectDbName,"testSql");
Object dbName = DbNameMap.get("dbName");
String sql = "select table_name from Information_schema.tables where table_Name = 'logs_" + index + "'" + "and TABLE_SCHEMA='"+ dbName.toString() +"'";
Map tableName = JdbcUtil.queryForOneMap(logConn,sql,"testSql");
if (tableName == null){
iterator.remove();
}

已经解决了,谢谢