yinseye01
yinseye01
2017-08-18 15:47
采纳率: 90.9%
浏览 2.8k
已采纳

求助,java插入oralce自增主键方法

求助,我在java开发中想做一个上传文件的功能,上传之后该文件的信息会被保存在数据库中,由于之前用的是mysql数据库,所以现在save的时候报错ID为null,我在oracle中建了自增序列,但是java中的方法不知道怎么写,如图我想要一个插入自增主键ID的方法,上面那个是我自增的序列,之前用mysqlz这样插入就行了现在oracle不知道咋改了。。本人菜鸟求大神们说详细点,拜谢!图片说明

昨天太晚了,提的问题一直不显示害的我图都没上囧,之前用mysqlz这样插入就行了现在oracle我的setID的地方怎么改呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

12条回答 默认 最新

  • xionglangs
    编程爱好者熊浪 2017-08-19 05:35
    已采纳

    先判断你的序列建好了吗,用plsql查下 select 序列名.nextval from dual;查询下序列。如果可以查到,你在添加的时候id对应的?直接放序列名.nextval就可以了,你这里报错很正常,你这就写个那个,java并不知道你是什么类型。需要写成字符串,之后oracle数据在执行这个sql的时候自然会去找这个序列的下一个值,就像调用上面那个sql一样;如果没有查到,先建一个序列。

    点赞 评论
  • qq_24353627
    小动物koi 2017-08-19 00:44

    主动插入值:序列.nextval

    点赞 评论
  • Small_Mouse0
    鼠小 2017-08-19 00:51

    用insert语句添加内容,在ID的地方写成:自增序列名.NEXT_VAL,其他位置依然输入你要增加的内容

    参考:https://zhidao.baidu.com/question/305161359.html

    点赞 评论
  • u014183545
    yu-le 2017-08-19 01:22

    insert into your_table (id) values (your_sequences.nextval)
    这样就可以插入自增序列,your_sequences 这个是你自己建的序列

    点赞 评论
  • zy841958835
    cloudyzhao 2017-08-19 01:43

    你先在oracle里创建一个序列,
    如序列名为:table_name_seq
    表名为:table_name
    你想为id字段使用自增长序列,则用jdbc执行以下sql:
    insert table_name(id,name) values(table_name_seq.nextval,'hello')

    点赞 评论
  • qq_37011270
    qq_37011270 2017-08-19 01:48

    mysql好像是建表的时候直接设置的你可以 百度一下 或者你也可以另外建一个表 我举个例子 就两列 objectno (主键) count 第一个可以是时间 比如20170819
    然后你每次要新增的时候可以调一个select方法 select搜索完 对结果进行判断 有就更新 没有就插入 再返回你需要的 就按你当前的时间来 (比如到日期) 如果搜索到就获取出来
    如果没有就新增 这样的话你也可以自定义你的流水号 比较方便 看起来舒服一点
    我之前也是用oracle 换了sqlserver之后也不习惯 你可以用mysql自带的也可以用这种 自带的 网上一百度应该就有

    点赞 评论
  • qq_37011270
    qq_37011270 2017-08-19 01:55

    create sequence xx increment by 1 (增长量)
    start with n(从哪个开始)
    maxvalue m(最大值)
    nocycle(不循环)
    no cache(不缓冲)
    sql: 当前是xx.curval
    下一个 是xx.nextval

    点赞 评论
  • u010510350
    YongqiangGao 2017-08-19 02:02

    首先要新建一个序列,然后在要插入数据的地方,调用新建的序列号,nextval是下一列数字,current是当前列的数字

    例如:
    CREATE sequence seq (--创建序列)
    start with 1 ( --初始值从1开始)
    然后执行
    然后插入数据的时候
    insert into usreinfo(id,username) values(seq.nextval,'Oracle')

    注意:seq.nextval 为下一列,seq.current 为当前列

    点赞 评论
  • qq_37011270
    qq_37011270 2017-08-19 02:02

    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;
    
    }
    

    }
    再给你个我这两天自己写的 不知道你啊用的上 我也是个菜鸡 经常来问问题。。。

    点赞 评论
  • xionglangs
    编程爱好者熊浪 2017-08-19 05:58

    图片说明

    点赞 评论
  • qnbl20044
    qnbl20044 2017-10-16 03:07
     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();
        }
    
    点赞 评论
  • qq_39136033
    高浪浪. 2021-07-07 20:56

    sys_guid()是个啥

    点赞 评论

相关推荐