SQL クエリに問題があります。問題は、企業名の外部データベースにクエリを実行していて、一部の名前が「マーサの」のようになっていることです (アポストロフィを含む)。Android アプリからクエリを実行しているため、クエリ文字列は次のようになります。
String query = "Select * from Advertiser where AdvName= '" + name + "';";
とにかく、クエリのアポストロフィを無視または変更できますか?
前もって感謝します!
これが、パラメーター化されたクエリを実行するときに常に準備済みステートメントを使用する必要がある理由の 1 つです。
String sql = "select * from Advertiser where AdvName = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
JDBC ドライバーは引用符をエスケープします。これにより、SQL インジェクション攻撃も防止されます。
プリペアド ステートメントには、同じクエリを異なるパラメーターで複数回実行する必要がある場合にも、パフォーマンス上の利点があります。
JDBC チュートリアルで準備済みステートメントの詳細を参照してください。
補足:;
クエリの最後に a を付けないでください。
PLSQL''
では、入力フィールドで double を使用する必要があります。つまり、Martha's => Martha''s:
String query = "Select * from Advertiser where AdvName= 'Martha''s';";
重要な注意事項:
セキュリティ上の理由から (SQL インジェクションを避けるため)、通常の方法でクエリを作成することは避け、準備済みステートメントを使用して、次のようにパラメーターを設定する必要があります。
String query = "Select * from Advertiser where AdvName= ? ";
PreparedStatement st = conn.prepareStatement(query);
st.setString(1,name);