用jdbc获取oracle中的序列值,并且在oracle中一张表中的两个值可能会用到sequence的值,举个例子:
用户注册-->生成交易账户 | |||||
说明 | 在用户注册的最后一步,提示注册成功之前,增加一个动作。 往TWX_FAC_TRADE_ACCO表插入两条数据。 交易帐号N_TRADE_ACCO取SEQ_TWX_TRADE_ACCO值。 有效标志C_IS_VALID默认为1,有效。 |
比如这种问题,那么我们该如何操作呢?不多说了,直接上代码
1、先有一段连接数据库的代码
public Connection getConnection() throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.3:1521:orcl", "jsfund_weixin", "jsfund_weixin");
return conn;
}
数据库的第一种连接是写死的,如果在项目中多处用到了这个方法,更改起来很不方便,那么就可以采用第二种方法:
@Autowired
private RealPathResolver realPathResolver;
public Connection getConnection() throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url=PropertyUtils.getPropertyValue(new File(realPathResolver.get(Constants.PLUG_PATH_DATABASE)),"jdbc.url");
String username=PropertyUtils.getPropertyValue(new
File(realPathResolver.get(Constants.PLUG_PATH_DATABASE)),"jdbc.username");
String password=PropertyUtils.getPropertyValue(new
File(realPathResolver.get(Constants.PLUG_PATH_DATABASE)),"jdbc.password");
Connection conn = DriverManager.getConnection(url,username,password);
return conn;
}
2、取出sequence的值,并且放到一个变量中
try{
Connection conn = getConnection();
String vsql = "select SEQ_TWX_FAC_TRADE_ACCO.nextval as sid from dual";
PreparedStatement pstmt =(PreparedStatement)conn.prepareStatement(vsql);
ResultSet rs=pstmt.executeQuery();
rs.next();
int sid=rs.getInt(1);
rs.close();
pstmt.close();
}catch(Exception e){
}
3、插入取出的sequence值
String sql="insert into TWX_FAC_TRADE_ACCO(N_ID,N_USER_ID,N_TRADE_ACCO,C_TYPE,D_REGSIT_TIME,C_IS_VALID,D_CREATE_TIME,V_CREATOR,V_LAST_MENDER,D_LAST_MODIFY,V_REMARKS) values(:id,:userId,:accoId,'N',to_date(:registerTime,'yyyy-MM-dd'),1,to_date(:createTime,'yyyy-MM-dd'),:creator,:lastMender,to_date(:lastModify,'yyyy-MM-dd'),:remarks)";
Session session =this.getSession();
Query query =session.createSQLQuery(sql.toString());
query.setInteger("id", sid);
query.setInteger("userId", userId);
query.setInteger("accoId", sid);
query.setInteger("creator", creator);
query.setInteger("lastMender", lastMender);
query.setString("remarks", remarks);
Date now =new Date();
String time =new SimpleDateFormat("yyyy-MM-dd").format(now);
query.setString("registerTime", time);
query.setString("createTime", time);
query.setString("lastModify", time);
int r=query.executeUpdate();
if(r>0){
result=true;
}
}catch(Exception ex){
System.out.println(ex.getMessage());
result =false;
}
return result;