0

バグと思われるものがあります。テキストに一重引用符が含まれるエントリをデータベースに追加できます。

ただし、QueryBuilder を使用して検索すると、xyz のようなテキストに対して、xyz に一重引用符が含まれていると、MySQL が不正な SQL について不平を言うようになります。

自分ですべての文字列を解析する以外に、Ormlite に文字列を「浄化」するために呼び出すことができるメソッドはありますか?

サンプルコードは次のとおりです。

public boolean isDuplicate () {
  QueryBuilder<Company, Long> qb = getDao().queryBuilder() ;
  Where<Company, Long> where = qb.where() ;
     try {
       if (Strings.isValid(name))
           where.like("name", name) ;

        if (Strings.isValid(regNo)) {
           if (Strings.isValid(name))
              where.or() ;

           where.eq("regNo", regNo) ;

           List<Company> res = where.query() ;
           if (res != null && res.size() > 0)
              return true ;
           else
              return false ;
        }
     } catch (SQLException e) {
        GlobalConfig.log(e, true);
     }
     return false ;
  }

会社名に一重引用符が含まれていると、SQL エラーが発生します。

Well Don't Delete Me 2 Please Pte Ltd のデフォルト エントリの作成 [12-07-2013 13:45:42] SQL 構文にエラーがあります。「t Delete Me 2 Please Pte Ltd.」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。OR regNo= 'delete' )' 1 行目

どんな提案でも大歓迎です。

4

1 に答える 1

1

OK、私はこれを理解しました-データベースを照会する SelectArg メソッドを使用する必要があります。

したがって、次のようになります。

  ...
  if (Strings.isValid(name))
     {
     SelectArg arg = new SelectArg () ;   // Added
     arg.setValue (name) ;                / Added
     where.like("name", arg) ;    // Changed
     }

    if (Strings.isValid(regNo))
       {
       if (Strings.isValid(name))
          where.or() ;

       SelectArg arg = new SelectArg () ;     // Added
       arg.setValue (regNo) ;                 // Added
       where.eq("regNo", arg) ;               // Changed

       List<Company> res = where.query() ;

       if (res != null && res.size() > 0)
          return true ;
       else
          return false ;
       ...

私が学んだことは次のとおりです。1 つの SelectArg PER アイテムを使用する必要があります。


グレーへの私の質問は、これをデフォルトの動作にしないのはなぜですか? 挿入または更新すると、それは自動的に行われるように見えます。問題を解決するには、内部クエリ処理の一部となる可能性のあるコード行を追加する必要があります。

私はこの投稿で彼の懸念を理解していますが、デールに同意します. おそらく中途半端な家は、Ormlite がクエリ メソッドのパラメーターをどのように扱うべきかを示すフラグを持つことです。

私は、Ormlite の「プログラム可能な」SQL の柔軟性と単純さに感心しています。ほとんどの場合、Ormlite 関連のコードは簡潔で、理解しやすく、論理的です。これは、必要以上に冗長で、純利益がないと感じるまれなケースです。私の意見です。

于 2013-07-13T04:32:06.107 に答える