2014-04-04 39 views
8

Vorrei restituire un valore booleano utilizzando in questo metodo:restituire un valore booleano - jdbcTemplate

public Boolean isSizeOk(String transactionId){ 
    String sqlQuery = "SELECT true FROM customer_pool WHERE id = "+ transactionID + " AND level = 13)"; 

//The next line is the problem. 
    //If I am returning a Boolean List, I can write 

    List <Boolean> sizeResult = jdbcTemplate.queryForList(sqlQuery, Boolean.class, transactionId); 

    //But since I only want a boolean value, what will the statement be? 
    Boolean sizeResult = jdbcTemplate......? 

    return sizeResult; 
} 

aiuto gentile. Grazie.

+0

Grazie mille ... le vostre soluzioni sono sia a destra. Ora non so a chi assegnare la risposta corretta a :). Apprezzo il vostro aiuto! – bdfios

risposta

16

Se si vuole scrivere un metodo che verifica che esiste un record nel database è possibile utilizzare il seguente codice:

Integer cnt = jdbcTemplate.queryForObject(
    "SELECT count(*) FROM customer_pool WHERE id = ? AND level = 13)", Integer.class, id); 
return cnt != null && cnt > 0 
+0

Ok, sembra ok. Ma cosa restituirà se il disco non esiste? – bdfios

+0

la query restituirà 0 e "cnt! = Null && cnt> 0" restituirà false – kostya

+0

dove si trova? essere risolto? – orbfish

0

Caso 1: Nel caso in cui si sta tornando booleano: Basta controllare la dimensione di sizeResult Lista , se la dimensione è maggiore di 0 ritorno vero altro tornare falso.

Caso 2: Se si restituisce la lista booleana quindi tipo di ritorno deve essere un valore booleano List.You deve scrivere il metodo:

public List<Boolean> isSizeOk(String transactionId, int sizeLimit){ 
String sqlQuery = "SELECT true FROM customer_pool WHERE id = ? AND level = 13)"; 


List <Boolean> sizeResult = jdbcTemplate.queryForList(sqlQuery, Boolean.class, transactionId); 

Boolean sizeResult = jdbcTemplate......? 

return sizeResult; 

}

+0

Grazie Akash. Sì, funziona davvero quando restituisco il valore come elenco booleano, ma non c'è motivo di restituirlo come elenco poiché so che la risposta che desidero è VERO o FALSO. Ecco perché voglio un modo corretto per restituirlo come booleano, non come elenco booleano. – bdfios

+0

Quindi è possibile utilizzare la soluzione Case 1. –

4

che dire

012.
// Change query accordingly 
String query = "SELECT 1 FROM " + tableName + " WHERE " + idColumnName + " = ? LIMIT 1"; 
try { 
    jdbcTemplate.queryForObject(query, new Object[]{id}, Long.class); 
    return true; 
} catch (EmptyResultDataAccessException e) { 
    return false; 
} 
4

Il conteggio delle righe in SQL al fine di ottenere informazioni semplici sulla non-emptiness del risultato potrebbe essere un inutile sovradimensionamento, è sufficiente chiedere il set di risultati per la prima riga e la fine. Per query semplici per chiave primaria o altro indice, le prestazioni potrebbero essere simili, tuttavia, per query complesse o query di scansione di tabelle complete potrebbe essere lento. In primavera Io preferisco semplice metodo di utilità

public boolean exists(String sql, Object... args) { 
    boolean result = query(sql, args, new ResultSetExtractor<Boolean>() { 
     @Override 
     public Boolean extractData(ResultSet rs) throws SQLException,DataAccessException { 
      boolean result = rs.next(); 
      return result; 
     } 
    }); 
    return result; 
} 

(Google "sql esiste vs conteggio" per ulteriori informazioni.)

+1

Penso che sia degno ricordare che in Java 8 questo può essere scritto come "return jdbcTemplate.query (searchQuery, args, ResultSet :: next)" –

Problemi correlati