我的 ResultSet 正在返回值,但它没有将值存储到字符串,为什么?
My ResultSet is returning values but it is not storing values to string, why?
我是编程的初学者,如果我的代码中有任何其他错误,请多多包涵,并请您通知我。
这段代码昨天运行良好,我今天更新了数据库中的一些值,但现在无法运行。在调试时我发现结果集正在返回值,但现在它无法存储在我声明的字符串中
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=rsSouth.getString("sum(priority)")
中得到 sp=null
?如果我的程序中有任何其他错误或其他提高效率的最佳方法,我请求您纠正我。提前致谢。
我的 table 的 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)
您需要为 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);
}
更改您的查询以使用如下别名字段名称
select sum(priority) as total .....
在您的示例查询中,您有
... where latitude >=9.993839 and ...
这表明您的 table 中的字段属于 numeric 类型。但是,在您的代码中,您使用 getString()
来读取值,更重要的是,您使用 pse.setString(1, Eb_SWLat);
来设置参数值。
您应该改用 getFloat()
和 setFloat()
,因为 MySQL 将很难尝试将浮点列与字符串参数进行比较。
我是编程的初学者,如果我的代码中有任何其他错误,请多多包涵,并请您通知我。
这段代码昨天运行良好,我今天更新了数据库中的一些值,但现在无法运行。在调试时我发现结果集正在返回值,但现在它无法存储在我声明的字符串中
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=rsSouth.getString("sum(priority)")
中得到 sp=null
?如果我的程序中有任何其他错误或其他提高效率的最佳方法,我请求您纠正我。提前致谢。
我的 table 的 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)
您需要为 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);
}
更改您的查询以使用如下别名字段名称
select sum(priority) as total .....
在您的示例查询中,您有
... where latitude >=9.993839 and ...
这表明您的 table 中的字段属于 numeric 类型。但是,在您的代码中,您使用 getString()
来读取值,更重要的是,您使用 pse.setString(1, Eb_SWLat);
来设置参数值。
您应该改用 getFloat()
和 setFloat()
,因为 MySQL 将很难尝试将浮点列与字符串参数进行比较。