JDBC学习(四)
接口 Clob
SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系。SQL CLOB 是内置类型,它将字符大对象 (Character Large Object) 存储为数据库表某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据的逻辑指针而不是数据本身。Clob 对象在它被创建的事务处理期间有效。
CLOB 接口提供一些方法来获取 SQL CLOB (Character Large Object) 值长度、在客户端实现 CLOB 值以及搜索 CLOB 值中的子字符串或 CLOB 对象。接口 ResultSet、CallableStatement 和 PreparedStatement 中的方法(如 getClob 和 setClob)允许编程人员访问 SQL CLOB 值。此外,此接口还拥有更新 CLOB 值的方法。
如果 JDBC 驱动程序支持该数据类型,则必须完全实现 Clob 接口上的所有方法。
public class Demo1 {
//添加文本数据
private static int addBook(Book book)throws Exception{
Connection con = DbUtil.getConnection(); //获取链接对象
String sql ="insert into t_book values(null,?,?,?,?,?)"; //SQL预编译语句
PreparedStatement pre = con.prepareStatement(sql); //获取预编译SQL语句对象
pre.setString(1, book.getBookName()); //写入字符串对象
pre.setFloat(2, book.getPrice()); //写入Float对象
pre.setString(3, book.getAuthor()); //写入字符串对象
pre.setInt(4, book.getBookTyple()); //写入int对象
File context =book.getContext();//获取文件
InputStream inputStream = new FileInputStream(context);
pre.setAsciiStream(5, inputStream, context.length());
int result = pre.executeUpdate(); //判断是否提交SQL语句并更新成功,成功返回1
DbUtil.colse(pre, con); //清除链接,关闭接口
return result;
}
//获取文本数据
public static void getBook(int id)throws Exception{
Connection con = DbUtil.getConnection();
String sql = "select * from t_book where id=?";
PreparedStatement pre = con.prepareStatement(sql);
pre.setInt(1, id);
ResultSet rs = pre.executeQuery();
if(rs.next()){
String bookName = rs.getString("bookName");
float price = rs.getFloat("price");
String author = rs.getString("author");
int bookType = rs.getInt("bookTypeId");
Clob c = rs.getClob("context"); //获取数据
String context = c.getSubString(1, (int)c.length());
System.out.println("图书名称:" + bookName);
System.out.println("图书价格:" + price);
System.out.println("图书作者:" + author);
System.out.println("图书类型:" + bookType);
System.out.println("图书内容:" + context);
}
DbUtil.colse(rs, pre, con);
}
public static void main (String[] args)throws Exception {
//添加文本数据
/*File context = new File("c:/HelloWorld.txt");
Book book = new Book("HellowWorld", 100, "小魏", 1, context);
int result = addBook(book);
if(result==1){
System.out.println("添加成功!");
}else{
System.out.println("添加失败!");
}*/
getBook(6); //获取文本数据
}
}
接口 Blob
SQL BLOB 值在 JavaTM 编程语言中的表示形式(映射关系)。SQL BLOB 是内置类型,它将二进制大对象 (Binary Large Object) 存储为数据库表某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(BLOB) 实现 Blob,这意味着 Blob 对象包含一个指向 SQL BLOB 数据的逻辑指针而不是数据本身。Blob 对象在它被创建的事务处理期间有效。
接口 ResultSet、CallableStatement 和 PreparedStatement 中的方法(如 getBlob 和 setBlob)允许编程人员访问 SQL BLOB 值。Blob 接口提供一些方法来获取 SQL BLOB (Binary Large Object) 值的长度、在客户端实现 BLOB 值以及确定 BLOB 值中某一字节样本的位置。此外,此接口还有更新 BLOB 值的方法。
如果 JDBC 驱动程序支持该数据类型,则必须完全实现 Blob 接口的所有方法。
public class Demo1 {
//添加图片数据
private static int addBook(Book book)throws Exception{
Connection con = DbUtil.getConnection(); //获取链接对象
String sql ="insert into t_book values(null,?,?,?,?,?,?)"; //SQL预编译语句
PreparedStatement pre = con.prepareStatement(sql); //获取预编译SQL语句对象
pre.setString(1, book.getBookName()); //写入字符串对象
pre.setFloat(2, book.getPrice()); //写入Float对象
pre.setString(3, book.getAuthor()); //写入字符串对象
pre.setInt(4, book.getBookTyple()); //写入int对象
File context =book.getContext();//获取文件
InputStream inputStream = new FileInputStream(context);
pre.setAsciiStream(5, inputStream, context.length());
File pic =book.getPic();//获取文件
InputStream input = new FileInputStream(pic);
pre.setAsciiStream(6, input,pic.length());
int result = pre.executeUpdate(); //判断是否提交SQL语句并更新成功,成功返回1
DbUtil.colse(pre, con); //清除链接,关闭接口
return result;
}
//获取图片
public static void getBook(int id)throws Exception{
Connection con = DbUtil.getConnection();
String sql = "select * from t_book where id=?";
PreparedStatement pre = con.prepareStatement(sql);
pre.setInt(1, id);
ResultSet rs = pre.executeQuery();
if(rs.next()){
String bookName = rs.getString("bookName");
float price = rs.getFloat("price");
String author = rs.getString("author");
int bookType = rs.getInt("bookTypeId");
Clob c = rs.getClob("context");
Blob b = rs.getBlob("pic");
FileOutputStream out = new FileOutputStream("d:/pic2.jpg");
out.write(b.getBytes(1, (int)b.length()));
out.close();
String context = c.getSubString(1, (int)c.length());
System.out.println("图书名称:" + bookName);
System.out.println("图书价格:" + price);
System.out.println("图书作者:" + author);
System.out.println("图书类型:" + bookType);
System.out.println("图书内容:" + context);
}
DbUtil.colse(rs, pre, con);
}
public static void main (String[] args)throws Exception {
/*File context = new File("c:/HelloWorld.txt");
File pic = new File("c:/pic1.jpg");
Book book = new Book("HellowWorld", 100, "小魏", 1, context ,pic);
int result = addBook(book);
if(result==1){
System.out.println("添加成功!");
}else{
System.out.println("添加失败!");
}*/
getBook(7);
}
}