1. ホーム
  2. java

[解決済み] JDBCスプリングでBad Sql Grammarの例外が発生する

2022-02-10 22:33:26

質問

私は

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; SQL の文法が正しくありません [select cid, 臨床家コード、パスワード、ファーストネーム、ラストネーム from Clinician where clinician-code= ?]; ネストされた例外は次のとおりです。 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException.MySQLSyntaxErrorException: 不明 カラム 'clinician' が 'フィールドリスト' に含まれています。

以下のコードでエラーが発生しました。スクリーンショットでテーブルを見ることができますが、cidを除いて他の属性はすべてVARCHAR(45)です。

行マッパークラス

public class CClinicianRowMapper implements RowMapper {

@Override
public Object mapRow(ResultSet rs, int line) throws SQLException {
    CClinicianResultSetExtractor extractor = new CClinicianResultSetExtractor();
    return extractor.extractData(rs);
}

}

結果抽出器クラス public class CClinicianResultSetExtractor implements ResultSetExtractor {.

  @Override
  public Object extractData(ResultSet rs) throws SQLException {
    CClinician clinician = new CClinician();
    clinician.setCid(rs.getLong("cid"));
    clinician.setClinicianCode(rs.getString("clinician-code"));
    clinician.setPassword(rs.getString("password"));
    clinician.setFirstName(rs.getString("first-name"));
    return clinician;
  }

}

テーブルからデータを選択するためのクラス

public List<CClinician> findClinician(CClinician _clinician) {
    // TODO Auto-generated method stub
    JdbcTemplate select = new JdbcTemplate(dataSource);
    try
    {
    return select.query("select cid, clinician-code, password, first-name, last-name from Clinician where clinician-code= ?",
            new Object[] {_clinician.getClinicianCode()}, new CClinicianRowMapper());

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    return null;
}

解決方法は?

列名にダッシュを使用するには、バックティックでエスケープする必要があります。

"SELECT cid, `clinician-code`, password, `first-name`, `last-name` 
     FROM Clinician 
     WHERE `clinician-code` = ?"