JDBC学习(四)

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 对象。接口 ResultSetCallableStatement  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 对象在它被创建的事务处理期间有效。

接口 ResultSetCallableStatement  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);

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值