Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Resultset возвращает null, а ожидается integer ... / 25 сообщений из 28, страница 1 из 2
02.03.2007, 17:41:59
    #34367807
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Есть база MySQL . Пишем на JAVA. И вот кусок исходного текста:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
Statement stmt ;
ResultSet rset  ;
...

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

QuerySQL = "select sum(len) as inputbyte from monitor  where " ... длинное условие ....";

rset = stmt.executeQuery(QuerySQL);
while (rset.next())
{
           InputByte = rset.getLong("inputbyte");
};
...

В результате когда по запросу "select sum(len) ..." возвращается NULL (т.е. в базе не встретилось ни одной записи удовлетворяющей условию where) возбуждается исключение NullPointerException в строке:
InputByte = rset.getLong("inputbyte");

Может кто подскажет более простой способ обработки кроме как поставить блок try{ ... } catch {} ?

Electronic Insect
...
Рейтинг: 0 / 0
02.03.2007, 17:50:07
    #34367847
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Ерунду говоришь. Если в базе не найдено ниодной строки по указанному условию, то запрос должен вернуть 0 или может что другое смотря что там за тип поля которое суммируется. Даже если бы запрос возвращал NULL, то метод все равно вернул бы 0. Так уж в документации написано. Так что NullPointerException все равно не из-за этого. Давай сюда точный стек NullPointerException и точно определись в какой строке происходит.
...
Рейтинг: 0 / 0
02.03.2007, 19:12:29
    #34368118
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
BlazkowiczЕрунду говоришь. Если в базе не найдено ниодной строки по указанному условию, то запрос должен вернуть 0 или может что другое смотря что там за тип поля которое суммируется. Даже если бы запрос возвращал NULL, то метод все равно вернул бы 0. Так уж в документации написано. Так что NullPointerException все равно не из-за этого. Давай сюда точный стек NullPointerException и точно определись в какой строке происходит.
Никогда не говори никогда!

1. Возникает исключение точно в этой строке , на это указывает сообщение выдаваемое Eclipse (пишу под Linux) при распечатке stack Exception (там вообще только указание на эту строку).

2. Про то, что должно быть, наталкивался в форумах, но не в документации.

А потому, вопрос остается открытым в том виде в котором был написан.
Извини, что не могу привести точный код, нахожусь в пути...

Electronic Insect
...
Рейтинг: 0 / 0
02.03.2007, 19:25:12
    #34368145
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
авторНикогда не говори никогда!

1. Возникает исключение точно в этой строке , на это указывает сообщение выдаваемое Eclipse (пишу под Linux) при распечатке stack Exception (там вообще только указание на эту строку).
И все же: НИКОГДА!
Если исключение возникает в строке
InputByte = rset.getLong("inputbyte");
То единственный вариант это rset = null. Но это должно было оборватся ещё в начале цикла. Делаем вывод что исключение возникает где-то в коде драйвера. Тогда либо драйвер кривой и его надо сменить, либо "inputbyte" у вас в реальном коде не константа, а переменная принявшая знаечние Null.
...
Рейтинг: 0 / 0
03.03.2007, 00:53:29
    #34368487
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
приведите stacktrace, зачем гадать?

ну и если бы по ваше условие не попадало бы ни одной записи - то запрос бы не вернул ни одной строчки и в цикл вы бы не зашли :) Т.е. sum() это агрегатная функция работающая на "группах" записей - если групп нет сум выполняться не будет.

пока по вашему коду или rset или stacktrace заканчивается/начинается не в этой строчке либо вы не весь код привели
...
Рейтинг: 0 / 0
05.03.2007, 09:10:54
    #34370300
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
insect пишет:

> QuerySQL = "select sum(len) as inputbyte from monitor where " ... длинное условие ....";

А чем "select coalesce(sum(len),0)..." не устраивает?

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.03.2007, 10:15:03
    #34370465
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
funikovyuriприведите stacktrace, зачем гадать?

ну и если бы по ваше условие не попадало бы ни одной записи - то запрос бы не вернул ни одной строчки и в цикл вы бы не зашли :) Т.е. sum() это агрегатная функция работающая на "группах" записей - если групп нет сум выполняться не будет.

пока по вашему коду или rset или stacktrace заканчивается/начинается не в этой строчке либо вы не весь код привели
Привожу, только не знаю чем это поможет (Eclipse выдает очень скупую информацию):

java.lang.NullPointerException
at com.ksv.statistic.run(statistic.java:59)

В 59 строке находится InputByte = rset.getLong("inputbyte");

Начинаю думать, что какая-то проблема с JDBC драйвером. Установлена версия 3.1.12 mysql-connector-java из rpm. Это последняя версия для fedora core 5.
...
Рейтинг: 0 / 0
05.03.2007, 10:26:19
    #34370502
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Blazkowicz[quot автор]Никогда не говори никогда!

...skip...
либо "inputbyte" у вас в реальном коде не константа, а переменная принявшая знаечние Null.
Вот тут не понял, расшифруй пожалуйста...
...
Рейтинг: 0 / 0
05.03.2007, 11:34:25
    #34370743
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
insect
java.lang.NullPointerException
at com.ksv.statistic.run(statistic.java:59)

В 59 строке находится InputByte = rset.getLong("inputbyte");


Либо твой код не совпадает с тем который выполняется... Либо я фиг его знает. Автобоксигна нет, rset не null... А дебажить-хть пробовал? Breakpoint там поставить? Очень помогает.
...
Рейтинг: 0 / 0
05.03.2007, 11:50:08
    #34370808
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Blazkowicz insect
java.lang.NullPointerException
at com.ksv.statistic.run(statistic.java:59)

В 59 строке находится InputByte = rset.getLong("inputbyte");


Либо твой код не совпадает с тем который выполняется... Либо я фиг его знает. Автобоксигна нет, rset не null... А дебажить-хть пробовал? Breakpoint там поставить? Очень помогает.
Тут проблемы т.к. Eclipse как то странно обрабатывает breakpoint в thread (вся эта канитель происходит во множестве однотипных потоков). Так вот в большинстве потоков (thread) этот самый select sum(len) ... обрабатывается правильно и возвращает длинне целое , а в некоторых возникает указанная ситуация...
И чего за глюк, непонятно... хотя конечно понятно, что ошибка где то в ДНК...
...
Рейтинг: 0 / 0
05.03.2007, 11:52:28
    #34370821
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
insect Blazkowicz insect
java.lang.NullPointerException
at com.ksv.statistic.run(statistic.java:59)

В 59 строке находится InputByte = rset.getLong("inputbyte");


Либо твой код не совпадает с тем который выполняется... Либо я фиг его знает. Автобоксигна нет, rset не null... А дебажить-хть пробовал? Breakpoint там поставить? Очень помогает.
Тут проблемы т.к. Eclipse как то странно обрабатывает breakpoint в thread ( вся эта канитель происходит во множестве однотипных потоков ). Так вот в большинстве потоков (thread) этот самый select sum(len) ... обрабатывается правильно и возвращает длинне целое , а в некоторых возникает указанная ситуация...
И чего за глюк, непонятно... хотя конечно понятно, что ошибка где то в ДНК...
Объекты JDBC шарятся между потоками?
...
Рейтинг: 0 / 0
05.03.2007, 12:07:21
    #34370887
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Timm ...
Объекты JDBC шарятся между потоками?
Нет.
Пока для каждого потока отдельное соединение с базой MySQL.
...
Рейтинг: 0 / 0
05.03.2007, 12:07:35
    #34370888
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
insectВот тут не понял, расшифруй пожалуйста...

Я просто к примеру вдруг код который ты привел просто пример а не рабочий код коотрый на самом деле падает.
...
Рейтинг: 0 / 0
05.03.2007, 16:39:08
    #34371962
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Привели бы полный код вызывающий ошибку. Пока похоже на
1) вы не тот код выполняете
2) что-то все таки шарится между потоками
...
Рейтинг: 0 / 0
05.03.2007, 18:10:42
    #34372282
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
funikovyuriПривели бы полный код вызывающий ошибку. Пока похоже на
1) вы не тот код выполняете
2) что-то все таки шарится между потоками
Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
 package  com.ksv;

 import  java.sql.Connection;
 import  java.sql.DriverManager;
 import  java.sql.SQLException;
 import  java.sql.Statement;
 import  java.sql.ResultSet;
 import  java.lang.Thread;

 class  statistic  extends  Thread {
	 int  address;
	 long  InputByte,OutputByte;
	String BeginTime, EndTime;
	String QuerySQL = "";
     private   static  String url      = "jdbc:mysql://localhost:3306/netams";
     private   static  String user     = "root";
     private   static  String password = "";
	Connection conn =  null ;
	Statement stmt  =  null ;
	ResultSet rset  =  null ;

	 public   volatile   static   int  countJob =  0 ;

	// constructor
	statistic( int  in_address, String beginTime, String endTime) {
		 this .address = in_address;
		 this .BeginTime = beginTime;
		 this .EndTime = endTime;
	}

	 public   void  run() {
		
		countJob++;
		 try  {
			 Class .forName("com.mysql.jdbc.Driver").newInstance();
		}  catch  (Exception ex) {
			ex.printStackTrace();
		} // catch
		 try  {
			conn = DriverManager.getConnection(url, user, password);
			System.out.println("Connection: " + conn);

			// Get statement object initialized as shown.
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
			QuerySQL = "select sum(len) as inputbyte from netams.monitor where dst="
				+ address
				+ " and ..."
				+ " and (time>UNIX_TIMESTAMP(\'" + BeginTime + "\')" 
				+ " and time<UNIX_TIMESTAMP(\'" + EndTime + "\'))";
			
			// Query the database, storing the result in an object of type ResultSet
			rset = stmt.executeQuery(QuerySQL);
			 try  {
			 while  (rset.next()){
				InputByte = rset.getLong("inputbyte");
  			};
			}
			 catch  (NullPointerException en) {
				System.out.println("Address on exception: " + address);
				en.printStackTrace();
				InputByte = 0 ;
				rset.close(); rset =  null ;
			} 			
			 if  (rset!= null ) {rset.close();};
			QuerySQL = "select sum(len) as outputbyte from netams.monitor where src="
				+ address
				+ " and ..."
				+ " and (time>UNIX_TIMESTAMP(\'" + BeginTime +"\')"
				+ " and time<UNIX_TIMESTAMP(\'" + EndTime + "\'))";
			
			rset = stmt.executeQuery(QuerySQL);
			 try  {
			 while  (rset.next()){
			       OutputByte = rset.getLong("outputbyte");
				};
			}
			 catch  (NullPointerException en) {
				System.out.println("Address on exception: " + address);
				en.printStackTrace();
				OutputByte =  0 ;
				rset.close(); rset =  null ;
			} 			
			 if  (rset!= null ) {rset.close();};
          
			System.out.println("Traffic: " + address+" "+InputByte+" "+OutputByte);
			
			conn.close();
			countJob--;
		}
		 catch  (SQLException ex) {
			// handle any errors
			System.out.println("SQLException: " + ex.getMessage());
			System.out.println("SQLState: " + ex.getSQLState());
			System.out.println("VendorError: " + ex.getErrorCode());
		}
	} // run
} // end class definition

Это пока прототип, пытаюсь его заставить работать. Если удастся, то перепишу... пока не работает...
Описание проблемы приведено выше ...
...
Рейтинг: 0 / 0
05.03.2007, 18:57:35
    #34372433
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Ну, а теперь полный результат вывода операции en.printStackTrace();
...
Рейтинг: 0 / 0
06.03.2007, 09:36:53
    #34373190
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
BlazkowiczНу, а теперь полный результат вывода операции en.printStackTrace();
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 
...
		 try  {
			 while  (rset.next()){
( 57  строка ----->  		InputByte = rset.getLong("inputbyte");
  			};
			}
			 catch  (NullPointerException en) {
				System.out.println("Address on exception: " + address);
				en.printStackTrace();
				InputByte = 0 ;
				rset.close(); rset =  null ;
			} 
...			
И вот что выдается в консоли Eclipse:
...
Address on exception: 175371816
java.lang.NullPointerException
at com.ksv.statistic.run(statistic.java:57)

Вроде простейшая ситуация, но уже неделю пляски с бубном...
Нашел даже в документации Sun про getLong(...), там написано, что если в результате запроса к базе возвращается NULL, то getLong возвращает 0. Но этого не происходит...
...
Рейтинг: 0 / 0
06.03.2007, 10:15:08
    #34373377
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
С утра трезвым взглядом посмотрел на твой, без обид, дурацкий код. Нахрена людей обманывать? Если у тебя все поля шарятся между потоками?
...
Рейтинг: 0 / 0
06.03.2007, 10:18:28
    #34373390
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
BlazkowiczС утра трезвым взглядом посмотрел на твой, без обид, дурацкий код. Нахрена людей обманывать? Если у тебя все поля шарятся между потоками?

Или что-то у меня все же взгляд с утра ни капли не трезвый... не шарятся ведь все таки. Все равно убери statement и resultset из полей.
...
Рейтинг: 0 / 0
06.03.2007, 10:28:19
    #34373423
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
BlazkowiczС утра трезвым взглядом посмотрел на твой, без обид, дурацкий код. Нахрена людей обманывать? Если у тебя все поля шарятся между потоками?
Обид не может быть, так как это макет. Я как заслуженный чукча об этом писал однако.
А теперь расскажи пожалуйста чего я там пытался скрыть от общественности?
Это по недомыслию...
...
Рейтинг: 0 / 0
06.03.2007, 11:18:25
    #34373651
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Blazkowicz BlazkowiczС утра трезвым взглядом посмотрел на твой, без обид, дурацкий код. Нахрена людей обманывать? Если у тебя все поля шарятся между потоками?

Или что-то у меня все же взгляд с утра ни капли не трезвый... не шарятся ведь все таки. Все равно убери statement и resultset из полей.
Убрал, счастья не принесло...
...
Рейтинг: 0 / 0
06.03.2007, 11:29:09
    #34373714
Michael Ponomarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
а если попробовать
Код: plaintext
1.
    InputByte = rset.getLong( 1 );
и еще разумеется пробовал:
Код: plaintext
1.
2.
3.
     if  (rset ==  null ) {
        System.out.println("rset == null");
    }
...
Рейтинг: 0 / 0
06.03.2007, 11:41:41
    #34373780
insect
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Michael Ponomarevа если попробовать
Код: plaintext
1.
    InputByte = rset.getLong( 1 );

Пробовал, результат тот же...

Michael Ponomarev
и еще разумеется пробовал:
Код: plaintext
1.
2.
3.
     if  (rset ==  null ) {
        System.out.println("rset == null");
    }

И это тоже ... если бы rset == null , то вылетало бы на строке с while (reset.next())...

А может это всё-таки mysql-connector-java (драйвер) ?
Не хотелось бы так думать...
...
Рейтинг: 0 / 0
06.03.2007, 11:58:25
    #34373868
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
Запусти в консоли.
...
Рейтинг: 0 / 0
06.03.2007, 13:24:17
    #34374272
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Resultset возвращает null, а ожидается integer ...
insectА может это всё-таки mysql-connector-java Не хотелось бы так думать...

Если бы это был драйвер, то ошибка была бы не в строке твоего кода. Хотя может это говноэклипс так интелектуально тебе вывод зарезает. В общем цель №1 для тебя это получить нормальный полный stacktrace ошибки, а не тот обрезок что ты приводишь.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Resultset возвращает null, а ожидается integer ... / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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