Я делаю программу, которая должна предупредить пользователя, если какой-то порог прошел за количеством денег.Java Resultset.getInt() не возвращается должным образом?
Я разработал метод проверки того, был ли пользователь уже оповещен об этом пороге, поэтому мы не повторяем оповещения, так как я установил таблицу MySQL, заполняющую 1 и 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 и фиксируя имя столбца, выработанная.
(и я считаю, что что-то не так с каким триггером в таблице MySQL, который был инициализация в 0 поле всегда, но это не подтверждено)
Вот окончательный код:
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
Добавьте инструкцию 'System.out.println', чтобы напечатать значение' clis.get (i) ', чтобы убедиться, что вы выбираете то, что, по вашему мнению, выбираете. – Jesper
Да, с той же Удачей, возвращает 0. – Lowb