求助,我在java开发中想做一个上传文件的功能,上传之后该文件的信息会被保存在数据库中,由于之前用的是mysql数据库,所以现在save的时候报错ID为null,我在oracle中建了自增序列,但是java中的方法不知道怎么写,如图我想要一个插入自增主键ID的方法,上面那个是我自增的序列,之前用mysqlz这样插入就行了现在oracle不知道咋改了。。本人菜鸟求大神们说详细点,拜谢!
昨天太晚了,提的问题一直不显示害的我图都没上囧,之前用mysqlz这样插入就行了现在oracle我的setID的地方怎么改呢?
先判断你的序列建好了吗,用plsql查下 select 序列名.nextval from dual;查询下序列。如果可以查到,你在添加的时候id对应的?直接放序列名.nextval就可以了,你这里报错很正常,你这就写个那个,java并不知道你是什么类型。需要写成字符串,之后oracle数据在执行这个sql的时候自然会去找这个序列的下一个值,就像调用上面那个sql一样;如果没有查到,先建一个序列。
主动插入值:序列.nextval
用insert语句添加内容,在ID的地方写成:自增序列名.NEXT_VAL,其他位置依然输入你要增加的内容
参考:https://zhidao.baidu.com/question/305161359.html
insert into your_table (id) values (your_sequences.nextval)
这样就可以插入自增序列,your_sequences 这个是你自己建的序列
你先在oracle里创建一个序列,
如序列名为:table_name_seq
表名为:table_name
你想为id字段使用自增长序列,则用jdbc执行以下sql:
insert table_name(id,name) values(table_name_seq.nextval,'hello')
mysql好像是建表的时候直接设置的你可以 百度一下 或者你也可以另外建一个表 我举个例子 就两列 objectno (主键) count 第一个可以是时间 比如20170819
然后你每次要新增的时候可以调一个select方法 select搜索完 对结果进行判断 有就更新 没有就插入 再返回你需要的 就按你当前的时间来 (比如到日期) 如果搜索到就获取出来
如果没有就新增 这样的话你也可以自定义你的流水号 比较方便 看起来舒服一点
我之前也是用oracle 换了sqlserver之后也不习惯 你可以用mysql自带的也可以用这种 自带的 网上一百度应该就有
create sequence xx increment by 1 (增长量)
start with n(从哪个开始)
maxvalue m(最大值)
nocycle(不循环)
no cache(不缓冲)
sql: 当前是xx.curval
下一个 是xx.nextval
首先要新建一个序列,然后在要插入数据的地方,调用新建的序列号,nextval是下一列数字,current是当前列的数字
例如:
CREATE sequence seq (--创建序列)
start with 1 ( --初始值从1开始)
然后执行
然后插入数据的时候
insert into usreinfo(id,username) values(seq.nextval,'Oracle')
注意:seq.nextval 为下一列,seq.current 为当前列
package com.company.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.company.exception.ConnectionException;
public class GetLiuShuiNo{
public String getObjectNo(String jiwei) {
Date date =new Date();
String t="";
String objectno="";
GetLiuShuiNo liushuido=new GetLiuShuiNo();
if(jiwei.equals("year")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
t=sdf.format(date);
}else if(jiwei.equals("month")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
t=sdf.format(date);
}else if(jiwei.equals("day")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
t=sdf.format(date);
}else if(jiwei.equals("hour")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
t=sdf.format(date);
}else if(jiwei.equals("minute")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
t=sdf.format(date);
}
objectno=liushuido.shiji(t);
return objectno;
}
public String shiji(String t) {
String sql = "select * from objectno3 where riqi='"+t+"'";
int result=0;
GetLiuShuiNo liushuido=new GetLiuShuiNo();
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
connection = FirstDo.getConnection();
pstmt = connection.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs.next()) {
result=rs.getInt("number");
System.out.println(result+"....");
int tt=liushuido.update( (result+1), t);
System.out.println(tt);
}else{
result=liushuido.insert(t);
System.out.println(result+"...");
int gg=liushuido.update(2, t);
System.out.println("gg"+gg);
}
} catch (ConnectionException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 依次关闭相关资源
FirstDo.close(null, pstmt, connection);
}
String pinjie="";
if(result<10){
pinjie="00"+String.valueOf(result);
}else if(result<100){
pinjie="0"+String.valueOf(result);
}else{
pinjie=String.valueOf(result);
}
String objectno=t+pinjie;
return objectno;
}
public int insert(String t) {
int result = 0;
String sql = "insert into objectno3 values('"+t+"','1')";
Connection connection = null;
PreparedStatement pstmt = null;
try {
connection = FirstDo.getConnection();
pstmt = connection.prepareStatement(sql);
result = pstmt.executeUpdate();
} catch (ConnectionException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 依次关闭相关资源
FirstDo.close(null, pstmt, connection);
}
return result;
}
public int update(int number,String riqi){
int result = 0;
String num=String.valueOf(number);
String sql="update objectno3 set number='"+num+"' where riqi='"+riqi+"'";
Connection connection = null;
PreparedStatement pstmt = null;
try {
connection = FirstDo.getConnection();
pstmt = connection.prepareStatement(sql);
result = pstmt.executeUpdate();
} catch (ConnectionException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 依次关闭相关资源
FirstDo.close(null, pstmt, connection);
}
return result;
}
}
再给你个我这两天自己写的 不知道你啊用的上 我也是个菜鸡 经常来问问题。。。
public String getSeq() {//这个是序列方法
String sql="select 序列.nextval as seqid from dual";
List<Map<String, Object>> resultlist =null;
try{
resultlist = jdbcTemplate.queryForList(sql);
if(resultlist.size()==1){
Map<String, Object> map = resultlist.get(0);
BigDecimal seqid = (BigDecimal) map.get("SEQID");
return seqid.toString();
}
}catch(Exception ex)
{//序列不存在 自动创建一个
String createseq="create sequence 序列 minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1";
jdbcTemplate.update(createseq);
resultlist = jdbcTemplate.queryForList(sql);
if(resultlist.size()==1){
Map<String, Object> map = resultlist.get(0);
BigDecimal seqid = (BigDecimal) map.get("SEQID");
return seqid.toString();
}
}
return "";
}
public String addThenReturnRowid(BxTestTravelT model) throws DAOException {//这个是插入方法
model.setCurversion(0L);
model.setTravelid(new Long(getSeq()));//查询下一个序列号存进对象
//插入数据
StringBuffer sql = new StringBuffer("insert into 表("
+" id "
+"……"
+") values("
+":id"
+":……"
+ ")" );
KeyHolder keyHolder = new GeneratedKeyHolder();
SqlParameterSource sps=new BeanPropertySqlParameterSource(model);
namedParameterJdbcTemplate.update(sql.toString(), sps,keyHolder);
oracle.sql.ROWID id=(ROWID) keyHolder.getKeys().get("ROWID");
return id.stringValue();
}
sys_guid()是个啥