ResultSet.next() throws NullPointerException

Hello,

When running the following code:

import java.sql.*;

class DatabaseDriver{

privateintdatabaseType;

private Stringerror;

private Connectioncon;

private Statementstatement;

private ResultSetrs;

staticfinalintMYSQL_DB_TYPE = 1;

staticfinalintPGSQL_DB_TYPE = 2;

staticfinalintMSSQL_DB_TYPE = 3;

staticfinalintORACLE_DB_TYPE = 4;

public DatabaseDriver (int dbType){

databaseType = dbType;

try{

switch (dbType){

case MYSQL_DB_TYPE:

Class.forName("com.mysql.jdbc.Driver").newInstance();

break;

case PGSQL_DB_TYPE:

Class.forName("org.postgresql.Driver").newInstance();

break;

case MSSQL_DB_TYPE:

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();

break;

case ORACLE_DB_TYPE:

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

break;

}

}catch (Exception e){

error ="could not load driver";

}

}

publicboolean connect (String server, String user, String password){

try{

con = DriverManager.getConnection("jdbc:mysql://" + server +"?user=" + user +"&password=" + password);

}catch (Exception e){

error ="could not connect to the database";

returnfalse;

}

returntrue;

}

publicboolean execQuery (String query){

try{

statement = con.createStatement();

if (statement.execute(query)){

rs = statement.getResultSet();

}

while (rs.next()){

System.out.println(rs.getString("1") +"\t" + rs.getString("2"));

}

rs.close();

rs =null;

statement.close();

statement =null;

}catch (Exception e){

error = e.toString();

e.printStackTrace();

returnfalse;

}

returntrue;

}

public String getError (){

return error;

}

publicboolean disconnect (){

returntrue;

}

}

class Test{

publicstaticvoid main (String[] args){

DatabaseDriver db =new DatabaseDriver(1);

db.connect(args[0],args[1],args[2]);

db.execQuery("USE " + args[3] +";");

db.execQuery("SELECT * FROM te;");

System.out.println(db.getError());

}

}

I receive this in the printout:

java.lang.NullPointerException

at DatabaseDriver.execQuery(DatabaseDriver.java:61)

at Test.main(Test.java:7)

bla1bla2

bla6bla7

java.lang.NullPointerException

Line 61

while (rs.next()) {

I have read a lot of other posts that say that the connection object is null or the recordset is empty, but it seems that neither of those are the case considering I am able to printout the two rows properly.

Can someone please explain to me what I am doing wrong and how to fix it?

Thanks

[6290 byte] By [Java.Newbiea] at [2007-11-27 10:19:11]
# 1

So what will 'rs' reference on line 61 if if (statement.execute(query)) {

returns false?

sabre150a at 2007-7-28 16:56:08 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...
# 2

Nothing, right now. But in this example, it must be returning true otherwise it would not be able to print out information from the database. The NullPointerException is coming after the information from the database is already printed.

Java.Newbiea at 2007-7-28 16:56:08 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...
# 3

You can pepper your code with System.out.println() statements to determine what value goes into the execute() statement before it runs.

In the following, I think the first statement will probably return false. What is this sql trying to accomplish that you think it sould return true? Even if it returned true, what value do you expect in the resultSet?

db.execQuery("USE " + args[3] + ";");

db.execQuery("SELECT * FROM te;");

As a side note, I strongly suggest you use connection pooling and not driverManager. here is an example of getting and returning a connection properly (all within a function)

public String[] myFunction(){

Connection conn=null;

PreparedStatement pstmt1= null;

ResultSet resultSet=null;

ArrayList list1; //array that can grow in size

try{

list1=new ArrayList();

conn= dataSource.getConnection();

pstmt1= conn.prepareStatement();

resultSet= pstmt1.executeUpdate();

while(resultSet.next()){

arrayList.add(resultSet.getString("lastName");

}

return ( String[] ) arrayList.toArray( new String[arrayList.size()] );

} catch (SqlException e){

e.printStackTrace();

} finally {

if(rsultSet!=null)

resultSet.close();

if(pstmt1!=null)

pstmt1.close();

if(conn!=null)

conn.close();

}

}

}

George123a at 2007-7-28 16:56:08 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...
# 4

The statement

db.execQuery("USE " + args[3] + ";");

in mySQL i don't think it was meant to return a result set object

so try wrapping ur code in

if (rs != null) {

}

malino01a at 2007-7-28 16:56:08 > top of Java-index,Database Connectivity,Java Database Connectivity (JDBC)...