2016-01-18 2 views
2

Я начинаю программировать, я прошу быть добрым, а также прошу вас уведомить меня, если в моем коде есть какие-то ошибки.My ResultSet возвращает значения, но не сохраняет значения в строке, почему?

Этот код работал хорошо вчера, я обновил некоторые значения в базе данных сегодня и теперь он не работает. отладки я обнаружил, что ResultSet возвращает значения, но теперь она не хранится в строке, что я объявил

public int startpgm(String xyz) { 

    int i=0; 

    String sp  = null; 

    String Sb_SWLat = null; 
    String Sb_NELat = null; 
    String Sb_SWLon = null; 
    String Sb_NELon = null; 

    String qrySb = "select SW_lat, SW_lon, NE_lat, NE_lon from tbl_zones where zone='south'"; 

    try { 
     Statement stmt = (Statement) conn.createStatement(); 

    ResultSet Sb=stmt.executeQuery(qrySb); 
    if(Sb.next()){ 

     Sb_SWLat=Sb.getString("SW_lat"); 
     Sb_NELat=Sb.getString("NE_lat"); 
     Sb_SWLon=Sb.getString("SW_lon");    
     Sb_NELon=Sb.getString("NE_lon"); 

    } 
    System.out.println("Sb_SWLat:"+Sb_SWLat); 
    System.out.println("Sb_NELat:"+Sb_NELat); 
    System.out.println("Sb_SWLon:"+Sb_SWLon); 
    System.out.println("Sb_NELon:"+Sb_NELon); 


    String qrysouth = "select priority from tbl_vcl where latitude >=? and latitude <=? and longitude >=? and longitude<=?"; 

    PreparedStatement pss = conn.prepareStatement(qrysouth); 
    pss.setString(1, Sb_SWLat); 
    pss.setString(2, Sb_NELat); 
    pss.setString(3, Sb_SWLon); 
    pss.setString(4, Sb_NELon); 

    ResultSet rsSouth= pss.executeQuery(); 
    System.out.println("South ResultSet:"+rsSouth); 

    if(rsSouth.next()){ 

    sp=rsSouth.getString("priority"); 
    System.out.println("South priority:"+sp); 

    } 
    i=1; 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
     return i ; 
    } 

И на выполнение программы, эта функция вызывается из другой страницы, мое затмение консоли: -

Jan 18, 2016 6:35:58 PM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/53 config=null 
Sb_SWLat: 9.993839 
Sb_NELat: 9.994127 
Sb_SWLon: 76.357213 
Sb_NELon: 76.357329 
Jan 18, 2016 6:35:58 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 1018 ms 
South ResultSet:[email protected] 

Когда я попытался запрос вручную путем ввода значения в тузде консоли: -

mysql> select sum(priority) from tbl_vcl where latitude >=9.993839 and latitude <=9.994127 and longitude >=76.357213 and longitude<=76.357329; 
+---------------+ 
| sum(priority) | 
+---------------+ 
|    3 | 
+---------------+ 

rsSouth != null и почему я получаю sp=null в ш hich sp=rsSouth.getString("sum(priority)")? Я прошу вас исправить меня, если есть какие-либо другие ошибки в моей программе или другой лучший метод для повышения эффективности. Заранее спасибо.

DDL моего стола:

mysql> desc tbl_vcl; 
+-------------+-------------+------+-----+-------------------+-----------------------------+ 
| Field  | Type  | Null | Key | Default   | Extra      | 
+-------------+-------------+------+-----+-------------------+-----------------------------+ 
| pk_vcl_id | int(11)  | NO | PRI | NULL    | auto_increment    | 
| vehicle_nm | varchar(25) | YES |  | NULL    |        | 
| reg_nu  | varchar(15) | YES |  | NULL    |        | 
| officer_mob | varchar(20) | YES |  | NULL    |        | 
| active  | int(11)  | YES |  | NULL    |        | 
| updated_at | timestamp | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| latitude | varchar(20) | YES |  | NULL    |        | 
| longitude | varchar(20) | YES |  | NULL    |        | 
| priority | varchar(2) | YES |  | NULL    |        | 
+-------------+-------------+------+-----+-------------------+-----------------------------+ 
9 rows in set (0.01 sec) 
+0

@all, программа выглядит долго, но моя ошибка проста и специфична. Пожалуйста, не закрывайте эту страницу, предполагая, что это что-то большое! –

+0

Я обновил свой код с помощью «select sum (priority) как итоговый« все тот же результат :( –

+0

Приоритет определяется как int (2) в базе данных MySql –

ответ

1

В вашем примере запрос, у вас есть

... where latitude >=9.993839 and ...

Это указывает на то, что поля в вашей таблице имеют числовой типа. Однако в вашем коде вы используете getString() для чтения значений и, что более важно, вы используете pse.setString(1, Eb_SWLat); для установки значений параметров.

Вместо этого вы должны использовать getFloat() и setFloat(), потому что MySQL будет пытаться сравнить столбцы float со строковыми параметрами.

+1

в моем MySql, широта и долгота определяется как varchar (20). Так что это не проблема. –

+0

Я сделал модификации, как вы сказали. –

+0

, когда я удалил «где широта> =? И широта <=? И долгота> =? И долгота <=?" из запроса он работает нормально, я могу получить «приоритет» –

0

Вы должны дать псевдоним для sum(priority)

String qrysouth = "select sum(priority) from tbl_vcl where latitude >=? and latitude <=? and longitude >=? and longitude<=?"; 

PreparedStatement pss = conn.prepareStatement(qrysouth); 
pss.setString(1, Sb_SWLat); 
pss.setString(2, Sb_NELat); 
pss.setString(3, Sb_SWLon); 
pss.setString(4, Sb_NELon); 

ResultSet rsSouth= pss.executeQuery(); 

if(rsSouth.next()){ 
    sp=String.valueOf(rsSouth.getLong(1);); 
    System.out.println("South priority:"+sp); 
} 
+0

Да, сначала так думал. Однако' getString() 'на не- существующий столбец должен дайте 'SQLException' вместо того, чтобы возвращать« null », чего нет в коде OP. – JimmyB

+0

@Anoop LL выше метод не работает, значение sp инициируется как нуль в программе.Поэтому я попробовал распечатать его напрямую, и все же он дает null для: - \t \t \t 'System.out.println («Южный приоритет:» + rsSouth.getString («total»)); –

+0

@MohamedAshref Я обновил ответ, просто попробуйте это. Убрал псевдоним и дал rsSouth.getLong (1) –

0

Изменить запрос, чтобы использовать имена псевдонимов полей, как показано ниже

select sum(priority) as total ..... 
+0

, все еще возвращающий нуль –

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

  • Нет связанных вопросов^_^