powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC executeQuery() проблема получения результата
6 сообщений из 6, страница 1 из 1
JDBC executeQuery() проблема получения результата
    #34178125
anton_evane
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток. Возникла трабла с JDBC( опыта по работе с ним мало)
ворос возникает в следующем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
	
 public   int  countIPR() {
		 int  value =  0 ;
		 try  {
			rs = stmt.executeQuery("SELECT COUNT(ID) FROM TABLE1");
			rs.next();
			value = rs.getInt( 1 );
			rs.close();
		}  catch  (SQLException e) {
			e.printStackTrace();
		}
		 return  value;
	}

	 public   boolean  selectByName(String name) {
		 boolean  update = false;
		String value = "";
		System.out.println(name);
		 int  rows = countIPR();
		 try  {
			 if  (rows !=  0 ){
				rs = stmt.executeQuery("SELECT ID FROM TABLE1 WHERE COL1=\'" + name + "\'");
				rs.next();
				value = rs.getString( 1 );
					update = true;
					rs.close();
					}
				}
		}  catch  (SQLException e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
			System.exit( 0 );
		}
		 return  update;

После выполнения строки
Код: plaintext
value = rs.getString( 1 );
вываливается Exception: Invalid cursor state - no current row.

Подскажите как получить значение
...
Рейтинг: 0 / 0
JDBC executeQuery() проблема получения результата
    #34178212
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
if(rs.next()) {
    
    value = rs.getString( 1 );
    ....
} else {
     
    // Нету такого

}

т.к. в функции countIPR() нет условия COL1=\'" + name + "\'"
...
Рейтинг: 0 / 0
JDBC executeQuery() проблема получения результата
    #34178225
Фотография 1024
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if (rows != 0){

- неправильно. Там какая-то цифирька countIPR() в которой свой запрос не имеющий отношения к текущему

надо

if (rs.next()){
...
Рейтинг: 0 / 0
JDBC executeQuery() проблема получения результата
    #34178242
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай доку к интерфейсу Statement, там внятно написано.

JavaDocBy default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists.

И вообще раскопай где-нибудь внятный пример работы с JDBC, а то приведеный тобой код это просто звездец какой-то.
...
Рейтинг: 0 / 0
JDBC executeQuery() проблема получения результата
    #34178273
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Список проблем о которых стоит задуматся.
1) Как сказали камрады выше, а что если запрос ничего не вернет?
2) Вызовы метода close() должны быьт в блоке finaly иначе большая вероятность утечки соединений с базой.
3) Вставка параметров путем конкатенации SQL строк это верный путь к SQL Injection уязвимости. Используй PreparedStatement
4) И вообще с чего ты решил что statment можно реюзать для разных запросов.
5) Сильный ход
Код: plaintext
1.
2.
 catch  (SQLException e) {
			System.exit( 0 );
		}
Для чего так круто?
6) Ну а на счет того что SQL в коде это зло наверное ещё рано задумыватся.
...
Рейтинг: 0 / 0
JDBC executeQuery() проблема получения результата
    #34178281
danii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вижу никакой логики в функции countIPR
попробуй так


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public   int  countIPR() {
   int  value =  0 ;
  ResultSet rs= null ;
   try  {
    rs = stmt.executeQuery("SELECT COUNT(*) FROM TABLE1");
     if  (rs.next())  value = rs.getInt( 1 );
  }  catch  (SQLException e) {
    e.printStackTrace();
  } finally {
     try {  if (rs!= null ) rs.close(); } catch (SQLException e2){}
  }
   return  value;
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 public   boolean  selectByName(String name) {
   boolean  update = false;
  String value = "";
  System.out.println(name);
   int  rows = countIPR();
  ResultSet rs= null ;
   try  {
      rs = stmt.executeQuery("SELECT ID FROM TABLE1 WHERE COL1=\'" + name + "\'");
       if  ( rs.next() ){
        value = rs.getString( 1 );
        update = true;
      }
      // обрати внимание что возвращается первый выбранный
  }  catch  (SQLException e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
   // System.exit(0);
  } finally {
     try {  if (rs!= null ) rs.close(); } catch (SQLException e2){}
  }
   return  update;
}
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC executeQuery() проблема получения результата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]