Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 检查表是否存在_Java_Sybase_Sap Ase - Fatal编程技术网

Java 检查表是否存在

Java 检查表是否存在,java,sybase,sap-ase,Java,Sybase,Sap Ase,我正在使用jdbc从数据库中检索数据。在我的代码中,我使用3-4个表来获取数据。但有时,若数据库中不存在表,我的代码会给出异常。如何处理这种情况。我希望我的代码继续为其他表工作,即使其中一个表不存在。请帮忙 我写过这样的代码 sql="select * from table" now Result set and all. 若数据库中不存在该表,那个么会给出一个异常,即并没有这样的表。我想处理它。在这段代码中,我无法获取预先存在的表。我想在这里检查一下桌子是否在那里 请不要将其标记为重复问题。

我正在使用jdbc从数据库中检索数据。在我的代码中,我使用3-4个表来获取数据。但有时,若数据库中不存在表,我的代码会给出异常。如何处理这种情况。我希望我的代码继续为其他表工作,即使其中一个表不存在。请帮忙

我写过这样的代码

sql="select * from table"
now Result set and all.
若数据库中不存在该表,那个么会给出一个异常,即并没有这样的表。我想处理它。在这段代码中,我无法获取预先存在的表。我想在这里检查一下桌子是否在那里


请不要将其标记为重复问题。您共享的链接没有为我提供所需的答案,因为在该问题中,他们正在数据库中执行查询,而不是通过JDBC代码执行查询。这是检查表是否存在并删除它的方法:

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

(它们是不同的,因为在表drop中创建了一个临时表,所以如果您尝试创建一个新表,您将得到一个异常,它已经存在)

在运行表不存在中存在一些风险的查询之前,请运行以下sql查询,并检查结果数是否大于等于1。如果大于等于1,则可以安全地执行正常查询。否则,请采取措施处理这种情况

SELECT count(*)
FROM information_schema.TABLES
WHERE (TABLE_SCHEMA = 'your_db_name') AND (TABLE_NAME = 'name_of_table')
我不是Sybase的专家但看看这个

exec sp_tables '%', '%', 'master', "'TABLE'" 

对于Sybase ASE,最简单/最快速的方法是查询数据库中的
sysobjects
表,您希望(用户定义的)表驻留在该数据库中:

select 1 from sysobjects where name = 'table-name' and type = 'U'
  • 如果返回记录=>表存在
  • 如果未返回任何记录=>表不存在
如何使用(以上)查询取决于您

  • 向客户端返回0/1行结果集
  • 给@变量赋值
  • 如果[不]存在(…)构造,则放入
  • 案例中使用
    语句

如果您知道数据库中不会有任何其他对象类型(例如,proc、trigger、view、UDF)具有该名称,那么您也可以使用
object\u id()
函数,例如:

select object_id('table-name')
  • 如果您收到一个数字=>该对象存在
  • 如果接收到NULL=>则该对象不存在
虽然
object\u id()
将从
sysobjects
表中获取对象的id,但它不会检查对象
类型
,例如,如果存在名为“table name”的存储过程,(上述)查询将返回一个数字

select/sysobjects
查询一样,如何在代码中使用函数调用取决于您(例如,结果集、填充@variable、
if[not]exists()
construct、
case
语句)


因此,针对评论中提供的其他细节

假设您提交的是需要在运行所需查询之前确定表是否存在的单个批处理:

  • 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

张贴相关代码和例外情况表格怎么可能不存在?作为一名程序员,当你构造一个查询或ORM处理程序时,你应该知道数据库中存在哪些表,不是吗?编辑的mt问题请仔细观察捕获异常并按你的意愿处理它。但是,这些例外情况是这样的。@请不要将其标记为重复。这与itI am使用sybase INFORMATION_SCHEMA有些不同。表在itI am更新答案时不起作用!嘿,谢谢你。但为了让你知道我不能用这个。我必须在运行时检查表是否存在。我的代码是这样的,它将在运行时生成一个表。它将传递给sql语句的表名,如我的问题中所述。因此,我认为这不是解决这个问题的正确方法;Kostas的示例对条件
创建表
显示了基本相同的内容;我建议你用一个例子来更新你的问题,说明你到底想做什么a)如果表存在,b)如果表不存在,我的代码将从数据库中获取数据,但如果表不存在,我的代码不应该停止处理,它应该继续处理不依赖于此表的剩余代码existI在我的回答中添加了您的最新评论/示例;我仍然建议您更新您的问题,以便更具体地说明当表不存在(不存在)时您想要做什么;如目前所写。。。“我想处理它”。。。没有告诉我们你想如何处理它;还要记住,与阅读所有评论,然后尝试拼凑出实际需要的内容(即,整合问题中的所有评论/细节)相比,提出此问题的人在时间上有更好的事情要做
# 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