我正在製作一個程序,該程序必須提醒用戶,如果某個閾值已經超過一定的金額。Java Resultset.getInt()沒有正確返回?
我已經做了一個方法來檢查用戶是否已經收到該閾值的提醒,所以我們不重複提醒,因爲我已經建立了一個MySQL表格,基於警報是否已經被1s和0填充已經發送或沒有發送。
這是表:
mysql> describe avisos;
+----------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------+-------+
| CLI | varchar(9) | NO | PRI | NULL | |
| mes | int(2) | YES | | NULL | |
| AvisadoPrimero | int(11) | NO | | NULL | |
| AvisadoSegundo | int(11) | NO | | NULL | |
| AvisadoTercero | int(11) | NO | | NULL | |
| AvisadoCuarto | int(11) | NO | | NULL | |
+----------------+------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
然而,當在我的程序我做一個查詢,以檢查是否報警已經發出,不管是什麼,代碼將始終返回0(因此說明該報警沒有發送)。
在這裏你可以看到字段的值,我在尋找:
mysql> SELECT AvisadoPrimero from avisos where CLI=#########; //(hidden for security reasons)
+----------------+
| AvisadoPrimero |
+----------------+
| 1 |
+----------------+
1 row in set (0.00 sec)
這裏是我的代碼,我的計劃之內運行:
try {
Statement sentencia = conexion.createStatement();
PreparedStatement avisosQuery = conexion.prepareStatement(avisosString);
PreparedStatement subtotalesQuery = conexion.prepareStatement(subtotalesString);
//ResultSet sobrepasados = sentencia.executeQuery("SELECT cli FROM subtotales where Precio >=" + umbralInferior + " and Precio <" + umbralSuperior + ";");
subtotalesQuery.setInt(1, umbralInferior);
subtotalesQuery.setInt(2, umbralSuperior);
sobrepasados = subtotalesQuery.executeQuery();
while (sobrepasados.next()) {
clis.add(sobrepasados.getString("CLI"));
}
if (!clis.isEmpty()) {
for (int i = 0; i < clis.size(); i++) {
switch (umbralInferior) {
case UMBRAL1:
avisosQuery.setString(1, "AvisadoPrimero");
avisosQuery.setString(2,clis.get(i));
resultado = avisosQuery.executeQuery();
resultado.first();
//System.out.println("Entrando en prueba\n\nConsulta realizada:");
//System.out.println(resultado.getInt("CLI"));
System.out.println(resultado.getInt(1));
所以,你可以看到如果表中的字段設置爲1,則最後一次打印將始終打印0.
任何提示?我究竟做錯了什麼?
==============
最後,使用PreparedStatement和固定的列名,摸索出。
(我也相信有一些錯誤在被初始化爲0表示始終MySQL表一些觸發器,但是這是未經證實)
下面是最終代碼:
try {
Statement sentencia = conexion.createStatement();
PreparedStatement avisosQuery = conexion.prepareStatement(avisosString);
PreparedStatement subtotalesQuery = conexion.prepareStatement(subtotalesString);
//ResultSet sobrepasados = sentencia.executeQuery("SELECT cli FROM subtotales where Precio >=" + umbralInferior + " and Precio <" + umbralSuperior + ";");
subtotalesQuery.setInt(1, umbralInferior);
subtotalesQuery.setInt(2, umbralSuperior);
sobrepasados = subtotalesQuery.executeQuery();
while (sobrepasados.next()) {
clis.add(sobrepasados.getString("CLI"));
}
if (!clis.isEmpty()) {
for (int i = 0; i < clis.size(); i++) {
switch (umbralInferior) {
case UMBRAL1:
//avisosQuery.setString(1, "AvisadoPrimero");
avisosQuery.setString(1,clis.get(i));
resultado = avisosQuery.executeQuery();
resultado.first();
//System.out.println("Entrando en prueba\n\nConsulta realizada:");
//System.out.println(resultado.getInt("CLI"));
System.out.println(resultado.getBoolean(1));
謝謝所有!!
你用rsultado.getInt(1)試過了嗎? – Andreas 2012-02-21 12:35:10
添加一個'System.out.println'語句來打印'clis.get(i)'的值,以確保您正在選擇您認爲正在選擇的內容。 – Jesper 2012-02-21 12:35:40
是的,同樣的運氣,返回0. – Lowb 2012-02-21 12:36:26