返回插入的id Oracle时并非所有变量都绑定

时间:2017-07-22 16:27:05

标签: java sql oracle auto-increment

我在数据库表中插入新数据时尝试获取新ID,但我得到了:

def new_search_result(request):
    selected = request.GET.get('selected')
    keyword = request.GET.get('keyword')
    # ...

我是从Java SE项目中做到的,

ORA-01008: not all variables bound

String" instruccionSql"我通过的是

 public ResultSet ejecutarConsulta(String instruccionSql){
        rs = null;
        try {
                st = con.createStatement();
                rs = st.executeQuery(instruccionSql);
                System.out.println("Consulta Exitosa");
        } catch (SQLException e) {
                System.out.println("Error en la Consulta: "+e.getMessage());
        }
        return rs;
    }

我有相应的触发器和Seq来生成表autoincrement id。

2 个答案:

答案 0 :(得分:1)

使用CallableStatement并注册OUT参数 这也是注册IN参数的绝佳机会。

String mySql = "DECLARE x NUMBER; BEGIN "
        + "  insert  into Usuario(DOCUMENTOIDENTIDAD,NOMBRE,CARGO,CONTRASENA,PERMISO) "
        + "  values (?,?,?,?,?) "
        + "  RETURNING ID INTO x;"
        + "  ? := x;"
        + "END; ";
CallableStatement cal = conn.prepareCall(mySql);

cal.setString(1, "22323");
cal.setString(2, "asfa");
cal.setString(3, "Administrador");
cal.setString(4, "123456");
cal.setString(5, "0");
cal.registerOutParameter(6, java.sql.Types.INTEGER);

cal.executeQuery();

Integer newId = cal.getInt(6);

答案 1 :(得分:0)

您正在尝试使用未绑定到值的绑定变量(:i)。