来自TARENA的教程上的一个例子:package core20.sql3;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.allanlxf.util.JdbcUtil;/**
* Add your description here.
*
* @author alan
* @version 1.0
*
*/
public class ImageLibraryService {
public void addImage(long id, String imageName, String path)
throws SQLException {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null; try {
con = JdbcUtil.getConnection();// 这个连接是正确的
con.setAutoCommit(false); String sql = "INSERT INTO ImageLibrary(id, name, image)";
sql += " VALUES(?,?,empty_blob())";
ps = con.prepareStatement(sql); ps.setLong(1, id);
ps.setString(2, imageName); ps.executeUpdate();
JdbcUtil.close(ps, null); ps = con.prepareStatement("SELECT image FROM ImageLibrary WHERE id = ? FOR UPDATE");
ps.setLong(1, id);
rs = ps.executeQuery(); if (rs.next()) {
Blob image = rs.getBlob(1); OutputStream out = image.setBinaryStream(0); BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
BufferedInputStream bufferedIn = new BufferedInputStream(
new FileInputStream(path));
int c;
while ((c = bufferedIn.read()) != -1) {
bufferedOut.write(c);
}
bufferedIn.close();
bufferedOut.close();
}
con.commit();
} catch (Exception e) {
e.printStackTrace();
try {
con.rollback();
} catch (SQLException ex) {
}
throw new SQLException(e.getMessage());
} finally {
JdbcUtil.close(rs, ps, con);
}
} public void restoreImage(long id, String fileName) throws SQLException {
Connection con = null;
Statement st = null;
ResultSet rs = null; try {
con = JdbcUtil.getConnection(); String sql = "SELECT image FROM ImageLibrary WHERE id = " + id;
st = con.createStatement();
while (rs.next()) {
Blob image = rs.getBlob("image"); BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(fileName));
BufferedInputStream in = new BufferedInputStream(
image.getBinaryStream()); int c;
while ((c = in.read()) != -1) {
out.write(c);
}
in.close();
out.close();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, st, con);
}
} public static void main(String[] args) throws Exception {
ImageLibraryService service = new ImageLibraryService(); if (args.length == 3) {
service.addImage(Long.parseLong(args[0]), args[1], args[2]);
} else {
service.restoreImage(Long.parseLong(args[0]), args[1]);
}
}}执行的时候用添加参数1 top1 top1.jpg结果就出这个问题,那老师在演示时就完全没有这样的问题。不知道是怎么回事。java.lang.NullPointerException
at com.allanlxf.util.JdbcUtil.close(JdbcUtil.java:27)
at core20.sql3.ImageLibraryService.addImage(ImageLibraryService.java:45)
at core20.sql3.ImageLibraryService.main(ImageLibraryService.java:120)
Exception in thread "main" java.lang.NullPointerException
at com.allanlxf.util.JdbcUtil.close(JdbcUtil.java:43)
at core20.sql3.ImageLibraryService.addImage(ImageLibraryService.java:76)
at core20.sql3.ImageLibraryService.main(ImageLibraryService.java:120)求高手解决。
驱动:ojdbc6.jar
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.allanlxf.util.JdbcUtil;/**
* Add your description here.
*
* @author alan
* @version 1.0
*
*/
public class ImageLibraryService {
public void addImage(long id, String imageName, String path)
throws SQLException {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null; try {
con = JdbcUtil.getConnection();// 这个连接是正确的
con.setAutoCommit(false); String sql = "INSERT INTO ImageLibrary(id, name, image)";
sql += " VALUES(?,?,empty_blob())";
ps = con.prepareStatement(sql); ps.setLong(1, id);
ps.setString(2, imageName); ps.executeUpdate();
JdbcUtil.close(ps, null); ps = con.prepareStatement("SELECT image FROM ImageLibrary WHERE id = ? FOR UPDATE");
ps.setLong(1, id);
rs = ps.executeQuery(); if (rs.next()) {
Blob image = rs.getBlob(1); OutputStream out = image.setBinaryStream(0); BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
BufferedInputStream bufferedIn = new BufferedInputStream(
new FileInputStream(path));
int c;
while ((c = bufferedIn.read()) != -1) {
bufferedOut.write(c);
}
bufferedIn.close();
bufferedOut.close();
}
con.commit();
} catch (Exception e) {
e.printStackTrace();
try {
con.rollback();
} catch (SQLException ex) {
}
throw new SQLException(e.getMessage());
} finally {
JdbcUtil.close(rs, ps, con);
}
} public void restoreImage(long id, String fileName) throws SQLException {
Connection con = null;
Statement st = null;
ResultSet rs = null; try {
con = JdbcUtil.getConnection(); String sql = "SELECT image FROM ImageLibrary WHERE id = " + id;
st = con.createStatement();
while (rs.next()) {
Blob image = rs.getBlob("image"); BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(fileName));
BufferedInputStream in = new BufferedInputStream(
image.getBinaryStream()); int c;
while ((c = in.read()) != -1) {
out.write(c);
}
in.close();
out.close();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, st, con);
}
} public static void main(String[] args) throws Exception {
ImageLibraryService service = new ImageLibraryService(); if (args.length == 3) {
service.addImage(Long.parseLong(args[0]), args[1], args[2]);
} else {
service.restoreImage(Long.parseLong(args[0]), args[1]);
}
}}执行的时候用添加参数1 top1 top1.jpg结果就出这个问题,那老师在演示时就完全没有这样的问题。不知道是怎么回事。java.lang.NullPointerException
at com.allanlxf.util.JdbcUtil.close(JdbcUtil.java:27)
at core20.sql3.ImageLibraryService.addImage(ImageLibraryService.java:45)
at core20.sql3.ImageLibraryService.main(ImageLibraryService.java:120)
Exception in thread "main" java.lang.NullPointerException
at com.allanlxf.util.JdbcUtil.close(JdbcUtil.java:43)
at core20.sql3.ImageLibraryService.addImage(ImageLibraryService.java:76)
at core20.sql3.ImageLibraryService.main(ImageLibraryService.java:120)求高手解决。
驱动:ojdbc6.jar
解决方案 »
- Not setter found for property 'sessionFactory' in class ......
- 怎么把这个搜索判断改进一下
- JSTL不会使用Foreach ,帮一下了?
- eclipse3.6.1 tomcat7.0 jdk6.0开发jsp web出现HTTP Status 404
- 各位高手快救救我吧!!!
- 高分请教JTable
- spring mvc HandlerExceptionResolver视图转发无效
- 请问如何使虚拟目录支持servlet?
- 哪位达人有struts的API离线文档?
- 关于struts中的set push方法,什么时候用呢
- java对象是引用,为何我传入的stmt对象,没有传回
- ssh+jbpm整合
路径没有问题,用过完整路径。我在1楼写的那个异常好像有问题。报的是java.sql.SQLException: 调用中的无效参数。还有我在百度提问有一个和这个差不多的例子,http://zhidao.baidu.com/question/320918615.html。也是这种异常。不明白是为什么。
这个异常打印异常栈信息最下边一条是
blob.setBinaryStream(0);这句有错。实在是想不出来为什么了。视频中老师的代码一模一样的,却执行得很好。
应该这样子格式关闭。
if(rs == null){
rs.close() ;
}