JDBC对与BLOB字段数据的处理
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import org.junit.Test;
public class JDBCTest {
/**
* 读取blob数据:
* 1.使用getBlob方法获取Blob对象
* 2.使用Blob对象的getBinaryStream()方法得到输入流,再使用IO输出流操作即可
* */
@Test
public void testReadBlob(){
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = JDBCTools.getConnection();
String sql = "select flow_id, "
+ "student_name studentName,"
+ "location,grade,picture from examstudent where "
+ "flow_id = 2";
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
int id = resultSet.getInt(1);
String name = resultSet.getString(2);
String location = resultSet.getString(3);
int grade = resultSet.getInt(4);
Blob picture = resultSet.getBlob(5);
System.out.println(id + ", "+ name +", "+location+", "+grade +", "+picture);
InputStream in =picture.getBinaryStream();
OutputStream out = new FileOutputStream("flower.jpg");
byte [] buffer = new byte[1024];
int len = 0;
while((len= in.read(buffer)) != -1){
out.write(buffer, 0, len);
}
out.close();
in.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally{
}
}
/**
* 插入Blob类型的数据必须使用PreparedStatement:
* 因为BLOB类型的数据无法使用字符串拼写的。
*
* 调用setBlob(int index ,InputStream inputstream)
* */
@Test
public void testInsertBlob(){
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JDBCTools.getConnection();
String sql = "insert into examstudent(student_name,location,grade,picture) "
+ "values(?,?,?,?) ";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "TOM");
preparedStatement.setString(2, "SHENZHEN");
preparedStatement.setInt(3, 98);
InputStream inputStream = new FileInputStream("116474.jpg");
preparedStatement.setBlob(4, inputStream);
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, preparedStatement, connection);
}
}
/**
* 获取数据库自动生成的主键
* */
@Test
public void testGetkeyValue() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = JDBCTools.getConnection();
String sql = "insert into examstudent(student_name,location,grade) "
+ "values(?,?,?) ";
//preparedStatement = connection.prepareStatement(sql);
//使用重载的prepareStatement(sql,flag)
//来生成prepareStatement对象
preparedStatement = connection.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, "TOM");
preparedStatement.setString(2, "SHENZHEN");
preparedStatement.setInt(3, 98);
preparedStatement.executeUpdate();
//通过preparedStatement的。getGeneratedKeys()方法获取包含了新生成的主键的ResultSet对象
resultSet = preparedStatement.getGeneratedKeys();
if(resultSet.next()){
System.out.println(resultSet.getObject(1));
}
ResultSetMetaData rsmd = resultSet.getMetaData();
for(int i = 0; i<rsmd.getColumnCount(); i++){
System.out.println(rsmd.getColumnName(i+1));
}
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(resultSet, preparedStatement, connection);
}
}
}
----这里边主要遇到的问题
因mysql数据库驱动版本太低,导致抛出bug
今天在向mysql数据库中写入大文本时遇到了一个bug
Exception in thread “main” java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.setCharacterStream(ILjava/io/InputStream;J)V is abstract
这里可以更新mysql的驱动程序版本即可
猜你喜欢
转载自wangyaweinihao.iteye.com/blog/2326238
今日推荐
周排行