【发布时间】:2014-08-12 08:52:33
【问题描述】:
我正在尝试执行一个 Java 文件,但是当我执行此操作时,我在程序的这一部分收到错误 NullPointerException。
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.SQLException;
public class HiveClient {
// JDBC driver required for Hive connections
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
private static Connection con;
private static Connection getConnection(String ip, String port, String user, String password) {
try {
// dynamically load the Hive JDBC driver
Class.forName(driverName);
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
return null;
} // try catch
try {
// return a connection based on the Hive JDBC driver
return DriverManager.getConnection("jdbc:hive://" + ip + ":" + port + "/default?user=" + user + "&password=" + password);
} catch (SQLException e) {
System.out.println(e.getMessage());
return null;
} // try catch
} // getConnection
public static void main(String[] args) {
try {
// from here on, everything is SQL!
con = getConnection("130.206.80.46", "10000", "myuser", "mypasswd");
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery("select column1,column2,otherColumns " + "from mytable where column1='whatever' and columns2 like '%whatever%'");
// iterate on the result
while (res.next()) {
String column1 = res.getString(1);
Integer column2 = res.getInt(2);
// whatever you want to do with this row, here
} // while
// close everything
res.close();
stmt.close();
con.close();
} catch (SQLException ex) {
System.exit(0);
} // try catch
}
// doQuery
} // HiveClient
这是消息:
Exception in thread "main" java.lang.NullPointerException
at HiveClient.main(HiveClient.java:34)
Java Result: 1
异常所在的行:
Statement stmt = con.createStatement();
我检查了java.sql.Connection 包,并且方法摘要中允许使用createStatement()。
【问题讨论】:
-
发布您的堆栈跟踪并添加其他相关代码
-
getConnection 方法是什么?处理 NPE 必须做的第一件事是跟踪 null 变量的来源。
-
显示您的 getConnection 方法。
-
你可能没有连接,或者驱动有问题,购买你提供的信息量不足。给我们异常消息广告堆栈跟踪。搭配:try{ con = getConnection("130.206.80.46", "10000", "myuser", "mypasswd");语句 stmt = con.createStatement(); } 捕捉(异常 e){ e.printStackTrace(); }
-
我已经编辑了我的帖子,感谢您的回复。