2

抱歉,如果我的问题不具体或之前已经回答过。我尝试寻找它并寻求更好的询问方式,但这是最准确的方式。

我用 Java 开发了一个程序,在其中我通过以下方式将新行插入到我的数据库中:

INSERT INTO table_name VALUES (?,?,?)

问题是我在程序的许多部分都有这个查询,现在我决定在我的表中添加第四列。我是否必须在程序中使用新问号更新每个查询?如果我不这样做,它会崩溃。

在这些情况下,最好的方法是什么?

4

3 回答 3

5

是的。

您需要添加额外的?参数占位符),因为您正在使用implicit INSERT语句。这意味着您没有指定要插入值的表的列名。

INSERT INTO table_name VALUES (?,?,?)
// the server assumes that you are inserting values for all
// columns in your table
// if you fail to add value on one column. an exception will be thrown

下次创建INSERT语句时,请确保在其上指定列名,以便通过添加额外列来更改表时,不会更新所有占位符。

INSERT INTO table_name (Col1, col2, col3) VALUES (?,?,?)
// the server knows that you are inserting values for a specific column
于 2013-01-10T01:00:00.693 回答
2

我是否必须在程序中使用新问号更新每个查询?

大概。在更新这些查询中的每一个时,您应该做的是将它们封装到一个对象中,可能使用数据源模式,例如Table Data GatewayRow Data Gateway。这样您就不会重复自己,并且下次更新表时,您只有一个地方可以更新查询。

于 2013-01-10T00:59:59.520 回答
0

由于您使用的语法,您可能会遇到一些问题。我指的是缺少列名。INSERT一旦您更改表结构,您的查询就会开始失败。

如果您使用了以下语法: INSERT INTO table_name (C1, C2, C3) VALUES (?,?,?) 假设您的新列具有适当的默认值,那么它就可以正常工作。

于 2013-01-10T00:59:07.530 回答