我正在使用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)谢谢你,AG.
我有一个单实例类,实现了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) 我注意到GSON HTML-escapes <和>字符,可以使用disableHtmlEscaping()builder配置方法禁用它.但我的问题是 - 为什么GSON默认会进行HTML转义?没有HTML转义的风险有哪些?
谢谢.