Я создаю программу, которая должна предупреждать пользователя, если какой-то порог прошел для суммы денег.
Я сделал метод, чтобы проверить, предупрежден ли пользователь уже об этом пороге, поэтому мы не повторяем предупреждения, для этого я настроил таблицу 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));
Спасибо всем !!