我正在尝试将记录添加到数据库中的表中,我得到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();
注意:
当然除了主键之外没有Not Null constrains
,我正在为(A
,B
和{{1}的所有主键字段添加数据})。
我没有为归档的C
插入数据,您可以从上面的示例代码中看到。但是,即使我试图在其中添加一些值,仍然会给我同样的错误。
我确信变量(E
...... variable1
)不是variable4
。
我正在获得正确的View对象null
我正在使用someTableView1
技术ADF
答案 0 :(得分:0)
在该位置有NullPointerException有两种可能的原因:
someTableVO.insertRow(row)
或其内部抛出。堆栈跟踪中的顶级源代码位置是什么?调试它并告诉我们什么是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();