Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC executeQuery() проблема получения результата / 6 сообщений из 6, страница 1 из 1
05.12.2006, 16:24:37
    #34178125
anton_evane
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC executeQuery() проблема получения результата
Доброе время суток. Возникла трабла с 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
05.12.2006, 16:37:38
    #34178212
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC executeQuery() проблема получения результата
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
if(rs.next()) {
    
    value = rs.getString( 1 );
    ....
} else {
     
    // Нету такого

}

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

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

надо

if (rs.next()){
...
Рейтинг: 0 / 0
05.12.2006, 16:42:48
    #34178242
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC executeQuery() проблема получения результата
Почитай доку к интерфейсу 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
05.12.2006, 16:48:21
    #34178273
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC executeQuery() проблема получения результата
Список проблем о которых стоит задуматся.
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
05.12.2006, 16:51:15
    #34178281
danii
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JDBC executeQuery() проблема получения результата
не вижу никакой логики в функции 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
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC executeQuery() проблема получения результата / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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