Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JdbcTemplate和T-SQL检查SQL数据库中是否存在表_Java_Sql_Tsql_Jdbctemplate - Fatal编程技术网

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