You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2014/10/27 21:47:34 UTC

[jira] [Resolved] (PHOENIX-1376) java.lang.NullPointerException occurs in JDBC driver

     [ https://issues.apache.org/jira/browse/PHOENIX-1376?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

James Taylor resolved PHOENIX-1376.
-----------------------------------
       Resolution: Fixed
    Fix Version/s: 3.2
                   4.2
                   5.0.0
         Assignee: James Taylor

> 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
>            Assignee: James Taylor
>             Fix For: 5.0.0, 4.2, 3.2
>
>         Attachments: PHOENIX-1376.patch
>
>
> 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)