Re: create tables and prepared statements with params

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Mark Lewis <mark(dot)lewis(at)mir3(dot)com>
Cc: Enrique Rodríguez Lasterra <lasterra(at)javahispano(dot)org>, pgsql-jdbc(at)postgresql(dot)org
Subject: Re: create tables and prepared statements with params
Date: 2006-09-13 17:38:05
Message-ID: E08F0920-D988-4083-94AF-125B9C10B578@fastcrypt.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc


On 13-Sep-06, at 1:20 PM, Mark Lewis wrote:

> In 8.x the driver uses "real" server-side prepared statements. In
> 7.4.x
> the driver did string replacements before submitting statements to the
> server.
>
> There are pros and cons to server-side prepared statements. They're
> mostly a very good thing, but you're running into one of the
> limitations; the driver can only put variables in places where the
> server allows variables. CREATE TABLE isn't one of those places.
>
> Your best bet with the 8.x driver is to perform the string replacement
> yourself.
Or, you can create the connection using the old protocol see http://
jdbc.postgresql.org/documentation/head/connect.html#connection-
parameters

for protocolVersion
>
> [Question to the list: this should be on the FAQ. How could I go
> about
> submitting patches to the FAQ page?]

The web page is part of the project, and can be downloaded via CVS,
send a patch

--dc--
>
> -- Mark Lewis
>
> On Wed, 2006-09-13 at 19:10 +0200, Enrique Rodríguez Lasterra wrote:
>> get an error when i create a table using preparedstatement with some
>> parameters "?".
>>
>> Is this a non standard function?
>>
>> With JDBC 7.4 it runs prefectly but with 8.x no. With 8.x if i don't
>> use params the table is created without errors
>>
>> Here is all the info.
>>
>> Regards, Enrique
>>
>> Code
>>
>> package test;
>>
>> import java.sql.Connection;
>> import java.sql.DriverManager;
>> import java.sql.PreparedStatement;
>>
>> /**
>> * DB
>> *
>> * @version 1.0
>> * @since 13-sep-2006
>> */
>> public class DB {
>> public static void main(String[] args) {
>> Connection connection = null;
>> try {
>> Class.forName("org.postgresql.Driver");
>> connection =
>> DriverManager.getConnection("jdbc[tongue]ostgresql://192.168.4.221/
>> canyamo-test",
>> "canyamo-test", "canyamo-test");
>> PreparedStatement stmt =
>> connection.prepareStatement("create table orders ( id integer not
>> null, client character varying(15) default ? not null)");
>> stmt.setObject(1, "without-name");
>>
>> stmt.executeUpdate();//stmt.execute();
>> } catch (Exception e) {
>> e.printStackTrace();
>> }
>> }
>> }
>>
>> Exception
>>
>> org.postgresql.util.PSQLException: ERROR: there is no parameter $1
>> at
>> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse
>> (QueryExecutorImpl.java:1527)
>> at org.postgresql.core.v3.QueryExecutorImpl.processResults
>> (QueryExecutorImpl.java:1311)
>> at org.postgresql.core.v3.QueryExecutorImpl.execute
>> (QueryExecutorImpl.java:190)
>> at org.postgresql.jdbc2.AbstractJdbc2Statement.execute
>> (AbstractJdbc2Statement.java:452)
>> at
>> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags
>> (AbstractJdbc2Statement.java:354)
>> at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate
>> (AbstractJdbc2Statement.java:308)
>> at test.DB.main(DB.java:23)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at sun.reflect.NativeMethodAccessorImpl.invoke
>> (NativeMethodAccessorImpl.java:39)
>> at sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:324)
>> at com.intellij.rt.execution.application.AppMain.main
>> (AppMain.java:90)
>>
>>
>> Versions
>> JDBC: 8.1.404
>> Database: 8.1.4
>>
>>
>>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 2: Don't 'kill -9' the postmaster
>

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Mark Lewis 2006-09-13 19:55:59 FAQ update patch
Previous Message Mark Lewis 2006-09-13 17:20:51 Re: create tables and prepared statements with params