You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Istvan Szegedi (Commented) (JIRA)" <ji...@apache.org> on 2011/12/27 19:50:30 UTC

[jira] [Commented] (HIVE-2675) JDBC SQL execution exception does not contain cause

    [ https://issues.apache.org/jira/browse/HIVE-2675?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13176264#comment-13176264 ] 

Istvan Szegedi commented on HIVE-2675:
--------------------------------------

Could you shed some lights what release exactly you are talking about? In hive 0.8.0 the HiveStatement.java class seems to have executeQuery method, not executeSQL. (./hive/jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveStatement.java)

Anyway, the toString() method of the Exception - which is actually inherited from Throwable class - returns the name of the object and the message, as the result of the getMessage() method, concatenated by a colon. Thus when the  SQLException is rethrown from the second catch block, the SQLException will have the original message and also the SQLState string value- "08S01".

See for instance, a simple code to demonstrate it:

import java.sql.SQLException;
import java.io.FileReader;

public class Exc {
    public static void main(String[] args) {
        try {
           ThrowException();
        }
       catch (SQLException ex) {
          System.out.println("String: " + ex.toString());
          System.out.println("State: " + ex.getSQLState());
          System.out.println("Message: " + ex.getMessage());
          System.exit(1);
       }
    }

    public static void ThrowException() throws SQLException {
       try {
          FileReader fr = new FileReader("test.txt");    
       }
       catch (Exception ex) {
          System.out.println("FileReader exception caught: " + ex.toString());
          throw new SQLException(ex.toString(), "08S01");
       }
    }
}


The output of this code is as follows (the original FileNotFoundException is returned by the rethrown exception and the SQLState can be retrieved, too):

FileReader exception caught: java.io.FileNotFoundException: test.txt (No such file or directory)
String: java.sql.SQLException: java.io.FileNotFoundException: test.txt (No such file or directory)
State: 08S01
Message: java.io.FileNotFoundException: test.txt (No such file or directory)



                
> JDBC SQL execution exception does not contain cause
> ---------------------------------------------------
>
>                 Key: HIVE-2675
>                 URL: https://issues.apache.org/jira/browse/HIVE-2675
>             Project: Hive
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 0.8.0
>         Environment: Any
>            Reporter: Greg Cottman
>
> If SQL execution throws an exception in the HiveStatement.executeSQL() method then it's message is rethrown as a SQLException with a SQLState of "08S01":
>   try {
>     resultSet = null;
>     client.execute(sql);
>   } catch (HiveServerException e) {
>     throw new SQLException(e.getMessage(), e.getSQLState(), e.getErrorCode());
>   } catch (Exception ex) {
>     throw new SQLException(ex.toString(), "08S01");
>   }
> In the case of failed DDL, the exception "ex" has a cause - such as a java.io.IOException - that contains the actual error text.  The description of the actual problem is lost by failing to include "ex" as the cause in the new SQLException.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira