2013-12-19 3 views
0

У меня есть хранимая процедура. Я хочу вызвать процедуру в java. Однако результат не вышел .. ОшибкаВызов Informix хранимой процедуры в java

java.lang.NullPointerException

Как на самом деле назвать Informix хранимую процедуру Java. Пожалуйста, помогите мне .. Это мои примеры кода ..

Хранимая процедура

create procedure tryBaru_Procedure(v_name varchar(50),v_city varchar(20),out v_id int) 

select id 
into v_id 
from tryBaru 
where name=v_name; 

update tryBaru 
set city=v_city 
where id=v_id; 
end procedure; 

Java

public class TryBaru_Controller { 


Connection conn; 
DBConnection dbConn = new DBConnection(); 

public tryBaru p(tryBaru tryje) throws Exception 
{ 
    conn = dbConn.getConnection(); 

    //prepare call store procedure 
    CallableStatement cs = conn.prepareCall("{ call tryBaru_Procedure(?,?,?) }"); 


    cs.setString(1, tryje.getName()); 
    cs.setString(2, tryje.getCity()); 
    cs.registerOutParameter(3, Types.INTEGER); 


    cs.executeQuery(); 
    tryje.setId(cs.getInt(3)); 
    cs.close(); 
    conn.close(); 

    return tryje; 
} 
} 

Главная

public static void main(String[] args){ 
    // TODO Auto-generated method stub 

    TryBaru_Controller tbc = new TryBaru_Controller(); 
    tryBaru tb = new tryBaru(); 

    String name1 = "Faridah"; 
    String city1 = "Johor"; 

    tb.setName(name1); 
    tb.setCity(city1); 
    try { 
     tbc.p(tb); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    System.out.println(tb.getName()); 
    System.out.println(tb.getCity()); 
    System.out.println(tb.getId()); 

} 
+1

Пожалуйста, включите трассировку стека и указать, где 'NullPointerException' происходит в вашем коде , –

+0

Я тестировал ваш образец кода с помощью Informix JDBC 4.10.JC2DE и, похоже, работает. По крайней мере, выходной параметр задается, когда я устанавливаю его в хранимой процедуре. Я должен согласиться с Марком о stacktrace. –

ответ

1

Вы не включили StackTrace так трудно сказать, что произошло.

Из вашего комментария кажется, что вы подозреваете, что драйвер Informix JDBC. Я пробовал аналогичный код с JDBC 4.10.JC2DE и, похоже, работает. Существует Jython код:

""" 
    create procedure tryBaru_Procedure(v_name varchar(50),v_city varchar(20),out v_id int) 
     let v_id = 10; 
    end procedure; 
""" 

def test_call(db_url, usr, passwd): 
    try: 
     print("\n\n%s\n--------------\ncall..." % (db_url)) 
     db = DriverManager.getConnection(db_url, usr, passwd) 
     proc = db.prepareCall("{ call tryBaru_Procedure(?, ?, ?) }"); 
     proc.setString(1, 'v_name') 
     proc.setString(2, 'v_city') 
     proc.registerOutParameter(3, Types.VARCHAR) 
     proc.executeUpdate(); 
     v_id = proc.getInt(3) 
     print('v_id: %s' % (v_id)) 
     db.close() 
    except: 
     print("there were errors!") 
     s = traceback.format_exc() 
     sys.stderr.write("%s\n" % (s)) 

Он печатает 10, как и ожидалось.

Возможно, вы используете устаревшую версию драйвера Informix JDBC с некоторыми ошибками, но я думаю, что может возникнуть проблема с переменной dbConn или conn. Вы уверены, что имеете подключение к базе данных?


Отредактировано:

Если вы хотите иметь только одно соединение (Singleton), то попробуйте что-то вроде:

public Connection getConnection() throws Exception { 
    /* Define the database to be used, the driver, 
    * the connection url, and the username and 
    * password to connect the database 
    */ 
    if (connection == null) { 
     driver = "com.informix.jdbc.IfxDriver"; 
     Class.forName(driver); 
     connectionURL = "jdbc:informix-sqli://127.0.0.1:9090/barubuat:informixserver=lo_informix1210;user=informix;password=abc123"; 
     connection = DriverManager.getConnection(connectionURL); 
    } 
    return connection; 
} 
+0

@Mark Rotteveel 'NullPointerException' указывает здесь' CallableStatement cs = conn.prepareCall ("{call tryBaru_Procedure (?,?,?)}"); ' –

+0

Так что, вероятно, ваша переменная' conn' будет 'null'. –

+0

Из вашего кода 'DBConnection' кажется, что вы не устанавливаете' connection = DriverManager.getConnection (connectionURL); ' –

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