Oracle_12.1_JDBC开发者指南_2013.7(2)

Savepoints 只能用于局部事物,全局事物不支持

 Connection.setSavepoint 返回一个java.sql.Savepoint对象

 getSavepointName 用于有名字的, getSavepointId用于没名字的,互换会报错

 

 Connection.rollback(Savepoint svpt) 返回到回滚点Connection.releaseSavepoint(Savepoint svpt) 释放掉

一旦commit或rollback,这个事物中的所有回滚点都自动释放

rollback到某个回滚点后,这个回滚点之后的那些将自动释放

 

获取自动生成的key值功能,只支持insert语句

/** SQL statements for creating an ORDERS table and a sequence for generating the
  * ORDER_ID.
  *
  * CREATE TABLE ORDERS (ORDER_ID NUMBER, CUSTOMER_ID NUMBER, ISBN NUMBER,
  * DESCRIPTION NCHAR(5))
  *
  * CREATE SEQUENCE SEQ01 INCREMENT BY 1 START WITH 1000
  */
// Create a PreparedStatement for inserting a row into the ORDERS table.
OraclePreparedStatement pstmt = (OraclePreparedStatement)
conn.prepareStatement("INSERT INTO ORDERS (ORDER_ID, CUSTOMER_ID, ISBN,  
DESCRIPTION) VALUES (SEQ01.NEXTVAL, 101,//用序列自动生成主键
 966431502, ?)", cols);
String s = new String(c);
pstmt.setNString(1, s);
pstmt.executeUpdate();
ResultSet rset = pstmt.getGeneratedKeys();//获得自动生成的值,返回结果集对象

 但批更新时不可用

返回的ResultSet只能用序号得到里面的内容

如果显示指明了Statement.RETURN_GENERATED_KEYS 标志,则要用"rowid"列名访问

 

Oracle只支持 HOLD_CURSORS_OVER_COMMIT模式

 

 

从数据库中取出的数据到底要用什么java类型表示呢?

1.通常来说,尽量使用java标准类型

2.要保留浮点的准确值,用oracle.sql.NUMBER,不要用java.lang.Double

3.为了提高性能时,用oracle.sql.NUMBER,不要用java.math.BigDecimal

4.JDK6以后,用java.sql.Date和java.sql.Timestamp表时间

5.Oracle特有的就用Oracle的,符合规范的就用java的

 

sql里的null会转为java的null,所以不要使用原始类型获取null值,会变成0

 

PreparedStatement pstmt = conn.prepareStatement(
  "SELECT * FROM EMPLOYEES WHERE COMMISSION_PCT = ?"); //这里无法处理null的传入,会报错
pstmt.setNull(1, java.sql.Types.VARCHAR); 

 

ResultSet rset = stmt.executeQuery("SELECT employees.department_id,
department.department_id FROM employees, department");
rset.getInt("employees.department_id");//这个不能用全名,或者用序号,或者起个别名

 getBoolean会在底层等于0时返回false,其他值都返回true

 

void setNull(int parameterIndex, int sqlType)不能用于REF, ARRAY, or STRUCT

void setNull(int parameterIndex, int sqlType, String sql_type_name) 这个可以

 

 

你可能感兴趣的:(oracle)