JDBC基础(四)

更新表

假设Coffee Break咖啡馆成功开业一周后,老板想通过输入每种咖啡的销售数量来更新COFFEES表的SALES列。这时就可用如下SQL语句更新一行数据:

 

String updateString = "UPDATE COFFEES " +
	"SET SALES = 75 " + 
	"WHERE COF_NAME LIKE 'Colombian'";

使用Statement对象stmt,下面的JDBC代码将执行updateString中的SQL语句:

stmt.executeUpdate(updateString);

执行后,COFFEES表如下所示:

COF_NAME SUP_ID PRICE SALES TOTAL
Colombian 101 7.99 75 0
French_Roast 49 8.99 0 0
Espresso 150 9.99 0 0
Colombian_Decaf 101 8.99 0 0
French_Roast_Decaf 49 9.99 0 0

这里还没更新TOTAL列,因此它仍为0。

现在我们来选择更新过的行,检索COF_NAME和SALES列的值,然后输出这些数据:

String query = "SELECT COF_NAME, SALES FROM COFFEES " +
	       "WHERE COF_NAME LIKE 'Colombian'";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
		String s = rs.getString("COF_NAME");
		int n = rs.getInt("SALES");
		System.out.println(n + " pounds of " + s +
 						  " sold this week.");
}

执行上面的程序将输出:

75 pounds of Colombian sold this week.

由于WHERE子句的限制,所以在结果集rs中只有一行,从而也只有一行输出。因此可以编写没有while循环的代码:

rs.next();
String s = rs.getString(1);
int n = rs.getInt(2);
System.out.println(n + " pounds of " + s + " sold this week.");

即使结果集中只有一行也要用next方法访问。创建ResultSet对象时光标定位在第一行的上面。第一次调用next方法时光标将定位在rs的第一行(本例只有一行)。上面的代码只调用next一次,因此如果有另外的行将不会访问到。

现在来更新TOTAL列,将本周销售量加到现有的迄今销售量,然后输出迄今销售量:

String updateString = "UPDATE COFFEES " +
		      "SET TOTAL = TOTAL + 75 " + 
		      "WHERE COF_NAME LIKE 'Colombian'";
stmt.executeUpdate(updateString);
String query = "SELECT COF_NAME, TOTAL FROM COFFEES " +
				   "WHERE COF_NAME LIKE 'Colombian'";
ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
		String s = rs.getString(1);
		int n = rs.getInt(2);
		System.out.println(n + " pounds of " + s + " sold to date.");
}

注意,本例使用列索引代替列名,传递给getString的索引是1(结果集的第一列是COF_NAME),传递给getInt的索引是2(结果集的第二列是TOTAL)。一定要注意,数据库表的列索引和结果集的列索引是有区别的。例如,TOTAL是COFFEES表的第5列,但在上例查询生成的结果集中是第二列。

 

你可能感兴趣的:(sql,jdbc)