当前位置:  开发笔记 > 数据库 > 正文

有没有办法在不执行它的情况下获取未知数据库查询的类型/名称?

如何解决《有没有办法在不执行它的情况下获取未知数据库查询的类型/名称?》经验,为你挑选了1个好方法。

我有一个Web应用程序,用户可以在其中输入任意sql查询以供以后批处理.我们想验证查询的语法而不实际执行它.一些查询需要很长时间,这就是我们不想执行它们的原因.我正在使用Oracle的dbms_sql.parse来执行此操作.

但是,我现在需要知道结果集列的数量和类型.有没有办法在没有实际执行查询的情况下执行此操作?也就是说,让Oracle解析查询并告诉我实际执行查询时返回的结果数据类型/名称是什么?我使用的是Oracle 10g,它是一个Java 1.5/Servlet 2.4应用程序.

编辑:输入查询的用户已经是数据库中的用户.他们使用数据库凭据对我的应用进行身份验证,并使用这些凭据执行查询.因此,他们不能通过连接sqlplus来输入任何无法运行的查询.



1> Bill Karwin..:

您应该能够准备SQL查询以验证语法并获取结果集元数据.准备查询不应该执行它.

import java.sql.*;
. . .
Connection conn;
. . .
PreparedStatement ps = conn.prepareStatement("SELECT * FROM foo");
ResultSetMetadata rsmd = ps.getMetaData();
int numberOfColumns = rsmd.getColumnCount();

然后,您可以获取有关结果集的每列的元数据.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有