2017-12-13 2 views
0
cstm=conn.prepareCall("{call ekleSP}"); 
cstm.setInt(1, Integer.parseInt(tb_1.getText())); 
cstm.setString(2, tb_2.getText()); 
cstm.setString(3, tb_3.getText()); 
cstm.setString(4, tb_4.getText()); 
cstm.setString(5, tb_5.getText()); 
cstm.execute(); 
Ekleはそれがこのストアドプロシージャを使用して、ID、名前、姓、PHONENUMBER、性別およびIMように書き加えること

は、私はSQL例外を取得しています。パラメータのインデックスをエラー(0 1>パラメータの数、)範囲外の

CREATE DEFINER=`root`@`localhost` PROCEDURE `ekleSP`(IN id INT(11),IN 
uye_adi VarChar(45), 
IN uye_soyadi VarChar(45), IN uye_tel VarChar(11),IN cinsiyet VarChar(5)) 
BEGIN 
INSERT into tbluyeler(id,uye_adi,uye_soyadi,uye_tel,cinsiyet) values 
('?','?','?','?','?'); 
END 
+1

私はJavaがストアドプロシージャを処理する方法に慣れていません。あなたは '' {ekleSP(?、?、?、?、?)} ''のようなものを試しましたか? *( '?'は通常はパラメータを指定する必要があります)*また、偶然にも、ストアドプロシージャは 'tbluyeler'に複数の疑問符を挿入するだけです。パラメータを完全に無視します。 – Uueerdo

+0

私は@Uueerdoに同意します。パラメータ値を設定する前に、パラメータ付きプロシージャを呼び出す必要があります。また、プロシージャ内でINSERTを間違って実行しています。 PREPAREとEXECUTEを使用していない場合は、 '?'を使用しないでください。 'PREPARE'と' EXECUTE'を使っていても '? 'を引用符で囲まないでください。 –

答えて

0

私はあなたのすべての人は私はこのような私の電話を固定何を意味するか理解:

cstm=conn.prepareCall("{call ekleSP(?,?,?,?,?)}"); 

と私は

0をtbluyelerするテキストフィールドから何を得る送信するには、このように私の手順を固定しました
CREATE DEFINER=`root`@`localhost` PROCEDURE `ekleSP`(IN id INT(11),IN 
uye_adi VarChar(45), 
IN uye_soyadi VarChar(45), IN uye_tel VarChar(11),IN uye_cinsiyet 
VarChar(5)) 
BEGIN 
INSERT into tbluyeler(id,uye_adi,uye_soyadi,uye_tel,uye_cinsiyet) values 
(id,uye_adi,uye_soyadi,uye_tel,uye_cinsiyet); 
END 
+0

サイドノートとして。私は、格納されたproc params(および変数識別子の宣言)がテーブルフィールドの名前と重複している量を最小限に抑えることは、通常は良い考えです。この場合、(可読性以外の)この問題は発生しませんが、他の場所で問題を特定するのが難しくなることが知られています(例:https://stackoverflow.com/questions/47479443/mysql-group-by-not-期待通りに働く/ 47537691#47537691)。 – Uueerdo

関連する問題