Hi,

As far as I understand, the method is supposed to return the schema
name of the column. Since '1' is a constant and not a column, the
schema name (and table name) is empty. I have tested this with other
databases (PostgreSQL, HSQLDB, and Derby I think) and they work in the
same way.

Regards,
Thomas


On Mon, Jul 23, 2012 at 4:11 PM, Vinod <[email protected]> wrote:
> This particular query is executed against dual. Shall it not return PUBLIC
> instead of empty schema name?
>
>
> On Sunday, July 22, 2012 2:23:37 PM UTC-4, Thomas Mueller wrote:
>>
>> Hi,
>>
>> Thanks a lot for reporting this issue! This is a pretty serious
>> problem... I didn't know getSchemaName is never supposed to return
>> null. According to the JDBC specification, the method is supposed to
>> return an empty string if not applicable, this is what I will do
>> within H2 for this case. The same for getTableName.
>>
>> This will be fixed in the next release.
>>
>> Regards,
>> Thomas
>>
>> On Thu, Jul 19, 2012 at 7:35 PM, Vinod <[email protected]> wrote:
>> > Hi,
>> >
>> > I am converting resultset to a CachedRowSet, which expects a schema
>> > name(which is empty).
>> >
>> > Code: (Full code is attached)
>> > --------------------------------------------
>> >         Connection conn =
>> > DriverManager.getConnection("jdbc:h2:mem:TempDB");
>> >         String queryStr = "select '1' from dual";
>> >         PreparedStatement stmt = conn.prepareStatement(queryStr);
>> >         ResultSet rs = stmt.executeQuery();
>> >
>> >         // following shows that schema name is null
>> >         ResultSetMetaData metaData = rs.getMetaData();
>> >         String schemaName = metaData.getSchemaName(1);
>> >         System.out.println("schemaName=" + schemaName);
>> >
>> >         // this is the actual call I am making causing
>> > NullPointerException
>> >         CachedRowSet sunCachedRowSet = new CachedRowSet();
>> >         sunCachedRowSet.populate(rs);
>> > --------------------------------------------
>> >
>> > Output:
>> > --------------------------------------------
>> > schemaName=null
>> > Exception in thread "main" java.lang.NullPointerException
>> > at java.lang.String.<init>(Unknown Source)
>> > at
>> >
>> > sun.jdbc.rowset.RowSetMetaDataImpl.setSchemaName(RowSetMetaDataImpl.java:269)
>> > at sun.jdbc.rowset.CachedRowSet.initMetaData(CachedRowSet.java:680)
>> > at sun.jdbc.rowset.CachedRowSet.populate(CachedRowSet.java:647)
>> > at com.H2SchemaNameEmpty.main(H2SchemaNameEmpty.java:28)
>> > --------------------------------------------
>> >
>> > I even tried by setting the schema to public:
>> > [jdbc:h2:mem:TempDB;SCHEMA=PUBLIC].
>> >
>> > To make it work, I modified JdbcResultSetMetaData.getSchemaName to
>> > return
>> > "PUBLIC" when it is null.
>> > Is there a better way to resolve this.
>> >
>> > Thanks,
>> > Vinod
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups
>> > "H2 Database" group.
>> > To view this discussion on the web visit
>> > https://groups.google.com/d/msg/h2-database/-/ctRP4sRSC6AJ.
>> > To post to this group, send email to [email protected].
>> > To unsubscribe from this group, send email to
>> > [email protected].
>> > For more options, visit this group at
>> > http://groups.google.com/group/h2-database?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/h2-database/-/zbPkSTVhvjcJ.
>
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/h2-database?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to