Java 使用JdbcTemplate和T-SQL检查SQL数据库中是否存在表
我正在努力检查数据库中是否存在表。到目前为止,我所做的工作如下:Java 使用JdbcTemplate和T-SQL检查SQL数据库中是否存在表,java,sql,tsql,jdbctemplate,Java,Sql,Tsql,Jdbctemplate,我正在努力检查数据库中是否存在表。到目前为止,我所做的工作如下: public boolean isTableExist(String tableName) { JdbcTemplate jdbc = getJdbcTemplate(); String query = "IF (OBJECT_ID(?) IS NOT NULL ) " + "BEGIN " + " PRINT 1 " + "
public boolean isTableExist(String tableName) {
JdbcTemplate jdbc = getJdbcTemplate();
String query =
"IF (OBJECT_ID(?) IS NOT NULL ) "
+ "BEGIN "
+ " PRINT 1 "
+ " RETURN "
+ "END "
+ "ELSE "
+ "BEGIN "
+ " PRINT 0 "
+ " RETURN "
+ "END";
Integer result = jdbc.queryForObject(query, Integer.class, tableName);
return result == 1 ? true : false;
}
输出(错误):
PreparedStatementCallback;SQL的未分类SQLException[如果
(对象ID(?)不为空)开始打印1返回结束其他开始打印0返回结束];SQL状态[null];错误代码[0];声明 未返回结果集。;嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:语句没有 返回一个结果集
您也可以像这样运行查询:
select count(*)
from information_schema.tables
where table_name = 'yourtablename'
-- optionally this too
-- and table_schema = 'dbo';
若得到零,则表不存在
根据答案,在存储查询后,似乎必须使用类似的方法
jdbc.queryForObject(
"select count(*) from information_schema.tables where table_name = ?"
, new Object[] { tableName }
, Integer.class
);
更新:
在这篇文章的帮助下,问题已经解决,基于上述信息的最终解决方案是:
String query =
"select count(*) "
+ "from information_schema.tables "
+ "where table_name = ? and table_schema = 'dbo'";
Integer result = jdbc.queryForObject(query, Integer.class, tableName);
用解决方案编辑答案做得很好。非常感谢。谢谢你,先生,谢谢你的帮助@zedfoxus