很抱歉,如果我的问题不具体或者之前已经回答过。我试着寻找它并提出更好的方式,但这是最准确的方法。
我用Java开发了一个程序,我用以下方式在数据库中插入一个新行:
INSERT INTO table_name VALUES (?,?,?)
问题是我在程序的很多部分都有这个查询,现在我决定在我的表中添加第四列。我是否必须在程序中使用新问号更新EVERY SINGLE查询?如果我不这样做,它会崩溃。
在这些情况下,最好的方法是什么?
答案 0 :(得分:5)
YES。
您需要添加额外的?
(参数占位符),因为您使用的是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
答案 1 :(得分:2)
我是否必须在程序中使用新问号更新每个查询?
可能。在更新每一个查询时,您应该做的是将它们封装到一个对象中,可能使用数据源模式,例如Table Data Gateway或Row Data Gateway。这样您Don't Repeat Yourself以及下次更新表时,您只有一个地方可以更新查询。
答案 2 :(得分:0)
由于您使用的语法,您可能会遇到一些问题。我指的是缺少列名。一旦更改表结构,您的INSERT
查询就会失败。
如果您使用了以下语法:
INSERT INTO table_name (C1, C2, C3) VALUES (?,?,?)
假设您的新列具有正确的默认值,那么它将正常工作。