【问题标题】:sqlException when use ActiveJDBC使用 ActiveJDBC 时出现 sqlException
【发布时间】:2015-05-13 18:18:24
【问题描述】:

我使用 ActiveJDBC 和 Oracle 11g DB。当我使用 saveIt 时,我得到 java.sql.Exception。当我得到它的实例或列表时,一切正常。 我做错了什么?

Exception in thread "main" org.javalite.activejdbc.DBException: java.sql.SQLException: Invalid argument
зове, query: INSERT INTO dept (DEPTNO, DNAME, LOC) VALUES (?, ?, ?), params: 45, sdfa, fdg
        at oracle.jdbc.driver.AutoKeyInfo.getNewSql(AutoKeyInfo.java:187)
        at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:5704)
        at org.javalite.activejdbc.DB.execInsert(DB.java:598)
        at org.javalite.activejdbc.Model.insert(Model.java:2698)
        at org.javalite.activejdbc.Model.save(Model.java:2597)
        at org.javalite.activejdbc.Model.saveIt(Model.java:2524)
        at JavaHomeTask.Dept.addPersistence(Dept.java:72)
        at JavaHomeTask.App.addRow(App.java:103)
        at JavaHomeTask.App.main(App.java:50)
Caused by: java.sql.SQLException: Invalid argument
        ... 9 more

这是我的代码:

public void addPersistence() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        Dept d = new Dept();
        String value;
        for (String s : getAttributesNames()) {
            System.out.println("Enter " + s + " and press Enter button:");
            value = reader.readLine();
            d.set(s, value);
        }
        d.saveIt();

    }

public List<String> getAttributesNames() {
        return Arrays.asList("DEPTNO", "DNAME", "LOC");
    }

【问题讨论】:

  • 你能发布整个堆栈跟踪吗?另外,我认为你的一个参数有问题,所以 Oracle 抱怨。
  • @ipolevoy 这似乎是整个堆栈跟踪。表部门的架构,我尝试在其中插入行是 deptno Number(3) dname varchar2(14) loc varchar2(13) 我也尝试过这样的方式: Dept d = new Dept(); d.set("deptno", Integer.valueOf(11)); d.set("dname", "name"); d.set("loc", "位置"); d.saveIt();但结果是一样的。 PS对不起我的英语不好。
  • 我找到了这些主题github.com/javalite/activejdbc/issues/385 好像我有同样的问题,我的表中没有 id 列。我说的对吗?

标签: activejdbc


【解决方案1】:

问题的原因是 ActiveJDBC 使用 id 列作为表中的主键来识别应该使用哪个操作 - INSERT 或 UPDATE。如果表没有这样的列,程序员应该使用 @IdName("nameOfColumn") 注解手动指定 PK。更多信息您可以找到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2015-09-21
    • 2019-11-19
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多