From: | jr(at)amanue(dot)com (Jim Rosenberg) |
---|---|
To: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | moveToInsertRow SQL Exception "No Primary Keys" |
Date: | 2003-02-05 19:33:14 |
Message-ID: | 20030205193314.B4F371120D@memero.amanue.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)amanue(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | snpe | 2003-02-05 19:40:16 | Re: java.lang.OutOfMemoryError |
Previous Message | Barry Lind | 2003-02-05 19:21:22 | Re: java.lang.OutOfMemoryError |