2016-05-28 5 views
-1
public double getPrice(String name) throws SQLException { 
    TechnoRepository repo = TechnoRepository.getInstance(); 
    Statement st = conn.createStatement(); 
    ResultSet rs = st.executeQuery("select price from products where name = '?';"); 
    if(rs.next()) 
     return rs.getDouble("price"); 
    return 0; 
} 

Основной класс:не получает правильное двойное значение

TechnoRepository repo = TechnoRepository.getInstance(); 
double price = repo.getPrice("water"); 
System.out.printf("%.2f",price); 

Результат 0,0, а не право один

+1

Исходный код не был скомпилирован ('цена' не была объявлена). Боковое примечание: 'double' не может хранить определенные суммы, например '.1', -exactly-, что может заставить бухгалтеров нервничать. Вы должны хранить что-нибудь связанное с деньгами в «BigDecimal» (Java) и 'decimal' /' numeric' (SQL). –

ответ

3

Глядишь, пытается сделать PreparedStatement, следовательно, знак вопроса в SQL код.

Однако, поскольку вы создаете только Statement, сделайте запрос в таблице products, где имя равно букву ?. И поскольку ваша таблица, по-видимому, не содержит такого символа, данных в ResultSet нет.

public double getPrice(String name) throws SQLException { 
     String sql = "select price from products where name = ?;"; 
     PreparedStatement prepStmt = connection.prepareStatement(sql); 
     prepStmt.setString(1, name); 

     ResultSet resultSet = prepStmt.executeQuery(); 

     double price = 0.0; 
     if(rs.next()) 
      price = rs.getDouble("price"); 

     return price; 
} 

где prepStmt.setString(1, name); где вы замените на первую попавшуюся ? с, в этом случае name.

+0

** THANK ** вы за то, что знаете правильный способ сделать это. –

+0

Это должен быть принятый ответ! –

Смежные вопросы