我这样做是为了从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数据库以获取自动增量列。 或者我是否需要跳过插入表中的自动增量列,如果是这样,我如何跳过不插入表中的特定列?
请帮助。
答案 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中的自动编号将提供适当的值。