Мой результирующий набор возвращает значения, но он не сохраняет значения в строку, почему?


Я новичок в программировании, я прошу быть добрым, а также прошу вас уведомить меня, если в моем коде есть какие-либо другие ошибки.

Вчера этот код работал нормально, сегодня я обновил некоторые значения в базе данных, и теперь он не работает. при отладке я обнаружил, что 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 ;
    }

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

   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:com.mysql.jdbc.JDBC4ResultSet@c4728f

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

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 в каком 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)
3 2

3 ответа:

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

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

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

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

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

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

Вам нужно дать псевдоним для 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);
}