Thread: Exception: No primary keys?
pgsql-jdbc A simplest test failed when I use postgresql and pgsql-jdbc driver which were build from postgresql7.3b5 source code. The test code is: .. 14 try{ 15 Class.forName(strDrv); 16 conn = DriverManager.getConnection(strUrl, "postgl", ""); 17 stmt = conn.createStatement(); 18 rs = stmt.executeQuery(strSql); 19 while (rs.next()) 20 { 21 System.out.println(rs.getString(1)); 22 } 23 //rs.beforeFirst(); 24 while (rs.previous()) 25 { 26 System.out.println(rs.getString(1)); 27 } 28 rs.moveToInsertRow(); 29 rs.updateInt("a", 100); 30 rs.insertRow(); 31 } catch(Exception e){ 32 System.out.println(e.toString()); 33 } The table "test" has only two columns(a int, b varchar) and no primary keys. The error message is: No primary keys. It's all right with line 28,29 and 30 commented out. It will also succedd when the table "test" has a primary key. Can you tell me why? My environment is: redhat 7.3 j2sdk1.4.1_01 ant1.5.1 Thanks and regards, Han zhouhanok@vip.sina.com 2002-12-02
Han, In order for the updateXXX to work it needs a primary key. This is in the spec. Furthermore, under the covers this is what is going on. when you call updateXXX, the driver does update foo set column=newval where primarykey=val It needs the primary key to be able to figure out which row to update. Dave On Mon, 2002-12-02 at 03:43, Han wrote: > pgsql-jdbc > > A simplest test failed when I use postgresql and pgsql-jdbc driver which were build from postgresql7.3b5 source code. > The test code is: > .. > -- > Dave Cramer <davec@fastcrypt.com> > Cramer Consulting > 14 try{ > 15 Class.forName(strDrv); > 16 conn = DriverManager.getConnection(strUrl, "postgl", ""); > 17 stmt = conn.createStatement(); > -- > Dave Cramer <davec@fastcrypt.com> > Cramer Consulting > 18 rs = stmt.executeQuery(strSql); > 19 while (rs.next()) > 20 { > 21 System.out.println(rs.getString(1)); > 22 } > 23 //rs.beforeFirst(); > 24 while (rs.previous()) > 25 { > 26 System.out.println(rs.getString(1)); > 27 } > 28 rs.moveToInsertRow(); > 29 rs.updateInt("a", 100); > 30 rs.insertRow(); > 31 } catch(Exception e){ > 32 System.out.println(e.toString()); > 33 } > > The table "test" has only two columns(a int, b varchar) and no primary keys. > The error message is: No primary keys. > It's all right with line 28,29 and 30 commented out. > It will also succedd when the table "test" has a primary key. > Can you tell me why? > My environment is: > redhat 7.3 > j2sdk1.4.1_01 > ant1.5.1 > > Thanks and regards, > > > > Han > zhouhanok@vip.sina.com > 2002-12-02 > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org -- Dave Cramer <Dave@micro-automation.net>
Dave Cramer, Sounds reasonable. But I still have some questions. First, what I did is just to insert a row, not update. It goes wrong when calling rs.moveToInsertRow(). Second, I think that the driver can determine which row to update by using a cursor. Thirdly, this simple test works well with Ms Sql Server. How can they implement it? And I remember that it worked wellwith a previous postgresql jdbc driver months ago. Lastly, if it's in the spec, please tell me the page or an address. I read the ResultSet related topics in java.sql apireference and could not find such a topic. Thanks and regards, >Han, > >In order for the updateXXX to work it needs a primary key. This is in >the spec. Furthermore, under the covers this is what is going on. > >when you call updateXXX, the driver does > >update foo set column=newval where primarykey=val > >It needs the primary key to be able to figure out which row to update. > >Dave >On Mon, 2002-12-02 at 03:43, Han wrote: >> pgsql-jdbc >> >> A simplest test failed when I use postgresql and pgsql-jdbc driver which were build from postgresql7.3b5 source code. >> The test code is: >> .. >> 28 rs.moveToInsertRow(); >> 29 rs.updateInt("a", 100); >> 30 rs.insertRow(); >> 31 } catch(Exception e){ >> 32 System.out.println(e.toString()); >> 33 } >> >> The table "test" has only two columns(a int, b varchar) and no primary keys. >> The error message is: No primary keys. >> It's all right with line 28,29 and 30 commented out. >> It will also succedd when the table "test" has a primary key. >> Can you tell me why? >> My environment is: >> redhat 7.3 >> j2sdk1.4.1_01 >> ant1.5.1 >> >> Thanks and regards, >> >> >> >> Han >> zhouhanok@vip.sina.com >> 2002-12-02 >-- >Dave Cramer <Dave@micro-automation.net> > > >---------------------------(end of broadcast)--------------------------- >TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org Han zhouhanok@vip.sina.com 2002-12-03