我正在使用jdbc从数据库中检索数据。在我的代码中,我使用3-4个表来获取数据。但有时如果数据库中没有表,我的代码会给出异常。如何处理这种情况。即使一个表不存在,我希望我的代码继续为其他表工作。请帮忙。
我写了这样的代码
sql="select * from table"
now Result set and all.
如果数据库中没有表,则表示没有这样的表的异常。我想处理它。在这段代码中,我不能提取已经提前存在的表格。如果有桌子,我想在这里查看。
请不要将其标记为重复的问题。您共享的链接没有给我所需的答案,因为在该问题中他们正在数据库中执行查询而不是通过JDBC代码
答案 0 :(得分:0)
这是检查表是否存在并删除它的方法:
IF EXISTS (
SELECT 1
FROM sysobjects
WHERE name = 'a_table'
AND type = 'U'
)
DROP TABLE a_table
GO
这是检查表是否存在并创建它的方法。
IF NOT EXISTS (
SELECT 1
FROM sysobjects
WHERE name = 'a_table'
AND type = 'U'
)
EXECUTE("CREATE TABLE a_table (
col1 int not null,
col2 int null
)")
GO
(它们是不同的,因为在表格中创建一个临时表,所以如果你尝试创建一个新的,你会得到一个它已经存在的异常)
答案 1 :(得分:0)
在运行不存在表中存在风险的查询之前,运行以下sql查询并检查结果数是否> = 1.如果是> = 1则可以安全地执行常规查询。否则,做一些事情来处理这种情况。
month+1
我不是Sybase的专家,但看看这个,
cal.set
答案 2 :(得分:0)
对于Sybase ASE,最简单/最快捷的方法是查询数据库中您期望(用户定义的)表驻留的sysobjects
表:
select 1 from sysobjects where name = 'table-name' and type = 'U'
您如何使用(上述)查询取决于您......
if [not] exists(...)
构造case
声明中使用如果你知道在数据库中没有任何其他对象类型(例如,proc,trigger,view,UDF),那么你也可以使用object_id()
函数,例如:
select object_id('table-name')
虽然object_id()
将从sysobjects
表中获取对象的id,但它不会检查对象type
,例如,如果存在,则(上面)查询将返回一个数字存储过程名为'table-name'。
与select/sysobjects
查询一样,您在代码中如何使用函数调用取决于您(例如,结果集,填充@variable,if [not] exists()
构造,case
语句)
所以,解决评论中提供的其他细节......
假设您在运行所需查询之前提交了需要确定表存在的单个批处理:
-- if table exists, run query(s); obviously if table does not exist then query(s) is not run
if exists(select 1 from sysobjects where name = 'table-name' and type = 'U')
begin
execute("select * from table-name")
end
execute()
需要保持优化器不会生成表不存在的错误,即除非实际调用execute()
,否则不会解析/编译查询如果您的应用程序可以编写为使用多个批次,则以下内容也应该有效:
# application specific code; I don't work with java but the gist of the operation would be ...
run-query-in-db("select 1 from sysobjects where name = 'table-name' and type = 'U'")
if-query-returns-a-row
then
run-query-in-db("select * from table-name")
fi