簡體   English   中英

在Java中調用Informix存儲過程

[英]Call Informix stored procedure in java

我有一個存儲過程。我想在Java中調用該過程。 但是,結果沒有出來。

顯示java.lang.NullPointerException

如何在Java中實際調用notifyix存儲過程。 請幫助我..這是我的代碼示例..

存儲過程

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());

}

您尚未包括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驅動程序版本較舊,但存在一些錯誤,但是我認為dbConnconn變量可能存在問題。 您確定您已連接到數據庫?


編輯:

如果您只想建立一個連接(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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM