JDBC学习(三)
在知道怎么完成与Mysql数据库链接操作和提交SQL到Mysql数据库以后,还需要知道怎么从Mysql数据库获取信息。
接口 ResultSet
ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
SQL返回的表格信息按列表的形式被封装在ResultSet中。通过遍历可以将其获取。
//通过遍历ResultSet对象,获取表格信息。
public class Demo1 {
private static List<Book> listBook3()throws Exception{
List<Book> booklist = new ArrayList<Book>();
Connection con = DbUtil.getConnection();
System.out.println("获取链接成功....");
String sql="select *from t_book";
PreparedStatement pre = con.prepareStatement(sql);
System.out.println("获取SQL预编译对象成功.....");
ResultSet rs = pre.executeQuery();
System.out.println("获取数据库表ResultSet接口对象成功.....");
System.out.println("开始遍历....");
while(rs.next()){
int id = rs.getInt("id");
String bookName = rs.getString("bookName");
float price = rs.getFloat("price");
String author = rs.getString("author");
int bookType = rs.getInt("bookTypeId");
Book book = new Book(id, bookName, price, author, bookType);
booklist.add(book);
}
System.out.println("开始成功....");
DbUtil.colse(rs,pre, con);
return booklist;
}
public static void main(String[] args)throws Exception{
//lsitBook();
List<Book> bookList = listBook3();
for(Book book :bookList){
System.out.println(book);
}
}
}
接口 CallableStatement
用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
{call <procedure-name>[(<arg1>,<arg2>, ...)]}
IN 参数值是使用继承自 PreparedStatement 的 set 方法设置的。在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通过此类提供的 get 方法获取的。
CallableStatement 可以返回一个 ResultSet 对象或多个 ResultSet 对象。多个 ResultSet 对象是使用继承自 Statement 的操作处理的。
为了获得最大的可移植性,某一调用的 ResultSet 对象和更新计数应该在获得输出参数的值之前处理
//通过CallableStatement对象,获取表格具体某项数据
public class Demo1 {
private static String getBookName(int id)throws Exception{
Connection con = DbUtil.getConnection();
String sql="{CALL pro_getBookNameById(?,?)}";
CallableStatement catemt = con.prepareCall(sql);
catemt.setInt(1, id);
catemt.registerOutParameter(2, Types.VARCHAR);
catemt.execute();
String bookName = catemt.getString("bN");
DbUtil.colse(catemt, con);
return bookName;
}
public static void main(String[] args)throws Exception {
System.out.println("图书名字:" +getBookName(4));
}
}