9.6、更新数据库
前面主要介绍如何实现对数据库的查询操作,但在许多应用中需要实现对数据库的更新,这主要涉及修改、插入和删除等(即SQL语句中的Insert、Update、Delete、Creat、Drap等)。仍然通过创建Statement对象来实现,但不再调用executeQuery()方法,而是使用executeUpdate()方法。
要点F:正确区分Statement类中的executeQuery()、execute()和executeUpdate()方法的用法:(1)
executeQuery() 执行一般的SQL查询语句(即SELECT语句)并返回Resultset对象;(2)execute()可以执行各种SQL查询语句,并可能返回多个结果集(这一般主要发生在执行了返回多个结果集的存储过程时),此时可以采用Resultset类的getResultSet()来获得当前的结果集;(3)executeUpdate()执行对数据库的更新的SQL语句或DDL语句。
9.6.1 对表中的记录进行操作
对一个表中的记录可以进行修改、插入和删除等操作,分别对应SQL的Update、Insert、Delete操作;executeUpdate()方法的输入参数仍然为一个String对象(即所要执行的SQL语句),但输出参数不是ResultSet对象,而是一个整数(它代表操作所影响的记录行数)。
Statement stmt=con.createStatement();
stmt.executeUpdate("Update bookTable set Title='Java2' where Author='zhang'");
stmt.executeUpdate("Delete from bookTable where Author='zhang'");
stmt.executeUpdate("Insert into bookTable(BookID,Author,Title) values(1,'Li Ming','Java2')"); //未给出的列,其值为NULL
程序实例:对数据库中的表进行更新操作并显示操作前后的结果
import java.sql.*;
public class DBUpdateSetTest
{
public static void main(String args[])
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:studlist");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from student");
System.out.println("Result before executeUpdate");
while(rs.next())
{
System.out.println(rs.getString("name"));
System.out.println(rs.getString("age"));
}
stmt.executeUpdate("Update student set name='Yang' where id=0");
stmt.executeUpdate("Delete from student where id=2");
stmt.executeUpdate("Insert into student(id,name,age,sex) values(2,'zhang',30,true)");
rs=stmt.executeQuery("select * from student");
System.out.println("Result After executeUpdate");
while(rs.next())
{
System.out.println(rs.getString("name"));
System.out.println(rs.getString("age"));
}
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
9.6.2 创建和删除表
创建和删除一个表主要对应于SQL的Create Table和Drop Table语句。这可以通过Statement对象的executeUpdate()方法来完成。
① 创建表
Statement stmt=con.createStatement();
stmt.executeUpdate("create table TableName(ID integer, Name VARCHAR(20), Age integer)");
stmt.executeUpdate("Insert into TableName(ID, Name, Age) values(1,'Yang Ming',30)");
② 删除表
Statement stmt=con.createStatement();
stmt.executeUpdate("Drop Table TableName");
9.6.3 增加和删除表中的列
对一个表的列进行更新操作主要是使用SQL的ALTER Table语句。对列所进行的更新操作会影响到表中的所有的行。
① 增加表中的一列
Statement stmt=con.createStatement();
stmt.executeUpdate("Alter Table TableName add Column Address VarChar(50)");
stmt.executeUpdate("Update TableName set Address='Beijing,China' where ID=1");
② 删除表中的一列
Statement stmt=con.createStatement();
stmt.executeUpdate("Alter Table TableName Drop Column Address");
stmt.executeQuery("Select * from TableName");
9.6.4 利用PreparedStatement对象实现数据更新
同SQL查询语句一样,对数据更新语句时也可以在PreparedStatement对象上执行。使用PreparedStatement对象,只需传递一次SQL语句,可以多次执行它,并且可以利用数据库的预编译技术,提高执行效率。另外也可以接受参数。
PreparedStatement pstmt=con.prepareStatement("Update TableName set Address='Beijing,China' where ID >1");
pstmt.executeUpdate();