• 对执行数据库操作类的封装
– 在一个程序中会有很多地方要操作数据库,那么对执行数据库操作同样需要修改。新建ControlDB.java
JDBC对LOB的读写
• 在JDBC中提供了java.sql.Blob和java.sql.Clob,两个类分别代表BLOB与CLOB数据。
– BLOB(Binary Large Object):用于存储大量二进制数据。
– CLOB(Character Large Object):用于存储大量文本数据。
– 可以使用PreparedStatement的setBinaryStream()、setCharacterStream()、setAsciiStream()、setUnicodeStream()等方法将其存入数据库中。
(blobdemo.java),向content列插入大量文本内容,向image列插入一张图片。
– 创建stuinfo表,并添加id字段、姓名字段、简介字段、头像字段等内容,将简介字段设为mediumtext类型,头像字段设置为BLOB类型。
– 首先准备一个文本文件,里面的内容可以自行设置,文本文件命名为“text.txt”;再准备一张图片,命名为“bzc.bmp”。将文本文件与图片放置于src目录之下。新建MyBlobTest.java,添加代码:
pstat=con.prepareStatement("insert into stuinfo(name,content,image) values(?,?,?)");
BufferedReader br=null;
InputStream isimg=null;
pstat.setString(1,“test”);//第一个?对应的参数值
br=new BufferedReader(new FileReader(“src/text.txt"));
• LOB的读取
– 新建MyBlobTestSelect.java,添加代码。
pstat=con.prepareStatement("select * from stuinfo where name=?");
ResultSet rs=null;
pstat.setString(1,"test");
rs=pstat.executeQuery();
JDBC调用存储过程
• JDBC API中定义了一个CallableStatement接口,用于执行SQL存储过程。它是从Connection实例上获得的:CallableStatement cstmt = conn.prepareCall(String sql)
• 说明:
– 参数sql是包含一个或多个 ‘?’ 参数占位符的调用存储过程的SQL语句,类似 {call 存储过程名(?...)}的格式。
示例:使用JDBC调用存储过程来处理结果。
针对MySQL5数据库的存储过程:
• 存储过程调用代码
– 创建CallableStatement对象
CallableStatement cstat;
cstat=con.prepareCall("{call demoSp(?,?)}");
– 给存储过程中的参数输入参数值
cstat.setString(1,"HELLO");
cstat.setInt(2,199);
– 给输出参数指定JDBC类型
cstat.registerOutParameter(2,Types.INTEGER);
• 执行调用存储过程的语句
boolean hadResults=cstat.execute();
当execute()方法返回为真时,有结果集
– 读取结果集
while(hadResults){
ResultSet rs=cstat.getResultSet();
while(rs.next()){
System.out.println(rs.getString(1));
}
hadResults=cstat.getMoreResults();
}
– 读取输出参数的值
int outValue=cstat.getInt(2);
System.out.println(outValue);