如果我们输入错误的查询,请sql developer
从显着中删除
它会向我们显示确切的行号和列
Error starting at line : 1 in command -
delete from notable
Error at Command Line : 1 Column : 13
Error report -
SQL Error: ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
但如果我在java代码中这样做,我只得到
java.sql.SQLException:ORA-00942:表或视图不存在
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) ~[ojdbc14-10.2.0.3.0.jar:Oracle JDBC Driver version - "10.2.0.3.0"]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) ~[ojdbc14-10.2.0.3.0.jar:Oracle JDBC Driver version - "10.2.0.3.0"]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) ~[ojdbc14-10.2.0.3.0.jar:Oracle JDBC Driver version - "10.2.0.3.0"]
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745) ~[ojdbc14-10.2.0.3.0.jar:Oracle JDBC Driver version - "10.2.0.3.0"]
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207) ~[ojdbc14-10.2.0.3.0.jar:Oracle JDBC Driver version - "10.2.0.3.0"]
如何获取有关行和列的信息?可以通过JDBC吗?
答案 0 :(得分:1)
我不知道任何第三方库,这将帮助您实现这一目标。但是,据我所知SQLException
,您无法。
顺便说一句,你正在犯错,因为你还没有创建你想要访问的表/视图。
答案 1 :(得分:1)
SQLException.getCause()
为您提供发生异常的角色的位置:
select * from blahblahblah
Error : 942, Position : 14, Sql = select * from blahblahblah, OriginalSql = select * from blahblahblah, Error Msg = ORA-00942: table or view does not exist
因此,您可以解析原因并获取字符索引,然后计算行号和列号。
这适用于JDBC版本12.2.0.1和Oracle 12c,不确定其他版本。
答案 2 :(得分:0)
从命令行,我们可以一次执行多个SQL查询。因此,在执行时如果我们收到任何错误,命令行处理器会给出“Line”和“Column”以帮助用户了解有故障的行。无论如何,它是由数据库提供的实用程序。
但是,在JDBC中,您可以执行单个查询或执行批处理语句。在这两种情况下,您都不会获得任何行号和列号,因为它在任何意义上都没用。虽然您可以根据JDBC驱动程序获取错误和代码的原因。
答案 3 :(得分:0)
我通过使用偏移量(#个字符)确定错误发生在哪一行,在Python中解决了此问题。这可以通过循环遍历原始sql语句并计数行数,同时还可以跟踪到目前为止看到的字符数来完成。