Search Postgresql Archives

Re: JDBC prepared statement is not treated as prepared statement

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



高健  wrote:
> 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.

See http://jdbc.postgresql.org/documentation/head/server-prepare.html

Set the prepare threshold of a PreparedStatement and use the statement
at least as many times.  Then you should see an entry in
pg_prepared_statements.

In your example, no PreparedStatement is used more than once.

Yours,
Laurenz Albe

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux