moveToInsertRow SQL Exception "No Primary Keys" - Mailing list pgsql-jdbc

From jr@amanue.com (Jim Rosenberg)
Subject moveToInsertRow SQL Exception "No Primary Keys"
Date
Msg-id 20030205193314.B4F371120D@memero.amanue.com
Whole thread Raw
Responses Re: moveToInsertRow SQL Exception "No Primary Keys"  (jr@amanue.com (Jim Rosenberg))
List pgsql-jdbc
I am fairly new to PostgreSQL and completely new to JDBC. I am trying to
follow along with the White et al _JDBC API Tutorial and Reference_, 2nd
edition, from Addison Wesley, and cannot get moveToInsertRow to work.

A thread from a few weeks ago discussed this issue; the poster was told
that tables need a primary key for updatable result sets. We can argue
about whether the designers of JDBC intended this (I believe they didn't
...) but on the other hand I don't have a problem with the idea that
every table should have a primary key in my databases. When I put a
primary key in the table coffees below I am still getting a SQL
Exception "No Primary Keys" from moveToInsertRow.

Here is the schema:

CREATE TABLE coffees (
    cof_name character varying(32) NOT NULL,
    sup_id integer,
    price double precision,
    sales integer,
    total integer
);


--
-- TOC entry 3 (OID 355664)
-- Name: pi_coffees; Type: CONSTRAINT; Schema: public; Owner: jr
--

ALTER TABLE ONLY coffees
    ADD CONSTRAINT pi_coffees PRIMARY KEY (cof_name);


And below is the code. It doesn't get any farther than printing out Boo1:

Beagle.local. 25% java InsertRow
Boo1
SQLException: No Primary Keys

My JDBC driver says it's 7.3 -- I'm not sure what build. PostgreSQL
version is 7.3, OS is Mac OS 10.2.3.

I don't see why moveToInsertRow is failing here, any help would be
welcome. If I recall correctly, the White et al book is linked on the
PostgreSQL JDBC web site; one would think from this that the code from
the book would work ...

-Thanks, Jim

/*
 * @(#)Graph.java       1.7 98/07/17
 *
 * Copyright 1997, 1998, 1999 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
 * modify and redistribute this software in source and binary code form,
 * provided that i) this copyright notice and license appear on all copies of
 * the software; and ii) Licensee does not utilize the software in a manner
 * which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
 * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control of
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in
 * the design, construction, operation or maintenance of any nuclear
 * facility. Licensee represents and warrants that it will not use or
 * redistribute the Software for such purposes.
 */

import java.sql.*;

public class InsertRow {

    public static void main(String args[]) {

        String url = "jdbc:postgresql://localhost/jdbc_book";
        Connection con;
        Statement stmt;
        String query = "select COF_NAME, PRICE from COFFEES";

        try {

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

        } catch(java.lang.ClassNotFoundException e) {
            System.err.print("Hey, fluffy, ClassNotFoundException: ");
            System.err.println(e.getMessage());
        }

        try {

            con = DriverManager.getConnection(url,
                    "jr", "");

            stmt = con.createStatement(
                ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            ResultSet uprs = stmt.executeQuery(
                "SELECT * FROM COFFEES");

System.out.println("Boo1");
            uprs.moveToInsertRow();
System.out.println("Boo2");

            uprs.updateString("COF_NAME", "Kona");
            uprs.updateInt("SUP_ID", 150);
            uprs.updateFloat("PRICE", 10.99f);
            uprs.updateInt("SALES", 0);
            uprs.updateInt("TOTAL", 0);

            uprs.insertRow();
            uprs.beforeFirst();

            System.out.println("Table COFFEES after insertion:");
            while (uprs.next()) {
                String s = uprs.getString("COF_NAME");
                int sup = uprs.getInt("SUP_ID");
                float f = uprs.getFloat("PRICE");
                int sales = uprs.getInt("SALES");
                int t = uprs.getInt("TOTAL");
                System.out.print(s + "   " + sup + "   " + f + "   ");
                System.out.println(sales + "   " + t);
            }

            uprs.close();
            stmt.close();
            con.close();

        } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
        }
    }
}

---
 Jim Rosenberg                                  http://www.well.com/user/jer/
     WELL: jer
     Internet: jr@amanue.com

pgsql-jdbc by date:

Previous
From: Vicente Alabau Gonzalvo
Date:
Subject: Matching types
Next
From: "Timothy A. DeWees"
Date:
Subject: Re: JDBC access with md5 password