使用insertRow()ADF时出现NullPointerException

时间:2013-12-16 13:13:46

标签: java nullpointerexception oracle-adf

我正在尝试将记录添加到数据库中的表中,我得到Nullpointerexception

使用insertRow()执行insert语句时。

用例:

我尝试将记录插入其中的数据库表名为someTable

此表包含以下属性:A, B, C, D, E

主键是三个字段的组合:A, B, C

我正在执行以下代码以在表someTable中插入新记录:

    AppModuleImpl appModule = (AppModuleImpl)(JSFUtils.getApplicationModule("AppModuleDataControl"));

    ViewObject someTableVO =appModule.findViewObject("someTableView1");    

    Row row= someTableVO.createRow();

    row.setAttribute("A", varable1);
    row.setAttribute("B", varable2); 
    row.setAttribute("C", varable3);
    row.setAttribute("D", varable4);


    someTableVO.insertRow(row); // This statement cause the NullPointerException

    appModule.getDBTransaction().commit();

    someTableVO.executeQuery(); 

注意:

  1. 当然除了主键之外没有Not Null constrains,我正在为(AB和{{1}的所有主键字段添加数据})。

  2. 我没有为归档的C插入数据,您可以从上面的示例代码中看到。但是,即使我试图在其中添加一些值,仍然会给我同样的错误。

  3. 我确信变量(E ...... variable1)不是variable4

  4. 我正在获得正确的View对象null

  5. 我正在使用someTableView1技术ADF

2 个答案:

答案 0 :(得分:0)

在该位置有NullPointerException有两种可能的原因:

  1. someTableVO为NULL。 "Doublecheck that you have a view object instance in your datamodel named "someTableView1". It would return null if that were not defined."
  2. 行中的某些内容为NULL。您的描述听起来像是您不确定NPE是否在someTableVO.insertRow(row)或其内部抛出。堆栈跟踪中的顶级源代码位置是什么?
  3. 调试它并告诉我们什么是NULL。

答案 1 :(得分:0)

解决问题

我应该在提交之前验证行,如下所示:

    AppModuleImpl appModule = (AppModuleImpl)(JSFUtils.getApplicationModule("AppModuleDataControl"));  
    ViewObject someTableVO =appModule.findViewObject("someTableView1");          


    Row row= someTableVO.createRow();  

    row.setAttribute("A", variable1);  
    row.setAttribute("B", variable2);  
    row.setAttribute("C", variable3);  
    row.setAttribute("D", variable4);  



    someTableVO.insertRow(row); 

    row.validate();     // This statement solved the problem

    appModule.getDBTransaction().commit();  

    someTableVO.executeQuery();