Skip site navigation (1) Skip section navigation (2)

jdbc / getTables bug?

From: Laurette Cisneros <laurette(at)nextbus(dot)com>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: jdbc / getTables bug?
Date: 2001-06-18 19:04:15
Message-ID: 5.1.0.14.0.20010618114835.00a22a00@mail.office.nextbus.com (view raw or flat)
Thread:
Lists: pgsql-jdbc
Is anyone aware of a problem in the jdbc driver for the getTables() 
function when a view is present?  I'm getting a null pointer exception:
Exception caught.
java.lang.NullPointerException
java.lang.NullPointerException
         at 
org.postgresql.jdbc2.DatabaseMetaData.getTables(DatabaseMetaData.java:1707)
         at mettst.doDatabaseMetaData(mettst.java:20)
         at mettst.<init>(mettst.java:73)
         at mettst.main(mettst.java:126)

I'm using Postgresql version 7.1 and 7.1.2 and this occurs in both.  This 
exception only occurs if a view is present.

Here's the complete java code to reproduce this (this problem was 
encountered when I ran the metadata example that came with the jdbc dirver 
code was run against my database.  I narrowed down a test for this problem 
using this example).  Any ideas?

Thanks.

---------------------------- 8< -----------------------------8< 
-----------------------------

import java.io.*;
import java.sql.*;
import java.text.*;

/**
  * Test jdbc view bug
  * To use it, simply have a database created. It will create some work tables
  * and run tests on them.
  */

public class mettst
{
   Connection       db;          // The connection to the database
   Statement        st;          // Our statement to run queries with
   DatabaseMetaData dbmd;        // This defines the structure of the database

   public void doDatabaseMetaData() throws SQLException {

     displayResult(dbmd.getTables(null,null,null,null));

   }

   public void init() throws SQLException {
     System.out.println("Creating tables and view");
     cleanup();
     st.executeUpdate("create table x " +
                       "(col1 text);");
     st.executeUpdate("create view vx as " +
                        "select col1 " +
                          "from x;");
   }

   public void cleanup() throws SQLException {
     System.out.println("Cleaning up...");
     try {
       st.executeUpdate("drop table x;");
     } catch(Exception ex) {
       // ignore any errors here
     }
     try {
       st.executeUpdate("drop view vx;");
     } catch(Exception ex) {
       // ignore any errors here
     }
   }

   public mettst() throws ClassNotFoundException, FileNotFoundException, 
IOException, SQLException
   {
     String url = "jdbc:postgresql://derby:5432/mettst";
     String usr = "user1";
     String pwd = "";

     // Load the driver
     Class.forName("org.postgresql.Driver");

     // Connect to database
     System.out.println("Connecting to Database URL = " + url);
     db = DriverManager.getConnection(url, usr, pwd);

     System.out.println("getMetaData()");
     dbmd = db.getMetaData();
     st = db.createStatement();

     // This prints the backend's version
     System.out.println("Connected to "+dbmd.getDatabaseProductName()+" 
"+dbmd.getDatabaseProductVersion());

     init();

     System.out.println("Now the test...");

     // Now the test
     doDatabaseMetaData();

     System.out.println("\nNow closing the connection");
     st.close();
     db.close();

     cleanup();
   }

   /**
    * This displays a result set.
    * Note: it closes the result once complete.
    */
   public void displayResult(ResultSet rs) throws SQLException
   {
    System.out.println("Dispay ResultSet");
     ResultSetMetaData rsmd = rs.getMetaData();
     int count=0;

     // Print the result column names
     int cols = rsmd.getColumnCount();
     for(int i=1;i<=cols;i++)
       System.out.print(rsmd.getColumnLabel(i)+(i<cols?"\t":"\n"));

     // now the results
     while(rs.next()) {
       count++;
       for(int i=1;i<=cols;i++) {
         Object o = rs.getObject(i);
         if(rs.wasNull())
           System.out.print("{null}"+(i<cols?"\t":"\n"));
         else
           System.out.print(o.toString()+(i<cols?"\t":"\n"));
       }
     }

     System.out.println("Result returned "+count+" rows.");

     // finally close the result set
     rs.close();
   }

   public static void main(String args[])
   {
     System.out.println("PostgreSQL metdata tester v6.4 rev 1\n");

     // This line outputs debug information to stderr. To enable this, simply
     // add a parameter to the command line
     if(args.length>0)
       DriverManager.setLogStream(System.err);

     // Now run the tests
     try {
       mettst test = new mettst();
     } catch(Exception ex) {
       System.err.println("Exception caught.\n"+ex);
       ex.printStackTrace();
     }
   }
}


Laurette Cisneros
NextBus Information Systems
laurette(at)nextbus(dot)com
(510) 420-3137
Why wait?
www.nextbus.com



Responses

pgsql-jdbc by date

Next:From: Dave CramerDate: 2001-06-18 20:17:14
Subject: Re: jdbc / getTables bug?
Previous:From: Gunnar RønningDate: 2001-06-16 12:42:10
Subject: Re: [JDBC] The bytea datatype and JDBC

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group