我正在学习OCPJP认证,实际上我正在参与JDBC章节。我知道我可以用两种方式更新数据库:第一种是使用JDBC API,特别是ResultSet类中的updatexxx方法;第二个是通过execute方法发送一个Statement,这样DBMS就会自己执行更新。所以,假设我有一个名为&#34的表格;联系人"我想更新" phoneNo"字段到" 1234567890"其中"名称"字段等于" George"。请注意,我使用的是MySQL。这个
之间有什么区别(如果有的话)ResultSet resultset = statement.executeQuery("SELECT * FROM contacts WHERE name=\"George\"");
resultset.updateString("phoneNo", "1234567890");
updateRow();
这个?
statement.executeUpdate("UPDATE contacts SET phoneNo=\"1234567890\" WHERE name=\"George\"");
我应该何时使用第一种方法,何时使用第二种方法?我为什么要选择其中一个呢? 谢谢:D
答案 0 :(得分:0)
基本上,当您有大量更新时,您将使用executeUpdate,并让数据库服务器正常工作。像:
statement.executeUpdate("UPDATE products SET price=price*10 WHERE category=100");
使用updateRow,您必须处理程序中的每一行。
反过来,updateRow可以更简单地设置某些列,并且您不必强制进行奇怪的字符串操作以使sql update语句正确。
错误答案:
如果你研究JDBC API,你会看到很多接口。 executeQuery
是否与update
一起使用取决于实施情况。 API表示对于executeUpdate:
Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.
“可能”不是“必须”。所以这取决于数据库驱动程序实现的质量。如果我记得很清楚,在executeQuery中使用update时,MySQL驱动程序会抛出异常。所以你应该在任何情况下使用适当的。
答案 1 :(得分:0)
int executeUpdate(String SQL): - 它返回在执行SQL语句期间在db中更新的行数。我们可以使用此方法执行SQL查询,如INSERT,UPDATE或DELETE语句。
ResultSet executeQuery(String SQL): - 返回ResultSet对象。当我们想在db。中执行SELECT查询时,我们可以使用这个方法。
答案 2 :(得分:0)
两个选项都可以成功更新您的数据库。但是您的第二个选项ExecuteUpdate
更好,原因如下:
1)在选项2中,大部分工作都是由数据库服务器完成的,这是首选,因为这是数据库的工作
2)第一个选项要求从数据库服务器获取数据,在Java程序中操作,然后发送回数据库。您正在向DB服务器发送多个请求。在第二个选项中,只有一步。
3)在第一个选项中,您使用SELECT * ....
,这不是一个好习惯,因为您正在检索不必要的数据。您应该只检索所需的列,而不是所有列。即SELECT PhoneNo
如果您要编写代码以获得最佳性能,则应使用选项2,因为您只执行一个请求,并且只将相关数据传递到数据库服务器