2016-06-17 4 views
1

を解析しますが、1を見つけることができない内部エラーが発生しました...私はます。java.sql.SQLException:私は解決策を探しています今、ほぼ2時間のコール可能文のメタデータ(欠落しているパラメータの型)

このエラーが発生し、どこから来ているのかわかりません。私は狂ってしまいます。みんな助けてくれますか?

エラー:

ます。java.sql.SQLException:コール可能文 メタデータ(欠落しているパラメータのタイプ)

そして、それはから来ているコードの一部を解析する内部エラー:

public char checkMap(int x, int y) { 
     char c = ' '; 

     try { 
      DAOConnection co = new DAOConnection(DBConnection.getInstance().getConnection()); 

      final String sql = "{call Selectlvl1(?,?)}"; 
      final CallableStatement call = co.getConnection().prepareCall("{call Selectlvl1(?,?)}"); 
      call.setInt(x, x); 
      call.setInt(y, y); 
      call.execute(); 
      final ResultSet resultSet = call.getResultSet(); 
      c = resultSet.getString("symbol").charAt(0); 

     } catch (SQLException se) { 
      // Handle errors for JDBC 
      se.printStackTrace(); 
     } catch (Exception e) { 
      // Handle errors for Class.forName 
      e.printStackTrace(); 

     } 
     return c; 

    } 

編集:ちょうどあなたが知っているように、私はいくつかのテストを運転しており、ラインはエラーca は、私は "CallableStatement"です。

EDIT 2:SQLプロシージャ:

LorannProject.level1 xから選択したシンボル(p_x INT(3)、p_y INT IN(3))rootlocalhost @ PROCEDURE Selectlvl1 = DEFINERをCREATE = p_x & & y = p_y;

ザ・スタックトレース(その一部):

ます。java.sql.SQLException:空の結果セット上の不正な操作。 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)at com.mysql.jdbc.SQLError.createSQLException(SQLError。 java:885) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:790)at com.mysql.jdbc.ResultSetImpl。 getStringInternal(ResultSetImpl.java:5240)com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5163)で com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5202)で model.DAOConnectionで 。 checkMap(DAOConnection.java:24) モデル。モデル.getMap1(Model.java:41)

今、call.setInt()を変更した後、エラーは "空の結果セットで不正な操作"になっています。

EDIT 3:空の結果セット上の不正操作:

ます。java.sql.SQLException:ちょうどいくつかのニュースを追加し、私は今、別のエラーを持っています。

は、私はそれがこの行から来ている(かなり確信している)と思う:私は「シンボル」と呼ばれるだけの列から最初の文字を取るしようとしています

c = resultSet.getString("symbol").charAt(0); 

この行が右であれば、私は知りません。

+1

をおそらく意味: 'call.setInt(1、x)は;'と 'call.setInt(2、y)の;'。ステートメントの各プレースホルダに適切なインデックスを提供する必要があります。 – Berger

+1

スタックトレースとストアドプロシージャのシグネチャを送信してください。 –

+0

ちょうどそれを追加しました。 @Berger:エラーコードは変更されますが、まだ動作しません。ありがとよ ! – Prototype

答えて

0

たぶん、あなたは試みることができる:

if (resultSet.next()) { 
    c = resultSet.getString("symbol").charAt(0); 
} 
+0

これで、いくつかのスプライトが表示されましたが、すべてではありません。私はまだ同じエラーがある、それは空の結果を扱っている。 – Prototype

+0

@Prototype char cを初期化するときに、空白の代わりに ' - 'に設定するだけです。そうすれば、if(resultSet.next()が空){c = ' - '}あなたはifステートメントに入りません、そして、cは ' - ' –

+0

あなたは 'else'ブロックを単純に追加することもできます – Nico

関連する問題