powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Resultset возвращает null, а ожидается integer ...
25 сообщений из 28, страница 1 из 2
Resultset возвращает null, а ожидается integer ...
    #34367807
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть база 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
Resultset возвращает null, а ожидается integer ...
    #34367847
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ерунду говоришь. Если в базе не найдено ниодной строки по указанному условию, то запрос должен вернуть 0 или может что другое смотря что там за тип поля которое суммируется. Даже если бы запрос возвращал NULL, то метод все равно вернул бы 0. Так уж в документации написано. Так что NullPointerException все равно не из-за этого. Давай сюда точный стек NullPointerException и точно определись в какой строке происходит.
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34368118
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕрунду говоришь. Если в базе не найдено ниодной строки по указанному условию, то запрос должен вернуть 0 или может что другое смотря что там за тип поля которое суммируется. Даже если бы запрос возвращал NULL, то метод все равно вернул бы 0. Так уж в документации написано. Так что NullPointerException все равно не из-за этого. Давай сюда точный стек NullPointerException и точно определись в какой строке происходит.
Никогда не говори никогда!

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

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

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

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

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

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

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

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

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

--
Алексей
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34370465
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Resultset возвращает null, а ожидается integer ...
    #34370502
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz[quot автор]Никогда не говори никогда!

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

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


Либо твой код не совпадает с тем который выполняется... Либо я фиг его знает. Автобоксигна нет, rset не null... А дебажить-хть пробовал? Breakpoint там поставить? Очень помогает.
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34370808
Фотография 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) ... обрабатывается правильно и возвращает длинне целое , а в некоторых возникает указанная ситуация...
И чего за глюк, непонятно... хотя конечно понятно, что ошибка где то в ДНК...
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34370821
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Resultset возвращает null, а ожидается integer ...
    #34370887
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm ...
Объекты JDBC шарятся между потоками?
Нет.
Пока для каждого потока отдельное соединение с базой MySQL.
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34370888
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insectВот тут не понял, расшифруй пожалуйста...

Я просто к примеру вдруг код который ты привел просто пример а не рабочий код коотрый на самом деле падает.
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34371962
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привели бы полный код вызывающий ошибку. Пока похоже на
1) вы не тот код выполняете
2) что-то все таки шарится между потоками
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34372282
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Resultset возвращает null, а ожидается integer ...
    #34372433
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, а теперь полный результат вывода операции en.printStackTrace();
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34373190
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Resultset возвращает null, а ожидается integer ...
    #34373377
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С утра трезвым взглядом посмотрел на твой, без обид, дурацкий код. Нахрена людей обманывать? Если у тебя все поля шарятся между потоками?
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34373390
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczС утра трезвым взглядом посмотрел на твой, без обид, дурацкий код. Нахрена людей обманывать? Если у тебя все поля шарятся между потоками?

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

Или что-то у меня все же взгляд с утра ни капли не трезвый... не шарятся ведь все таки. Все равно убери statement и resultset из полей.
Убрал, счастья не принесло...
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34373714
Michael Ponomarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если попробовать
Код: plaintext
1.
    InputByte = rset.getLong( 1 );
и еще разумеется пробовал:
Код: plaintext
1.
2.
3.
     if  (rset ==  null ) {
        System.out.println("rset == null");
    }
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34373780
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Resultset возвращает null, а ожидается integer ...
    #34373868
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запусти в консоли.
...
Рейтинг: 0 / 0
Resultset возвращает null, а ожидается integer ...
    #34374272
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insectА может это всё-таки mysql-connector-java Не хотелось бы так думать...

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


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