Java 插入到表中,若表不存在,则创建表,然后插入

Java 插入到表中,若表不存在,则创建表,然后插入,java,mysql,jdbctemplate,Java,Mysql,Jdbctemplate,我们需要一个java代码,它可以在表中插入行,如果表不存在,那么它将创建一个新的行,然后插入到该表中 就像我们跟踪每个请求到我们的服务器,然后将其保存在表中一样。 表名应该类似于请求月名*year*,它是动态传递的。其目的是使每个月的表格独立于其他表格 我们使用的代码是 try{ dao.insertTracking(object, year, month); }catch(BadSqlGrammarException e){ dao.createTable(year, month)

我们需要一个java代码,它可以在表中插入行,如果表不存在,那么它将创建一个新的行,然后插入到该表中

就像我们跟踪每个请求到我们的服务器,然后将其保存在表中一样。 表名应该类似于请求月名*year*,它是动态传递的。其目的是使每个月的表格独立于其他表格

我们使用的代码是

try{
  dao.insertTracking(object, year, month);
}catch(BadSqlGrammarException e){
    dao.createTable(year, month);
    dao.insertracking(object, year, month);
}catch(Exception e){
    e.printStackTrace();
}
问题是BadSqlGrammarException也可以在许多其他情况下抛出

所以我的问题是如何有效地处理这种情况,而不捕获一般化异常,然后再进行处理

此外,我们可以首先检查表的存在性,但这会给系统带来沉重的负担,因为每天都要处理大量的请求


使用jdbctemplates和/和mysql一起使用。

创建一个函数,首先检查表是否存在。显示如何使用该信息模式。如果该表不存在,请调用另一个函数,该函数将调用您的


创建一个函数,首先检查表是否存在。显示如何使用该信息模式。如果该表不存在,请调用另一个函数,该函数将调用您的


你想稍微改变一下逻辑。如果该表不存在,请创建该表,然后将其插入:

create table if not exists tablename . . .

insert into tablename(cols)
    select values;

如果这样做,则不需要任何条件逻辑。无论表是否已经存在,相同的代码都可以工作。

您想稍微更改一下逻辑。如果该表不存在,请创建该表,然后将其插入:

create table if not exists tablename . . .

insert into tablename(cols)
    select values;

如果这样做,则不需要任何条件逻辑。无论表是否已经存在,相同的代码都可以工作。

使用异常处理来执行预期的业务逻辑通常是一个坏主意,您的问题“问题是BadSqlGrammarException在许多其他情况下也可以抛出。”给出了原因

在createtable方法中,可以首先测试表是否存在,如果存在,则什么也不做


然后,您可以一直调用create table,而不仅仅是在异常情况下。

使用异常处理来执行预期的业务逻辑通常是一个坏主意,您的问题“问题是BadSqlGrammarException也可以在许多其他情况下抛出。”给出了原因

在createtable方法中,可以首先测试表是否存在,如果存在,则什么也不做


然后,您可以一直调用create table,而不仅仅是在异常情况下。

最后通过使用quartz调度程序以所需的时间间隔运行完成。

最后通过使用quartz调度程序以所需的时间间隔运行完成。

每次检查表是否存在时,性能结果会是什么?这是个好主意吗?事实上我读了戈登·林诺夫的答案,我更喜欢这个主意。如果不存在,则创建表要干净得多,然后先询问它是否存在。每次检查表是否存在时,性能结果会如何?这是个好主意吗?事实上我读了戈登·林诺夫的答案,我更喜欢这个主意。若不存在CREATETABLE,那个么首先询问它是否存在会更干净。