私は呼び出し可能なステートメントを使用し、mysqlの "call"というスキーマの関数をjavaで呼び出します。それはうまく動作します。jdbcではmysql関数を呼び出すための呼び出しは、mysqlではなく、
しかし、私のSQLで私が書く場合:
call myFunction(); (in this case :call getNumberOfIdeasDB();)
それは私が手に文句を言わない仕事:PROCEDURE ... doesntが存在します。
私はそれがJavaでは動作しますが、MySQLでは動作しません。理由を理解するのを助けてください。
ここでも私の機能はJavaであり、私はそれが適切ではないと信じています。
public static double getNumberOfIdeasDB() {
Connection co = riverManager.getConnection("jdbc:...");
CallableStatement ps = co.prepareCall("{?= call getNumberOfIdeasThisWeek()}"); //10
ps.registerOutParameter(1, java.sql.Types.DOUBLE);
ps.execute();
return ps.getDouble(1);
}
それはのtry/catchの内側にあり、正常に動作し、その単語が「コール」なぜここに私は知らないJDBCエスケープは(それがJDBC仕様で定義されている)である
MySQLでは、ストアド関数を 'CALL'しません。 SELECT myFunction();(スカラを返します)またはDO DO myFunction();(voidコンテキスト、戻り値は破棄されます)。 JDBCは、いつものように、一見無作為に作られた方法で処理しています...戻り値を '? = 'は同じように無意味です。 –
@ Michael-sqlbot私は同意しません。 JDBC(ODBC iircからコピーされた)で指定され、ストアドプロシージャまたは同様のオブジェクトを実行するデータベースに依存しない方法を持ちます。 '?= ..'は、単一の出力値をバインドすることを許可することです。 –
あなたが正しいと確信しています、@ MarkRotteveel。私はいくらか誤った指示をしていました。 "私は疲れていて、1時間前に眠っていたはずだったはずです"と怒っています。事実とレベルに応じた回答に感謝します。 –