2015-09-24 4 views
1

Я использую gradle для запуска моей программы. Код примера ссылается на https://github.com/onefoursix/Cloudera-Impala-JDBC-Example.Не удается подключиться к улью через jdbc

И я могу запустить пример из репо без сбоев.

// Apply the java plugin to add support for Java 
apply plugin: 'java' 
apply plugin: 'application' 

mainClassName = "com.my.impala.fetcher.Fetcher" 
// In this section you declare where to find the dependencies of your project 
repositories { 
    // Use 'jcenter' for resolving your dependencies. 
    // You can declare any Maven/Ivy/file repository here. 
    mavenCentral() 
    maven { 
     url "https://repository.cloudera.com/artifactory/cloudera-repos/" 
    } 
} 

run { 
    if (project.hasProperty("params")) { 
     args params 
     // args Eval.me(params) 
    } 
} 

test { 
     testLogging { 
      events "passed", "skipped", "failed", "standardOut", "standardError" 
    } 
} 


// In this section you declare the dependencies for your production and test code 
dependencies { 
    // The production code uses the SLF4J logging API at compile time 
    compile 'org.slf4j:slf4j-api:1.7.7' 
    compile 'org.apache.hadoop:hadoop-client:2.6.0-cdh5.4.4.1' 
    compile 'org.json:json:20140107' 
    compile 'org.apache.hive:hive-jdbc:1.1.0' 
} 

Образец кода приведен ниже.

Connection con = null; 
ResultSet rs = null; 
try { 
    Class.forName(JDBC_DRIVER_NAME); 
    con = DriverManager.getConnection(CONNECTION_HOST); 
    Statement stmt = con.createStatement(); 
    rs = stmt.executeQuery(sqlStatement); 
} catch (SQLException e) { 
    e.printStackTrace(); 
    System.exit(-1); 
} catch (Exception e) { 
    e.printStackTrace(); 
    System.exit(-1); 
} finally { 
    try { 
     con.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.exit(-1); 
    } 
} 

rs.next(); 

rs.next Где выбросит за исключением следующего

org.apache.thrift.transport.TTransportException: Cannot write to null outputStream 
    at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:142) 
    at org.apache.thrift.protocol.TBinaryProtocol.writeI32(TBinaryProtocol.java:178) 
    at org.apache.thrift.protocol.TBinaryProtocol.writeMessageBegin(TBinaryProtocol.java:106) 
    at org.apache.thrift.TServiceClient.sendBase(TServiceClient.java:62) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.send_FetchResults(TCLIService.java:495) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.FetchResults(TCLIService.java:487) 
    at org.apache.hive.jdbc.HiveQueryResultSet.next(HiveQueryResultSet.java:360) 
    at com.my.impala.fetcher.Fetcher.main(Fetcher.java:54) 
Exception in thread "main" java.sql.SQLException: Error retrieving next row 
    at org.apache.hive.jdbc.HiveQueryResultSet.next(HiveQueryResultSet.java:388) 
    at com.my.impala.fetcher.Fetcher.main(Fetcher.java:54) 
Caused by: org.apache.thrift.transport.TTransportException: Cannot write to null outputStream 
    at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:142) 
    at org.apache.thrift.protocol.TBinaryProtocol.writeI32(TBinaryProtocol.java:178) 
    at org.apache.thrift.protocol.TBinaryProtocol.writeMessageBegin(TBinaryProtocol.java:106) 
    at org.apache.thrift.TServiceClient.sendBase(TServiceClient.java:62) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.send_FetchResults(TCLIService.java:495) 
    at org.apache.hive.service.cli.thrift.TCLIService$Client.FetchResults(TCLIService.java:487) 
    at org.apache.hive.jdbc.HiveQueryResultSet.next(HiveQueryResultSet.java:360) 
    ... 1 more 

Я не уверен, какую часть я пропускаю.

спасибо.

ответ

4

Вы уже закрыли соединение, конечно, вы не можете прочитать результаты. rs.next() должен быть после executeQuery() линии, в конце блока попробовать, как это:

rs = stmt.executeQuery(sqlStatement); 
while (rs.next()) { 
    // handle the record 
} 

ResultSet представляет собой базу данных курсор, он не содержит весь набор данных, вы можете получить доступ к данным в DB через него.

+0

Это очень полезно. –