平台是SSH,现在有个字段(不是主键)需要记录sequence中获取的值,不知道怎么获取sequence,直接写select H_sequence.nextval from dual报错,不知道有没有其他方法,谢各位。
报的啥错,可以贴出来
1、首先这是oracle数据库
2、如果你用hibernate,因为dual是oracle的虚拟表 ,因此不能直接用hsql的方式获取数据值
3、建议使用createsqlquery方法获取
4、本身写的SQL是没问题的
不知道你连接数据库用滴是什么方式~!!
public class DataSourceConn extends BasicDataSource{
public DataSource getDataSource() throws SQLException {
DataSource dataSource = null;
super.setDriverClassName("oracle.jdbc.driver.OracleDriver");
super.setUrl("jdbc:oracle:thin:@localhost:1521:orcl");
super.setUsername("SCOTT");
super.setPassword("tiger");
try {
dataSource = super.createDataSource();
} catch (SQLException e) {
e.printStackTrace();
}
return dataSource;
}
}
public class TestJDBC {
protected static Logger logger = Logger.getLogger(GgcsServiceHelper.class);
public static int test() throws Exception {
DataSourceConn conn = new DataSourceConn();
DataSource dataSource = conn.getDataSource();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String sql = "select q_wh_log.nextval from dual";
int queryForInt = jdbcTemplate.queryForInt(sql);
return queryForInt;
}
public static void main(String[] args) {
int testMerge;
try {
testMerge = test();
System.out.println(testMerge);
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我滴代码~!!你可以将序列名改成你滴序列名对照一下~!!然后试一下~!!
oracle 数据库 select rownum from 表名
public String findSeq(){
try {
String sql = "select PATIENT_SEQ.nextval nextvalue from dual";
Integer Seq = (Integer)(this.getSession().createSQLQuery(sql).addScalar("nextvalue", Hibernate.INTEGER) ).uniqueResult();
return Seq.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
或者
如果集成了HibernateDaoSupport还可以使用一下方法:
public String findSeq(){
String queryString = "select PATIENT_SEQ.Nextval nextvalue from dual";
return (String) getHibernateTemplate().find(queryString).get(0);
}
1.先返回list集合getHibernateTemplate().find(queryString)
2.取得list的第一个元素:list.get(0);
3.list.get(*)的结果是ojbect,所以要么强转(String)list.get(0);,要么list.get(0).toString();
select PATIENT_SEQ.nextval nextvalue from dual