2017-01-25 13 views
0

SQLYogには、1つの列が200の長さのvarchar制限であるテーブルがあります。 挿入のために以下のメソッドを記述しましたが、コードをテストするときに、 "Name"列がDBのデータで満たされていません。jdbcを使用したスプリングインサート

@Override 
public void insert(final List<InfoRow> rows) { 
    String sql = "INSERT INTO info_table (ID, NAME, AGE) VALUES (?, SUBSTRING(?, 0, 200), ?)"; 

    jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { 

     @Override 
     public void setValues(PreparedStatement ps, int i) 
       throws SQLException { 
      InfoRow row= rows.get(i); 
      ps.setInt(1, (int) row.getId()); 
      ps.setString(2, row.getName()); 
      ps.setInt(3,(int) row.getAge()); 
     } 

     @Override 
     public int getBatchSize() { 
      return rows.size(); 
     } 
    }); 

} 

挿入時に「名前」のサイズを検証する正しい方法は何ですか?

ありがとうございます!

答えて

0

MySQLの部分文字列式(これはsqlyogタグに基づく推測)は1ベースであり、0ベースではありません。これを代わりに試してください:

一般的に、私はデータベースレイヤーから検証ロジックを取り除き、アプリケーションレイヤーの「入力不良」を処理します。これにより、データが欠落/切り詰められるという事実を記録することができます。

しかし、この方法は問題ありません。

+0

ありがとうございます。作品! – userit1985

0

入力を検証する正しい方法は、ここで説明しているように、モデルレイヤではなくサービスレイヤです。 DAOは、永続データが検証されないようにするだけの責任があります。

insert(List<InfoRow>);メソッドを呼び出すサービスが必要です。確認が必要です。

関連する問題