| 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: | Whole Thread | Raw Message | 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.
| 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 |