2016-04-30 18 views
1

apache-derbyに接続した私の最初のプロジェクトを作成したいと思います。java.lang.ClassCastException:org.apache.derby.client.am.ClientPreparedStatement42をorg.apache.derby.iapi.sql.PreparedStatementにキャストできません

public Circle getCircle(int circleId){ 

    Connection conn = null; 

    try { 

    conn = dataSource.getConnection(); 

    **PreparedStatement ps =  (PreparedStatement) conn.prepareStatement("SELECT * FROM circle where id = ?"); 
    ((java.sql.PreparedStatement) ps).setInt(1,circleId); 
    Circle circle = null; 
    ResultSet rs = ((java.sql.PreparedStatement) ps).executeQuery(); 
    if(rs.next()){ 
     circle = new Circle(circleId,rs.getString("name")); 
     }** 
rs.close(); 
    ((Connection) ps).close(); 
return circle; 
} 
catch (Exception e) { 
    throw new RuntimeException(e); 
    } 
finally{ 
    try{ 
    conn.close(); 
    }catch (SQLException e){} 
} 
    } 


public DataSource getDataSource() { 
    return dataSource; 
} 
public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 

}

データソースは、私の.xmlファイル内のBeanとして定義されます。私は準備されたステートメントを使用して接続エラーを持って春を使用するかどうか:java.lang.ClassCastExceptionが::スレッド「メイン」java.lang.RuntimeExceptionで

例外をorg.apache.derby.client.am.ClientPreparedStatement42にすることはできませんjava.langで:によって引き起こさJdbcDemo.JdbcDemo.main(JdbcDemo.java:17) でJdbcDemo.dao.JdbcDaoImpl.getCircle(JdbcDaoImpl.java:42) でorg.apache.derby.iapi.sql.PreparedStatement にキャスト.ClassCastException:org.apache.derby.client.am.ClientPreparedStatement42をorg.apache.derby.iapi.sql.PreparedStatementにキャストできません JdbcDemo.dao.JdbcDaoImpl.getCircle(JdbcDaoImpl.java:30) ... 1 more

誰かが私を助けることができますか?私は他のクラスを追加することができますが、私はprobemがこのクラスに位置していると思います。私はApache 10.12.1.1を使用しています。ありがとうございました。

答えて

1

PreparedStatementの入力が間違っているようです。あなたのインポートは次のようになります。

import java.sql.PreparedStatement; 

が、これはあなたがここに使用されなければならないものではありません、org.apache.derby.iapi.sql.PreparedStatementのための任意のインポートがあるべきではありません。

あなたはあなたのコード内の任意のキャストは必要ありません。

PreparedStatement ps = conn.prepareStatement("SELECT * FROM circle where id = ?"); 
ps.setInt(1, circleId); 
Circle circle = null; 
ResultSet rs = ps.executeQuery(); 
+0

あなたの答えをありがとうございました。右のインポート後、私は次の問題があります:スレッド "main"の例外java.lang.RuntimeException:java.lang.ClassCastException:org.apache.derby.client.am.ClientPreparedStatement42をjava.sql.Connectionにキャストできません \t JdbcDemo java.lang.ClassCastExceptionが:.dao.JdbcDaoImpl.getCircle(JdbcDaoImpl.java:43)JdbcDemo.JdbcDemo.main(JdbcDemo.java:17) で\tにより引き起こさorg.apache.derby.client.am.ClientPreparedStatement42できませんJdbcDemo.dao.JdbcDaoImpl.getCircle(JdbcDaoImpl.java:39) \t ... 1もっと – sianek

+1

あなたの '((接続)、PS)でのjava.sql.Connection \tにキャストすること.close()'は完全に間違っています。 'ps'は' PreparedStatement'で、 'Connection'ではなく、単に' ps.close() 'を呼び出します。 SQL操作でキャストを行う必要はありません。 –

+0

それは動作します:)ありがとう – sianek

関連する問題