Обсуждение: Stored procedures
Hello!
Can anybody tell me one thing.
How can i call stored procedures in my java-programm?
Thanks for any help.
Here is a full example of a java program showing the data from a set returning
function:
-------------------------
--IN YOUR DATABASE
CREATE TABLE people (name TEXT);
INSERT INTO people VALUES ('john');
INSERT INTO people VALUES ('peter');
INSERT INTO people VALUES ('joe');
CREATE FUNCTION getPeople() RETURNS SETOF people AS '
DECLARE rec RECORD;
BEGIN FOR rec IN SELECT name FROM people LOOP RETURN NEXT rec; END LOOP; RETURN;
END;' LANGUAGE 'plpgsql';
-------------------
--ListPeople.java
import java.sql.*;
public class ListPeople { public static void main(String[] args) { try {
Class.forName("org.postgresql.Driver"); Connection
con=DriverManager.getConnection("jdbc:postgresql:franco?user=admin"); Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM getPeople()"); while (rs.next()) {
System.out.println(rs.getString("name")); } } catch (Exception e) { System.out.println("Exception:
"+e.getMessage()); } }
}
On Friday 28 March 2003 19:31, Zodiac wrote:
> Hello!
> Can anybody tell me one thing.
> How can i call stored procedures in my java-programm?
>
> Thanks for any help.
Thank you for help. Just one more question. Have i direct access to stored procedure? For example, i have procedure which returns Integer and i wanna to have ability to write such code " int var = ANY_CALL". Where ANY_CALL is a my procedure call. I meant must i do "executeQuery" only and after then parse Statement variable? Thank you.
As far as I know, you always work with a ResultSet.
If you know your stored procedures will always return an Integer and you don't
wanna deal with the executeQuery and stuff every time, you could create a
class with methods explicitly for accesing your stored procedures, for
example:
assuming you have a pg function returning an INT, called countPeople(), you
could do
public class MyStoredProcs { private static int executeAnyProc(Connection conn, String procName) throws
SQLException{ Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("SELECT * FROM
"+procName+"()"); rs.next(); return rs.getInt(1); }
public static int countPeople() throws SQLException{ return executeAnyProc("countPeople"); }
};
You could add methods to access every stored procedure in your database (even
returning other data types), and you would use it like this in your code:
... int count=MyStoredProcs.countPeople(); // do something with the value if (count>100) {
...
hope this is what you were looking for.
On Saturday 29 March 2003 17:35, Zodiac wrote:
> Thank you for help.
> Just one more question. Have i direct access to stored procedure?
> For example, i have procedure which returns Integer and i wanna to have
> ability to write such code " int var = ANY_CALL". Where ANY_CALL is a my
> procedure call.
> I meant must i do "executeQuery" only and after then parse Statement
> variable?
>
> Thank you.