小编Wan*_*All的帖子

Oracle在Java中的RETURNING INTO使用(JDBC,Prepared Statement)

我正在使用JDBC来执行如下所示的Oracle语句:

"INSERT INTO MYTABLE(MYDATA) VALUES(?) RETURNING MY_CALCULATED_DATA INTO ?"
// MYTABLE's def makes MY_CALCULATED_DATA be auto-generated by DB on insert
Run Code Online (Sandbox Code Playgroud)

我发现了几种在Java中调用上述语句的方法,主要是:

  • 使用OraclePreparedStatement:

    ps = (OraclePreparedStatement)conn.prepareStatement(sql);
    ps.setString(1, "myvalue");
    ps.registerReturnParameter(2, Types.VARCHAR);
    ps.execute();
    rs = ps.getReturnResultSet();
    rs.next();
    System.out.print(rs.getString(1));
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用CallableStatement:

    cs = conn.prepareCall(sql);
    cs.setString(1, "myvalue");
    cs.registerOutParameter(2, Types.VARCHAR);
    cs.execute();
    System.out.print(cs.getString(1));
    
    Run Code Online (Sandbox Code Playgroud)

问题:

  1. 方法#2抛出"SQLException:并非所有返回参数都已注册",但是,如果我将SQL语句包装成" BEGIN..END; " - 则方法#2工作正常.
    • 为什么方法#1在没有" BEGIN..END "的情况下工作,但方法#2需要" BEGIN..END "才能工作?
    • 什么样的"魔术"" BEGIN..END "对声明做了什么,以便"不是所有参数注册"问题突然解决了?

  2. 有没有第三种更好的方法来做上述事情?

谢谢你,AG.

java oracle plsql jdbc prepared-statement

19
推荐指数
2
解决办法
2万
查看次数

JAX-RS(Jersey)ExceptionMapper - @Context注入静态/单例类 - 它有效,但为什么呢?

我有一个单实例类,实现了ExceptionMapper.它不是一个静态类,但它是一个我知道只创建单个实例的类(我检查过 - 构造函数只被调用一次).

我的类使用@Context HttpServletRequest,我可以清楚地看到,当调用我的ExceptionMapper.toResponse()方法时,@ Context'request'参数有一个值,该值与抛出异常的请求相关.

该文档说 这确实是由设计支持的功能,并且它是通过使用"代理"来完成的.

我想知道这是如何实现的 - 单个实例如何同时具有不同的成员变量值?

谢谢你,
AG

PS:这是测试代码:

@Provider
public class MyExceptionMapper implements ExceptionMapper<Exception> {

    public MyExceptionMapper() {
        System.out.println("CTOR!!");
    }

    @Context HttpServletRequest req;

    public static boolean done = false;  
    public Response toResponse(Exception ex) {
        if (!done) {
            done = true;
            Thread.sleep(10000);
        }
        System.out.println(req.getRequestURI());
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的REST处理程序方法抛出异常,所以当我"并行"执行以下2个请求时(上面的睡眠确保当第二个到达时第一个没有完成并且恕我直言应该修改唯一的'req'字段):

- http://localhost/app/one
- http://localhost/app/two
Run Code Online (Sandbox Code Playgroud)

我的程序打印:

CTOR!
http://localhost/app/one
http://localhost/app/two
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs jersey

10
推荐指数
1
解决办法
5295
查看次数

GSON disableHtmlEscaping - 为什么GSON HTML首先默认转义?

我注意到GSON HTML-escapes <>字符,可以使用disableHtmlEscaping()builder配置方法禁用它.但我的问题是 - 为什么GSON默认会进行HTML转义?没有HTML转义的风险有哪些?

谢谢.

json gson

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

gson ×1

jax-rs ×1

jdbc ×1

jersey ×1

json ×1

oracle ×1

plsql ×1

prepared-statement ×1

rest ×1