JDBC prepared statement is not treated as prepared statement

From: 高健 <luckyjackgao(at)gmail(dot)com>
To: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: JDBC prepared statement is not treated as prepared statement
Date: 2013-06-17 02:52:02
Message-ID: CAL454F22W=f3qBOyZOsTomsoRSupR_Z8PbRXFnj+NEJy7f+rZg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hello:

I have one question about prepared statement.

I use Java via JDBC, then send prepared statement to execute.

I thought that the pg_prepared_statments view will have one record after
my execution.

But I can't find.

Is the JDBC's prepared statement differ from SQL execute by prepare
command ?

http://www.postgresql.org/docs/current/static/sql-prepare.html

My simple java program is the following:

import java.sql.*;

public class Test01 {

public static void main(String argsv[]){

try

{

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

String url = "jdbc:postgresql://localhost:5432/postgres" ;

Connection con =
DriverManager.getConnection(url,"postgres","postgres" );

///Phase 1:-------------Select data from
table-----------------------

System.out.println("Phase 1------------------------start");

String strsql = " select * from customers where cust_id = ?";

PreparedStatement pst=con.prepareStatement(strsql);

pst.setInt(1,3); //find the customer with cust_id of 3.

ResultSet rs = pst.executeQuery();

while (rs.next())

{

System.out.print("cust_id:"+rs.getInt( "cust_id"));

System.out.println("...cust_name:"+rs.getString( "cust_name"
));

}

System.out.println("Phase 1------------------------end\n");

///Phase 2:-------------Use connection again,to select data from
data dictionary-----------------------

System.out.println("Phase 2------------------------start");

strsql = "select * from pg_prepared_statements";

pst=con.prepareStatement(strsql);

rs = pst.executeQuery();

while (rs.next())

{

System.out.println("statement:"+rs.getString( "statement"));

}

System.out.println("Phase
2------------------------end\n");

///Phase 3:-------------Use connection again,to select data from
table-----------------------

System.out.println("Phase
3------------------------start");

strsql = "select * from customers";

pst=con.prepareStatement(strsql);

rs = pst.executeQuery();

while (rs.next())

{

System.out.print("cust_id:"+rs.getInt( "cust_id"));

System.out.println("...cust_name:"+rs.getString( "cust_name"
));

}

System.out.println("Phase
3------------------------end\n");

rs.close();

pst.close();

con.close();

}

catch (Exception ee)

{

System.out.print(ee.getMessage());

}

}

}

The result of it's execution is:

Phase 1------------------------start

cust_id:3...cust_name:Taylor

Phase 1------------------------end

Phase 2------------------------start

Phase 2------------------------end

Phase 3------------------------start

cust_id:1...cust_name:Smith

cust_id:2...cust_name:Brown

cust_id:3...cust_name:Taylor

Phase 3------------------------end

That is to say: my prepared statement is not cached by PG?

Then how to write a java program to made it's prepared statement realized
by PG to treat it as a "prepared statement"?

Thank you.

Responses

Browse pgsql-general by date

  From Date Subject
Next Message 高健 2013-06-17 08:55:06 Re: JDBC prepared statement is not treated as prepared statement
Previous Message Stephen Frost 2013-06-17 02:19:00 Re: prepared statement functioning range