|
|
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
Уважаемые гуру, подскажите убогому - как из JDBC получить возвращаемые параметры из хранимки? Пользую Sybase ASE + jconnect ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 19:19 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
JDBC™ 3.0 Specification 13.3.2.2 OUT Parameters The method registerOutParameter must be called to set the type for each OUT parameter before a CallableStatement object is executed. When the stored procedure returns from execution, it will use these types to set the values for any OUT parameters. The values of OUT parameters can be retrieved using the appropriate getter methods defined in the CallableStatement interface. CODE EXAMPLE 13-22 shows the execution of a stored procedure with two OUT parameters, a string and float, and the retrieval of the OUT parameter values. CallableStatement cstmt = conn.prepareCall( “{CALL GET_NAME_AND_NUMBER(?, ?)}"); cstmt.registerOutParameter(1, java.sql.Types.STRING); cstmt.registerOutParameter(2, java.sql.Types.FLOAT); cstmt.execute(); // Retrieve OUT parameters String name = cstmt.getString(1); float number = cstmt.getFloat(2); CODE EXAMPLE 13-22 Registering and retrieving OUT parameters ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 19:41 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
Спасибо большое! Все гуд, только вместо cstmt.registerOutParameter(1, java.sql.Types.STRING); оно захотело cstmt.registerOutParameter(1, java.sql.Types.VARCHAR); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2004, 20:49 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
1, java.sql.Types.VARCHAR угу - это опечатка в JDBC™ 3.0 Specification... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 11:04 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
О, может еще подскажете: “{CALL GET_NAME_AND_NUMBER(?, ?)}" это хорошо. А если параметр еще обычный есть (input) ??? “{CALL GET_NAME_AND_NUMBER('my_parameter',?, ?)}" че-то не получается Приведу часть кода: (хранимка принимает три параметра, два из которых последние - output) Вот таким вызовом exec sp_myproc @chrString,@myStatus output,@myDate output Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. тут он ругается на (уже при cstmt.registerOutParameter()) java.sql.SQLException: JZ0SB: Parameter index out of range: 3. а если делать 1,2 [что imho неправильно] То проходит cstmt.registerOutParameter() но при getString() но оно ругается как java.sql.SQLException: JZ0SG: A CallableStatement did n parameters as the application had registered for it. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 16:07 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
вместо Код: plaintext 1. Код: plaintext 1. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 16:43 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
java.sql.SQLException: JZ0SB: Parameter index out of range: 3. так ведь у вас два параметра - '222' - это не параметр а константа! Делайте так Код: plaintext Ну и не забудьте его установить в '222' перед вызовом Execute() cstmt.setString(1, "222"); PS> скачайте спецификацию на jdbc отсюда - http://java.sun.com/products/jdbc/download.html#corespec30 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 17:12 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
б-р-ррр собственно как я написал - я пробовал 1,2 и при этом cstmt.registerOutParameter() проходит намана, а когда Код: plaintext 1. 2. 3. вот что: java.sql.SQLException: JZ0SG: A CallableStatement did not return as many output parameters as the application had registered for it. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 17:14 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
Хехе, прикольно. По моему getString надо делать для ResultSet'a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 17:17 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
funikovyuri это пробовал тоже У меня 1-й параметр input и varchar(20) cstmt.setString(1,"222"); при execute() ругается com.sybase.jdbc2.jdbc.SybSQLException: Implicit conversion from datatype 'SMALLI NT' to 'VARCHAR' is not allowed. Use the CONVERT function to run this query. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 17:20 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
ГостиХехе, прикольно. По моему getString надо делать для ResultSet'a Извиняюсь, туплю. А вообще пишут что такое бывает, когда java.sql.SQLException - if a database access error occurs ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 17:24 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
Я даже подумал, что может быть Код: plaintext 1. надо - вот до чего у меня крыша поехала :-) 2Гости до недавнего времени я тоже думал, что "getString надо делать для ResultSet'a", точнее что "getString МОЖНО делать ТОЛЬКО для ResultSet'a" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 17:26 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
ну в exception же ясно сказано - что параметр типа smallint - так зачем же вы его с помощью setString() указываете??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 18:04 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
funikovyuri в том-то и дело, что параметр varchar! Вот заголовок процедуры CREATE PROCEDURE dbo.sp_myproc ( @myPhone varchar(7), @myStatus smallint output, @myDate datetime output ) соответственно первый параметр нужно как String или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 18:47 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
Statement s=conn.createStatement(); CallableStatement cstmt=conn.prepareCall("{CALL ADSL..sp_myproc(?,?,?)}"); cstmt.setString(1,"222"); cstmt.registerOutParameter(2, java.sql.Types.SMALLINT); cstmt.registerOutParameter(3, java.sql.Types.DATETIME); cstmt.execute(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 19:34 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
Слона-то я и не заметил :-) funikovyuri спасибо! Все супер! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 19:54 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
и вдогонку - опять же почему-то не cstmt.registerOutParameter(3, java.sql.Types.DATETIME); оно хотело, а cstmt.registerOutParameter(3, java.sql.Types.DATE); возможно, это от версии JDBC зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 19:56 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
+ проще и удобней обращаться к параметрам по именам Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 19:57 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/mapping.html см. 9.3.13 DATE, TIME, and TIMESTAMP и //9.9.7 JDBC Types Mapped to Database-specific SQL Types так что если у вас MS SQL - то надо использовать .sql.TIMESTAMP, если что-то другое - то см. таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2004, 20:06 |
|
||
|
JDBC и output параметр
|
|||
|---|---|---|---|
|
#18+
привет, возвращаясь к обсуждаемой теме: в описании класса формы Employees пишу следущее: Object[][] data = DB.ExecStoredProc(activeStatus); а в классе DB пишу: public static Object[][] ExecStoredProc(String activeStatus) { ... CallableStatement cs = null; //System.out.println("a="+ activeStatus); try { cs = con.prepareCall("{CALL SelEmployees(?)}"); cs.setString("@status",activeStatus); .... не работает - ругается так: java.lang.AbstractMethodError: com.microsoft.jdbc.base.BaseCallableStatement.setString(Ljava/lang/String;Ljava/lang/String;)V at DB.ExecStoredProc(DB.java:195) в самой хранимой процедуре у меня 8 параметров ВХОДНЫХ: CREATE proc dbo.SelEmployees @strOrder char(100) = ' Office', @office int = -1, @dept int = -1, @position int = -1, @workgroup char(50) ='', @discipline char(50) ='', @status int = -1, @my_select varchar(1000) = '' подскажите, плиз, как мне сделать вызывающий метод, чтоб я мог посылать избирательно (или все сразу 8) IN параметров в процедуру и получать результат. Кстати, я проверил на примере простой процедуры с единственным входным параметром если передать так, то срабатывает cs.setFloat(1,1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2004, 21:34 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=829&tid=2153368]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 333ms |

| 0 / 0 |
