[
https://issues.apache.org/jira/browse/PHOENIX-1376?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergio Lob updated PHOENIX-1376:
--------------------------------
Description:
When our software attempts to print out a valid resultSet object via
System.out.println(), a java.lang.NullPointerException is generated within the
Phoenix JDBC driver. I would expect that performing toString() on an object
should not cause a problem. My experience is that normally the address of the
object (among other things) is usually returned. This in effect causes the
diagnostic mode of our software to be un-usable, which makes this a major issue
for us.
Here is the program log showing the exception and the java program:
======================================================
program log:
=========
log4j:WARN No appenders could be found for logger
(org.apache.hadoop.conf.Configuration.deprecation).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more
info.
Connected to jdbc:phoenix:cdh5hive:2181
Driver org.apache.phoenix.jdbc.PhoenixDriver
Version 4.1
Preparing statement
Executing prepared statement
call rs=stmt.executeQuery(), stmt =SELECT * FROM SERGIO
java.lang.NullPointerException
at
org.apache.phoenix.schema.tuple.ResultTuple.toString(ResultTuple.java:68)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at
org.apache.phoenix.jdbc.PhoenixResultSet.toString(PhoenixResultSet.java:1236)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at SimpleSelect.main(SimpleSelect.java:60)
========================================================
The program follows:
================
import java.net.URL;
import java.sql.*;
class SimpleSelect {
public static void main (String args[]) {
String url = "jdbc:phoenix:cdh5hive:2181";
String query = "SELECT * FROM SERGIO";
try {
// Load the phoenix driver
Class.forName ("org.apache.phoenix.jdbc.PhoenixDriver");
// DriverManager.setLogStream(System.out);
// Attempt to connect to a driver. Each one
// of the registered drivers will be loaded until
// one is found that can process this URL
Connection con = DriverManager.getConnection (
url, null, null);
// If we were unable to connect, an exception
// would have been thrown. So, if we get here,
// we are successfully connected to the URL
// Check for, and display and warnings generated
// by the connect.
checkForWarning (con.getWarnings ());
// Get the DatabaseMetaData object and display
// some information about the connection
DatabaseMetaData dma = con.getMetaData ();
System.out.println("\nConnected to " + dma.getURL());
System.out.println("Driver " +
dma.getDriverName());
System.out.println("Version " +
dma.getDriverVersion());
System.out.println("");
// Create a Statement object so we can submit
// SQL statements to the driver
System.out.println("Preparing statement");
PreparedStatement stmt = con.prepareStatement (query);
// Submit a query, creating a ResultSet object
System.out.println("Executing prepared statement");
System.out.println("call rs=stmt.executeQuery(), stmt ="+stmt);
ResultSet rs = stmt.executeQuery();
// The following line causes NullPointerException
System.out.println("return rs=stmt.executeQuery(), rs ="+rs);
// Display all columns and rows from the result set
System.out.println("Displaying result set");
dispResultSet (rs);
// Close the result set
rs.close();
// Close the statement
stmt.close();
// Close the connection
con.close();
}
catch (SQLException ex) {
// A SQLException was generated. Catch it and
// display the error information. Note that there
// could be multiple error objects chained
// together
System.out.println ("\n*** SQLException caught ***\n");
while (ex != null) {
System.out.println ("SQLState: " +
ex.getSQLState ());
System.out.println ("Message: " + ex.getMessage ());
System.out.println ("Vendor: " +
ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println ("");
}
}
catch (java.lang.Exception ex) {
// Got some other type of exception. Dump it.
ex.printStackTrace ();
}
}
//-------------------------------------------------------------------
// checkForWarning
// Checks for and displays warnings. Returns true if a warning
// existed
//-------------------------------------------------------------------
private static boolean checkForWarning (SQLWarning warn)
throws SQLException {
boolean rc = false;
// If a SQLWarning object was given, display the
// warning messages. Note that there could be
// multiple warnings chained together
if (warn != null) {
System.out.println ("\n *** Warning ***\n");
rc = true;
while (warn != null) {
System.out.println ("SQLState: " +
warn.getSQLState ());
System.out.println ("Message: " +
warn.getMessage ());
System.out.println ("Vendor: " +
warn.getErrorCode ());
System.out.println ("");
warn = warn.getNextWarning ();
}
}
return rc;
}
//-------------------------------------------------------------------
// dispResultSet
// Displays all columns and rows in the given result set
//-------------------------------------------------------------------
private static void dispResultSet (ResultSet rs)
throws SQLException
{
int i;
// Get the ResultSetMetaData. This will be used for
// the column headings
ResultSetMetaData rsmd = rs.getMetaData ();
// Get the number of columns in the result set
int numCols = rsmd.getColumnCount ();
// Display column headings
for (i=1; i<=numCols; i++) {
if (i > 1) System.out.print(",");
System.out.print(rsmd.getColumnLabel(i));
}
System.out.println("");
// Display data, fetching until end of the result set
boolean more = rs.next ();
while (more) {
// Loop through each column, getting the
// column data and displaying
for (i=1; i<=numCols; i++) {
if (i > 1) System.out.print(",");
System.out.print(rs.getString(i));
}
System.out.println("");
// Fetch the next result set row
more = rs.next ();
}
}
}
was:
When our software attempts to print out a valid resultSet object via
System.out.println(), a java.lang.NullPointerException is generated within the
Phoenix JDBC driver. I would expect that performing toString() on an object
should not cause a problem. My experience is that normally the address of the
object (among other things) is usually returned. This in effect causes the
diagnostic mode of our software to be un-usable, which makes this a major issue
for us.
Here is the program log showing the exception and the java program:
======================================================
program log:
=========
log4j:WARN No appenders could be found for logger
(org.apache.hadoop.conf.Configuration.deprecation).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more
info.
Connected to jdbc:phoenix:cdh5hive:2181
Driver org.apache.phoenix.jdbc.PhoenixDriver
Version 4.1
Preparing statement
Executing prepared statement
call rs=stmt.executeQuery(), stmt =SELECT * FROM SERGIO
java.lang.NullPointerException
at
org.apache.phoenix.schema.tuple.ResultTuple.toString(ResultTuple.java:68)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at
org.apache.phoenix.jdbc.PhoenixResultSet.toString(PhoenixResultSet.java:1236)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at SimpleSelect.main(SimpleSelect.java:60)
========================================================
The program follows:
================
import java.net.URL;
import java.sql.*;
class SimpleSelect {
public static void main (String args[]) {
String url = "jdbc:phoenix:cdh5hive:2181";
String query = "SELECT * FROM SERGIO";
try {
// Load the phoenix driver
Class.forName ("org.apache.phoenix.jdbc.PhoenixDriver");
// DriverManager.setLogStream(System.out);
// Attempt to connect to a driver. Each one
// of the registered drivers will be loaded until
// one is found that can process this URL
Connection con = DriverManager.getConnection (
url, null, null);
// If we were unable to connect, an exception
// would have been thrown. So, if we get here,
// we are successfully connected to the URL
// Check for, and display and warnings generated
// by the connect.
checkForWarning (con.getWarnings ());
// Get the DatabaseMetaData object and display
// some information about the connection
DatabaseMetaData dma = con.getMetaData ();
System.out.println("\nConnected to " + dma.getURL());
System.out.println("Driver " +
dma.getDriverName());
System.out.println("Version " +
dma.getDriverVersion());
System.out.println("");
// Create a Statement object so we can submit
// SQL statements to the driver
System.out.println("Preparing statement");
PreparedStatement stmt = con.prepareStatement (query);
// Submit a query, creating a ResultSet object
System.out.println("Executing prepared statement");
System.out.println("call rs=stmt.executeQuery(), stmt ="+stmt);
ResultSet rs = stmt.executeQuery();
// The following line causes NullPointerException
System.out.println("return rs=stmt.executeQuery(), rs ="+rs);
// Display all columns and rows from the result set
System.out.println("Displaying result set");
dispResultSet (rs);
// Close the result set
rs.close();
// Close the statement
stmt.close();
// Close the connection
con.close();
}
catch (SQLException ex) {
// A SQLException was generated. Catch it and
// display the error information. Note that there
// could be multiple error objects chained
// together
System.out.println ("\n*** SQLException caught ***\n");
while (ex != null) {
System.out.println ("SQLState: " +
ex.getSQLState ());
System.out.println ("Message: " + ex.getMessage ());
System.out.println ("Vendor: " +
ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println ("");
}
}
catch (java.lang.Exception ex) {
// Got some other type of exception. Dump it.
ex.printStackTrace ();
}
}
//-------------------------------------------------------------------
// checkForWarning
// Checks for and displays warnings. Returns true if a warning
// existed
//-------------------------------------------------------------------
private static boolean checkForWarning (SQLWarning warn)
throws SQLException {
boolean rc = false;
// If a SQLWarning object was given, display the
// warning messages. Note that there could be
// multiple warnings chained together
if (warn != null) {
System.out.println ("\n *** Warning ***\n");
rc = true;
while (warn != null) {
System.out.println ("SQLState: " +
warn.getSQLState ());
System.out.println ("Message: " +
warn.getMessage ());
System.out.println ("Vendor: " +
warn.getErrorCode ());
System.out.println ("");
warn = warn.getNextWarning ();
}
}
return rc;
}
//-------------------------------------------------------------------
// dispResultSet
// Displays all columns and rows in the given result set
//-------------------------------------------------------------------
private static void dispResultSet (ResultSet rs)
throws SQLException
{
int i;
// Get the ResultSetMetaData. This will be used for
// the column headings
ResultSetMetaData rsmd = rs.getMetaData ();
// Get the number of columns in the result set
int numCols = rsmd.getColumnCount ();
// Display column headings
for (i=1; i<=numCols; i++) {
if (i > 1) System.out.print(",");
System.out.print(rsmd.getColumnLabel(i));
}
System.out.println("");
// Display data, fetching until end of the result set
boolean more = rs.next ();
while (more) {
// Loop through each column, getting the
// column data and displaying
for (i=1; i<=numCols; i++) {
if (i > 1) System.out.print(",");
System.out.print(rs.getString(i));
}
System.out.println("");
// Fetch the next result set row
more = rs.next ();
}
}
}
> java.lang.NullPointerException occurs in JDBC driver
> ----------------------------------------------------
>
> Key: PHOENIX-1376
> URL: https://issues.apache.org/jira/browse/PHOENIX-1376
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.1
> Environment: windows 7
> Reporter: Sergio Lob
>
> When our software attempts to print out a valid resultSet object via
> System.out.println(), a java.lang.NullPointerException is generated within
> the Phoenix JDBC driver. I would expect that performing toString() on an
> object should not cause a problem. My experience is that normally the address
> of the object (among other things) is usually returned. This in effect
> causes the diagnostic mode of our software to be un-usable, which makes this
> a major issue for us.
> Here is the program log showing the exception and the java program:
> ======================================================
> program log:
> =========
> log4j:WARN No appenders could be found for logger
> (org.apache.hadoop.conf.Configuration.deprecation).
> log4j:WARN Please initialize the log4j system properly.
> log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more
> info.
> Connected to jdbc:phoenix:cdh5hive:2181
> Driver org.apache.phoenix.jdbc.PhoenixDriver
> Version 4.1
> Preparing statement
> Executing prepared statement
> call rs=stmt.executeQuery(), stmt =SELECT * FROM SERGIO
> java.lang.NullPointerException
> at
> org.apache.phoenix.schema.tuple.ResultTuple.toString(ResultTuple.java:68)
> at java.lang.String.valueOf(Unknown Source)
> at java.lang.StringBuilder.append(Unknown Source)
> at
> org.apache.phoenix.jdbc.PhoenixResultSet.toString(PhoenixResultSet.java:1236)
> at java.lang.String.valueOf(Unknown Source)
> at java.lang.StringBuilder.append(Unknown Source)
> at SimpleSelect.main(SimpleSelect.java:60)
> ========================================================
> The program follows:
> ================
> import java.net.URL;
> import java.sql.*;
> class SimpleSelect {
> public static void main (String args[]) {
> String url = "jdbc:phoenix:cdh5hive:2181";
> String query = "SELECT * FROM SERGIO";
> try {
> // Load the phoenix driver
> Class.forName ("org.apache.phoenix.jdbc.PhoenixDriver");
> // DriverManager.setLogStream(System.out);
> // Attempt to connect to a driver. Each one
> // of the registered drivers will be loaded until
> // one is found that can process this URL
> Connection con = DriverManager.getConnection (
> url, null, null);
> // If we were unable to connect, an exception
> // would have been thrown. So, if we get here,
> // we are successfully connected to the URL
> // Check for, and display and warnings generated
> // by the connect.
> checkForWarning (con.getWarnings ());
> // Get the DatabaseMetaData object and display
> // some information about the connection
> DatabaseMetaData dma = con.getMetaData ();
> System.out.println("\nConnected to " + dma.getURL());
> System.out.println("Driver " +
> dma.getDriverName());
> System.out.println("Version " +
> dma.getDriverVersion());
> System.out.println("");
> // Create a Statement object so we can submit
> // SQL statements to the driver
> System.out.println("Preparing statement");
> PreparedStatement stmt = con.prepareStatement (query);
> // Submit a query, creating a ResultSet object
> System.out.println("Executing prepared statement");
> System.out.println("call rs=stmt.executeQuery(), stmt ="+stmt);
> ResultSet rs = stmt.executeQuery();
> // The following line causes NullPointerException
> System.out.println("return rs=stmt.executeQuery(), rs ="+rs);
> // Display all columns and rows from the result set
> System.out.println("Displaying result set");
> dispResultSet (rs);
> // Close the result set
> rs.close();
> // Close the statement
> stmt.close();
> // Close the connection
> con.close();
> }
> catch (SQLException ex) {
> // A SQLException was generated. Catch it and
> // display the error information. Note that there
> // could be multiple error objects chained
> // together
> System.out.println ("\n*** SQLException caught ***\n");
> while (ex != null) {
> System.out.println ("SQLState: " +
> ex.getSQLState ());
> System.out.println ("Message: " + ex.getMessage ());
> System.out.println ("Vendor: " +
> ex.getErrorCode ());
> ex = ex.getNextException ();
> System.out.println ("");
> }
> }
> catch (java.lang.Exception ex) {
> // Got some other type of exception. Dump it.
> ex.printStackTrace ();
> }
> }
> //-------------------------------------------------------------------
> // checkForWarning
> // Checks for and displays warnings. Returns true if a warning
> // existed
> //-------------------------------------------------------------------
> private static boolean checkForWarning (SQLWarning warn)
> throws SQLException {
> boolean rc = false;
> // If a SQLWarning object was given, display the
> // warning messages. Note that there could be
> // multiple warnings chained together
> if (warn != null) {
> System.out.println ("\n *** Warning ***\n");
> rc = true;
> while (warn != null) {
> System.out.println ("SQLState: " +
> warn.getSQLState ());
> System.out.println ("Message: " +
> warn.getMessage ());
> System.out.println ("Vendor: " +
> warn.getErrorCode ());
> System.out.println ("");
> warn = warn.getNextWarning ();
> }
> }
> return rc;
> }
> //-------------------------------------------------------------------
> // dispResultSet
> // Displays all columns and rows in the given result set
> //-------------------------------------------------------------------
> private static void dispResultSet (ResultSet rs)
> throws SQLException
> {
> int i;
> // Get the ResultSetMetaData. This will be used for
> // the column headings
> ResultSetMetaData rsmd = rs.getMetaData ();
> // Get the number of columns in the result set
> int numCols = rsmd.getColumnCount ();
> // Display column headings
> for (i=1; i<=numCols; i++) {
> if (i > 1) System.out.print(",");
> System.out.print(rsmd.getColumnLabel(i));
> }
> System.out.println("");
>
> // Display data, fetching until end of the result set
> boolean more = rs.next ();
> while (more) {
> // Loop through each column, getting the
> // column data and displaying
> for (i=1; i<=numCols; i++) {
> if (i > 1) System.out.print(",");
> System.out.print(rs.getString(i));
> }
> System.out.println("");
> // Fetch the next result set row
> more = rs.next ();
> }
> }
> }
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)