2014-11-03 3 views
0

Мой код java передает параметры как текущую дату и время в часах перед вызовом хранимой процедуры.Как исправить java.lang.NullPointerException

Date d = new Date(); 
Date currentDate = new Date(System.currentTimeMillis() - 3600 * 1000); 
clstmt.setDate("date", new java.sql.Date(currentDate.getTime())); 
clstmt = con.prepareCall("exec vcs_gauge 'vs1_bag', 'd', 'date'"); 

При запуске соответствующей страницы JSP, то java.lang.NullPointerException выбрасывается.

+0

Показать весь код. –

+0

Дата d = новая дата(); Дата currentDate = новая дата (System.currentTimeMillis() - 3600 * 1000); public String [] [] getDbTable() {int i = 0; \t Строка [] [] a = новая строка [3600] [16]; clstmt = con.prepareCall ("exec vcs_gauge" vs1_bag ',' d ',' date '"); clstmt.setDate ("date", new java.sql.Date (currentDate.getTime())); clstmt.execute(); rs = clstmt.getResultSet(); while (rs.next()) {for (int j = 0; j <16; j ++) { a [i] [j] \t = rs.getString (j + 1); } i ++; } наконец {closeConnection(); } return a; } ЭТО МОЙ JAVA CODE.SP ИМЕЕТ 3 ПАРАМЕТРЫ И ПОСЛЕДНИЕ ДВА ТИПА DATETIME. – MES

+0

@ Fumu7 ВЫШЕУКАЗЫВАЕТСЯ, МОЙ КОД. Я ЗНАЮ, ЧТО БЫЛО ПРЕДСТАВЛЕНЫ ПЛОХОЙ ПУТЬ, КАК Я НОВЫЙ ДЛЯ STACKOVERFLOW. – MES

ответ

3

Сначала создайте CallableStatement, а затем привяжите значение. То есть поменять порядок ваших заявлений как

// clstmt.setDate("date", new java.sql.Date(currentDate.getTime())); 
clstmt = con.prepareCall("exec vcs_gauge 'vs1_bag', 'd', 'date'"); 
clstmt.setDate("date", new java.sql.Date(currentDate.getTime())); 

Вы получаете NullPointerException, потому что clstmt является null, пока вы prepareCall().

Редактировать

Я думаю, что ваш синтаксис должен быть чем-то вроде

clstmt = con.prepareCall("{call vcs_gauge('vs1_bag', 'd', ?) }"); 
clstmt.setDate(1, new java.sql.Date(currentDate.getTime())); 

Edit 2

на основе ваших дополнительных деталей,

String sql = "exec vcs_gauge @gauge_name=?,@first_rec_time=?,@last_rec_time=?"; 
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
clstmt = con.prepareCall(sql); 
clstmt.setString(1, "vs1_bag"); 
clstmt.setString(2, df.format(d)); 
clstmt.setString(3, df.format(currentDate)); 
+0

@Abdullah для редактирования моего вопроса – MES

+0

@EF, когда я делаю то, что вы упомянули, дата параметра не была определена для хранимой процедуры. Исключено исключение vcs_gauge. – MES

+0

@MES Отредактировано. Я не обращал внимания на ваш вызов только NPE. –

Смежные вопросы