import java.sql.*;
import java.util.Properties;
/**
* Test case to produce the following NullPointerException
* when using mysql jdbc driver version 5.0.5:
* java.lang.NullPointerException
* at com.mysql.jdbc.Connection.initializeResultsMetadataFromCache(Connection.java:5882)
* at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:853)
* at ....
*/
public final class TestMysqlJdbc505Bug
{
private static final String MYURL =
"jdbc:mysql://localhost:3306/test";
public static void main(String[] args)
{
Properties props = new Properties();
Connection conn = null;
PreparedStatement ps = null;
try
{
DriverManager.registerDriver((Driver)
Class.forName("com.mysql.jdbc.Driver").newInstance());
props.put("user", "root");
props.put("password", "");
props.put("cachePrepStmts", "true");
props.put("useServerPrepStmts", "false");
props.put("cacheResultSetMetadata", "true");
conn = DriverManager.getConnection(MYURL, props);
ps = conn.prepareStatement( "select 1" );
// it fails in the below line when using 5.0.5 driver, 5.0.4 is ok.
ps.execute();
// ps.executeQuery instead of ps.execute runs correctly, does not fail.
// sun's jdk 1.4.2_13 and 1.5.0_10 makes no difference.
// when cacheResultSetMetaData set to false, ps.execute does not fail.
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if (ps != null) ps.close();
if (conn != null) conn.close();
}
catch (SQLException e)
{
System.err.println( e );
}
}
}
}