2016-06-24 8 views
0

私は以下の疑問を持っています:何らかの形で条件付き3進演算子を文字列連結に使用できますか?私はこのような何かをしようとしています条件付き三項演算子を文字列連結に使用できますか?

は:

String sql = "insert into TirConsolidatoPolizzaFondo " 
         + "(Polizzaid, FondoID, isQuadraturaOk, ReteVendita, CodiceConferimento, PercentualeRendimentoDaInizioGestione, " 
         + "DataInizioGestione, PercentualeRendimentoDaInizioAnno, DataInizioAnno, PercentualeRendimentoDaInizioTrimestre, " 
         + "DataInizioTrimestre, DataCalcoloBF, ValoreNavBF, DataRiferimentoNavBF, ControvaloreFinaleBF, ValoreNavPUC, " 
         + "DataRiferimentoNavPUC, ControvaloreFinalePUC, NumeroQuotePUC, DeltaControvaloreFinale, TIMESTAMP, " 
         + "DataValutaUltimaOperazione, MsgPercentualeRendimentoDaInizioAnno, MsgPercentualeRendimentoDaInizioGestione, " 
         + "MsgPercentualeRendimentoDaInizioTrimestre, isTirAnomalo, CodiceLineaBF) " 
         + "values" 
         + "(" + 



         qsTirPF.getPolizzaid() != null ? qsTirPF.getPolizzaid() : "null"; 

最初の文字列のトランクに私がして評価値を連結することを意味している:

qsTirPF.getPolizzaid() != null ? qsTirPF.getPolizzaid() : "null"; 

が、Eclipseは私にこのエラーに署名:

Type mismatch: cannot convert from Object&Comparable<?>&Serializable to String 

なぜですか?なにが問題ですか?この問題を解決するにはどうすればよいですか?

+0

三項式のまわりにカッコを入れてみましたか? '... +(qsTirPF.getPolizzaid()!= null?qsTirPF.getPolizzaid():" null ");' –

+2

また、SQLクエリ引数を提供するために文字列連結を使用したいですか?通常、Bobby Tablesを避けるための好ましい方法は、PreparedStatementを使用し、その 'setXYZ'メソッドを使うことです。 – Pshemo

+2

メモとして、これは2016です。潜在的なSQLインジェクションを避けるために、あなた自身に好意を持ち、準備された文を使用してください –

答えて

4

まず、あなたは、ブラケットの中に入れ、あなたの三条件を置く必要があります。

(qsTirPF.getPolizzaid() != null ? qsTirPF.getPolizzaid() : "null") 

さらに、あなたは、あなたが「ヌル」を引用してはならない文字列

+0

qsTirPF.getPolizzaid()は、彼が望むものであれば何でも構いません。オブジェクト(プリミティブではない)の場合、toString()が呼び出されます。 – Zava

+0

はい。私は彼に何が戻ってきているかを確認するように伝えます。彼がそれを上書きすると、toString()にエラーが発生する可能性があります。しかし、正常に彼はちょうど括弧が必要 – DamienB

+0

あなたはそれを言っている。 – Zava

-6

を返してqsTirPF.getPolizzaid()ことを確認する必要があります!代わりに、書き込みの

qsTirPF.getPolizzaid() != null ? qsTirPF.getPolizzaid() : "null"; 

qsTirPF.getPolizzaid() != null ? qsTirPF.getPolizzaid() : null; 
1

を書くあなたは括弧が必要てみてください。

String sql = "insert into TirConsolidatoPolizzaFondo " 
    + "(Polizzaid, FondoID, isQuadraturaOk, ReteVendita, CodiceConferimento, PercentualeRendimentoDaInizioGestione, " 
    + "DataInizioGestione, PercentualeRendimentoDaInizioAnno, DataInizioAnno, PercentualeRendimentoDaInizioTrimestre, " 
    + "DataInizioTrimestre, DataCalcoloBF, ValoreNavBF, DataRiferimentoNavBF, ControvaloreFinaleBF, ValoreNavPUC, " 
    + "DataRiferimentoNavPUC, ControvaloreFinalePUC, NumeroQuotePUC, DeltaControvaloreFinale, TIMESTAMP, " 
    + "DataValutaUltimaOperazione, MsgPercentualeRendimentoDaInizioAnno, MsgPercentualeRendimentoDaInizioGestione, " 
    + "MsgPercentualeRendimentoDaInizioTrimestre, isTirAnomalo, CodiceLineaBF) " 
    + "values" 
    + "(" + (qsTirPF.getPolizzaid() != null ? qsTirPF.getPolizzaid() : "null"); 
1

あなたは結果と連結するコンパイラを伝えるために括弧を使用することができますあなたの条件付き三項演算子:

String sql = "insert into TirConsolidatoPolizzaFondo " 
        + ... 
        + ((getPolizzaid() != null)? qsTirPF.getPolizzaid() : "null"); 

これは動作するはずです。

PS:+記号を使用する代わりに、StringBuilderを使用してクエリを作成できます。より効率的です。

+0

Javaコンパイラは、これをStringBuilderを使用してコードに変換します。クラスファイルを逆アセンブルすると、それが表示されます。 –

+0

すべての文字列が静的な場合です。条件付き連結がある場合、コンパイラはこのコードを最適化します。 – Zava

関連する問題