2016-06-24 4 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을 override하면 toString()에 에러가 생길 수 있습니다. 하지만 normaly는 단지 괄호가 필요합니다. – DamienB

+0

당신 말이 맞습니다. – Zava

-6

당신은 "널 (null)"를 인용하지 않아야을 반환하는지 확인해야합니다! 대신 글을 쓰는

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

이렇게하면됩니다.

추 신 : + 기호를 사용하는 대신 StringBuilder를 사용하여 쿼리를 작성할 수 있습니다. 더 효율적입니다.

+0

자바 컴파일러는 어쨌든 StringBuilder를 사용하여이 코드를 코드로 변환합니다. 클래스 파일을 디스 어셈블하면이를 볼 수 있습니다. –

+0

모든 문자열이 고정되어있는 경우입니다. 조건부 연결이있을 때 컴파일러에서이 코드를 최적화 할 것이라고 확신 할 수 없습니다. – Zava

관련 문제