【问题标题】:My ResultSet is returning values but it is not storing values to string, why?我的 ResultSet 正在返回值,但它没有将值存储到字符串,为什么?
【发布时间】:2016-04-23 09:09:50
【问题描述】:

我是一个编程初学者,如果我的代码有任何其他错误,我要求你好心,也请你通知我。

这段代码昨天运行良好,我今天更新了数据库中的一些值,现在它无法运行。在调试时我发现结果集正在返回值,但现在它失败存储在我声明的字符串中

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 ;
    }

在执行程序时,这个函数是从另一个页面调用的,我的 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)

【问题讨论】:

  • @all,程序看起来很长,但我的错误很简单且具体。请不要假设这是一件大事来关闭此页面!
  • 我已经用“选择总和(优先级)作为总计”更新了我的代码,结果仍然相同:(
  • MySql数据库中优先级定义为int(2)
  • 您好,我仍然期待您的帮助!我一整天都在这上面。请...
  • 请提供您的表格和示例数据的 DDL,以及预期的输出。您可能想在sqlfiddle.com 等处设置一个示例。

标签: java mysql apache tomcat6


【解决方案1】:

在您的示例查询中,您有

... where latitude &gt;=9.993839 and ...

这表明您的表格中的字段是 numeric 类型的。但是,在您的代码中,您使用getString() 来读取值,更重要的是,您使用pse.setString(1, Eb_SWLat); 来设置参数值。

您应该改用getFloat()setFloat(),因为MySQL 将很难尝试将浮点列与字符串参数进行比较。

【讨论】:

  • 在我的MySql中,经纬度定义为varchar(20)。所以这不是问题。
  • 我按照你说的做了修改。
  • 当我删除“纬度 >=?和纬度 =?和经度
  • 一天结束时找到了解决方案。我将字符串更改为浮动,现在它工作正常。谢谢你:)
  • 一天结束时,我意识到了一个事实,每个人都应该明白 String 无法在 JAVA 中处理位置坐标。您如何在 mysql 中定义位置列并不重要。在 java 中使用 float :)
【解决方案2】:

更改您的查询以使用别名字段名称,如下所示

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

【讨论】:

  • 仍然返回 null
【解决方案3】:

您需要为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);
}   

【讨论】:

  • 是的,一开始也是这么想的。但是,不存在列上的getString() 应该给出SQLException,而不是返回null,它不在OP 的代码中。
  • @Anoop LL 上述方法不起作用,sp 的值在程序中初始化为 null。所以我尝试直接打印它,但它仍然为空:-'System.out.println("South priority:"+rsSouth.getString("total"));'
  • @MohamedAshref 我已经更新了答案,试试这个。删除别名并给出 rsSouth.getLong(1)
  • 然后我试了一下,sp=String.valueOf(rsSouth.getInt(1));仍然得到结果为 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多