处理异常和警告 处理异常和警告 处理异常和警告 处理异常和警告
4.3 数据库操作
con.close();
}
catch(Exception ex){
System.out.println(ex.getMessage() );
ex.printStackTrace ();
} }
}
该例程运行结果如下 查询结果
Mike 45 Florida Five Street [email protected] Steven 40 Inthesky [email protected] Adam 35 Fly away [email protected] Eve 72 Long walk for ever [email protected] Oliven 54 Rose road 123 [email protected] Luven 68 Ok good luck [email protected]
4.3 数据库操作
数据库操作包括查询和更新操作 在 处理查询 一节中讲到的查询都是返回结果集 通过结果集我们可以输出查询的结果 数据库的更新操作包括 记录的修改 插入和删除 表的创建和删除 增加和删除表中的列
4.3.1 检索结果集
通常执行SQL 查询语句会返回一个 ResultSet 对象 使用该对象 可将查询结果输出 显示给用户
ResultSet 对象包括查询语句返回的一个表 表中存放了查询获得的结果 每一个表我 们都可以假设有一个数据指针存在 最初 指针指向第一条记录之前 ResultSet 对象的 next 方法用于将指针下移一条记录 第一次使用next 方法可将指针指向结果集的第一条记录 next 方法返回值为 true 或 false 如果为 true 则表示指针成功指向了一条记录 此时可对 该行记录进行访问 为false 则表示已经没有可读记录
在访问结果集时 可以使用ResultSet 对象的 getXXX 方法来读取当前记录中的数据 如getString 方法可将当前记录中的数据以字符串形式返回 getInt 方法可将当前记录中的 数据以整数形式返回
在下面的例程4-8 中 通过执行一个数据库中的存储过程获得一个结果集 输出存储 过程的查询结果
例程 4-8 import java.sql.*;
class outputResultSet{
public static void main(String argv[]){
String url="jdbc:odbc:testDSN";
String name address email;
try{
//加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//建立连接
Connection con=DriverManager.getConnection(url "sa" "");
//创建 CallableStatement 对象
CallableStatement cs=con.prepareCall("{call testquery()}");
ResultSet rs=cs.executeQuery();
//获取结果集中的列名及其类型 while(rs.next()){
name=rs.getString("employeeName");
address=rs.getString("employeeAddress");
email=rs.getString("employeeEmail");
System.out.println(name+" "+address+" "+email);
}
con.close();
}
catch(Exception ex){
System.out.println(ex.getMessage() );
ex.printStackTrace ();
4.3.2 数据库更新操作
数据库的更新包括 记录的修改 插入和删除 表的创建和删除 增加和删除表中的 列等操作 这些操作涉及到的SQL 语句有 CREATE DELETE DROP INSERT UPDATE 等 数据库更新操作在Statement 对象上能够完成 执行 SQL 更新语句可使用 executeUpdate 方法
executeUpdate 方法的参数是一个字符串对象 该字符串代表需要执行的 SQL 语句 其返回值是一个整数 该整数代表DELETE INSERT 和 UPDATE 操作所影响的记录的条 数 对于其他不返回结果的SQL 语句 该方法返回值为零
1. 创建表
创建表使用SQL 的 CREATE TABLE 语句 如
st.executeUpdate("CREATE TABLE customer(cName VARCHAR(10) cAge SMALLINT cAddress VARCHAR(20)");
该语句将创建一个名为customer 的表 该表中包括的字段有 cName 字符串型 长 度为10 cAge 整型 cAddress 字符串型 长度为 20
2. 删除表
删除表使用SQL 的 DROP TABLE 语句 如 st.executeUpdate("DROP TABLE customer");
3. 增加表中的列
向表中添加列使用SQL 的 ALTER TABLE 语句 如
st.executeUpdate("ALTER TABLE customer ADD COLUMN cEmail VARCHAR(20)");
该语句向表中添加名为cEmail 的列 其类型为字符串型 长度为 20 4. 删除表中的列
删除表中的列也是使用SQL 的 ALTER TABLE 语句 如
st.executeUpdate("ALTER TABLE customer DROP COLUMN cEmail");
5. 插入记录
插入记录使用SQL 的 INSERT 语句 如
st.executeUpdate("INSERT INTO customer(cName cAge cAddress cEmail) values('Mike Joden' 45 'New York Three Street' '[email protected]'");
6. 修改记录
修改记录使用SQL 的 UPDATE 语句 如
st.executeUpdate("UPDATE customer SET cAge=34 WHERE cNAme='Mike'");
7. 删除记录
修改记录使用SQL 的 DELETE 语句 如
st.executeUpdate("DELETE FROM customer WHERE cNAme='Mike'");
在下面的例程4-8 中 先创建了一个名为 customer 的表 然后向表中添加了列 最后 向表中插入了三条记录 最后将插入的记录输出
例程 4-9 import java.sql.*;
class testDatabase{
public static void main(String argv[]){
String url="jdbc:odbc:testDSN";
String name age address email str;
try{
//加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//建立连接
Connection con=DriverManager.getConnection(url "sa" "");
//创建 Statement 对象
Statement st=con.createStatement();
//创建数据库表
str="CREATE TABLE customer(cName VARCHAR(10) cAge SMALLINT cAddress VARCHAR(20))";
st.executeUpdate(str);
//向表中添加列
str="ALTER TABLE customer ADD COLUMN cEmail VARCHAR(20)";
st.executeUpdate(str);
//插入三条记录
str="INSERT INTO customer(cName cAge cAddress cEmail) values('Mike Joden' 45 'New York Three Street' '[email protected]')";
st.executeUpdate(str);
str="INSERT INTO customer(cName cAge cAddress cEmail) values('H.J.Scolly' 27 'Florlida NewBridge Down' '[email protected]')";
st.executeUpdate(str);
str="INSERT INTO customer(cName cAge cAddress cEmail) values('Cheng Jun' 28 'ChengDuShiYangShiJie23#' '[email protected]')";
st.executeUpdate(str);
ResultSet rs=st.executeQuery("SELECT * FROM customer");
//获取结果集中的列名及其类型 while(rs.next()){
name=rs.getString("cName");
age=rs.getString("cAge");
address=rs.getString("cAddress");
email=rs.getString("cEmail");
System.out.println(name+" "+age+" "+address+" "+email);
}
con.close();
}
catch(Exception ex){
System.out.println(ex.getMessage() );
ex.printStackTrace ();
} }
}
该例程运行结果如下
Mike Joden 45 New York Three Stree [email protected] H.J.Scolly 27 Florlida NewBridge D [email protected] Cheng Jun 28 ChengDuShiYangShiJie [email protected]