如何插入mysql数据库的自动增量列?

时间:2013-12-04 10:24:52

标签: java mysql jdbc

  

我这样做是为了从DTO集合中插入oracle表。

这对oracle来说很好。

List<String> columns = new ArrayList<String>(dashboardDTO.getAttributeMap().keySet());
        String value ="";
        try
        {
            //PreparedStatement ps = con.prepareStatement(sqlquerry);
string qry1 = "select SURFBI_DASHBOARDS_SEQ.NEXTVAL from DUAL";
            int dashboardID = 0;
            Map<String, String> metadatamap = new HashMap<String, String>();
            metadatamap = getTableMetaData(con, "surfbi_dashboards");
            if(EIInfo.DB_TYPE.equalsIgnoreCase("oracle"))
            {
            dashboardID = getNextID(con, qry1);
            }
            System.out.println(dashboardID);
            //attributemap.get("DASHBOARD_ID")
            /*metadatamap.put("dashboard_id", "NUMBER");
            metadatamap.put("dashboard_title", "Varchar2");*/
            String cols="";
            String vals="";
            for(String column:columns )
            {

                if(metadatamap.containsKey(column)){
                    //true

                    cols=cols+column+",";
                    String dataType=metadatamap.get(column);
                    value = dashboardDTO.getAttributeMap().get(column);

                    if(value==null || value== "")
                    {
                        vals = vals+"null ,";
                    }

                    else if(column== "DASHBOARD_ID" && dataType.equalsIgnoreCase("NUMBER"))
                    {
                        vals=vals+ dashboardID +",";
                    }
                    else if(dataType.equalsIgnoreCase("NUMBER"))
                    {
                        vals=vals+ Integer.parseInt(value)+",";
                    }

                    else if (dataType.equalsIgnoreCase("Varchar2"))
                    {
                        vals=vals+"'"+value+"',";
                    }
                    else if (dataType.equalsIgnoreCase("CLOB"))
                    {
                        vals=vals+"'"+value+"',";
                    }
                    else 
                    {
                        vals = vals+"null ,";
                    }
                }
            }
            cols=cols.substring(0, (cols.length()-1));
            vals=vals.substring(0, (vals.length()-1));  
            String sqlquerry = DatabaseQueryGenerator.getInsertQuery("surfbi_dashboards", cols,vals);
            System.out.println(sqlquerry);  

            Statement st = con.createStatement();
            int numbr = st.executeUpdate(sqlquerry);

现在我需要从DTO向MYSQL数据库插入相同的数据,所以我试过这个,我得到的错误就像数据库中不存在表,因为Mysql数据库不支持像oracle中的序列所以下面的陈述

string qry1 = "select SURFBI_DASHBOARDS_SEQ.NEXTVAL from DUAL";
dashboardID = getNextID(con, qry1);

发出错误。 所以我需要一个解决方案,如何将数据插入MYSQL数据库以获取自动增量列。 或者我是否需要跳过插入表中的自动增量列,如果是这样,我如何跳过不插入表中的特定列?

请帮助。

3 个答案:

答案 0 :(得分:1)

这只是替代解决方案的一个例子

mysql表mytable有3列名称,年龄和身份 假设id是一个自动递增的列

insert into mytable(name,age) values('test',1);

如果您插入这些方式,则自动递增的字段会自动递增。

只需跳过自动增加的列名称

答案 1 :(得分:1)

好吧,如果在数据库表中将字段设置为自动增量,那么您不必为应用程序分配任何值,只需为其保留空值(如Kevin所述)。

如果您的字段未在数据库中设置为自动增量,但您希望应用程序处理自动增量,则可以执行以下操作:

SELECT MAX(column1)+1 FROM table

For further information read this

享受探索!

答案 2 :(得分:0)

如果键列设置为null,MySql中的自动编号将提供适当的值。