2016-06-24 2 views
0

У меня есть следующие сомнения: могу ли я каким-то образом использовать условный тернарный оператор в конкатенацию строк?Могу ли я использовать условный тернарный оператор в конкатенацию строк?

Я пытаюсь сделать что-то вроде этого:

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") 

Кроме того, вы должны убедиться, что qsTirPF.getPolizzaid() возвращает строку

+0

qsTirPF.getPolizzaid() может быть любым, что он хочет. Если это объект (а не примитив), будет вызван toString(). – Zava

+0

Да. Я просто скажу ему, чтобы проверить, что он возвращает. У него может быть ошибка в toString(), если он переоценит ее. Но нормально, ему просто нужны скобки – DamienB

+0

, вы правы, говоря это. – Zava

-6

Вы не должны цитировать «нулевой»!

Вместо того чтобы писать

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