当我从数据库中读取blob数据时,我得到了null值。可能的问题是什么?有人能帮我这个忙吗?
Connection con = null;
PreparedStatement psStmt = null;
ResultSet rs = null;
try {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
con =
DriverManager.getConnection("jdbc:oracle:thin:@MyDatabase:1535:XE","password","password");
System.out.println("connection established"+con);
psStmt = con
.prepareStatement("Select Photo from Person where Firstname=?");
int i = 1;
psStmt.setLong(1, "Nani");
rs = null;
rs = psStmt.executeQuery();
InputStream inputStream = null;
while (rs.next()) {
inputStream = rs.getBinaryStream(1);
//Blob blob = rs.getBlob(1);
//Blob blob1 = (Blob)rs.getObject(1);
//System.out.println("blob length "+blob1);//rs.getString(1);
}
System.out.println("bytessssssss "+inputStream);//here i am getting null value.
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}发布于 2014-09-29 15:54:19
我相信您没有使用setString函数将任何值赋给firstname,这会导致null
例如:
ps.preparedStatement("Select photo from person where firstname = ?");
ps.setString(1,"kick"); <----- add this line
system.out.println("bytes "+rs.getBinaryStream(1));另一个建议
不需要在try catch块中使用rs = null;,因为在代码的开头有rs=null;。
变化
InputStream inputStream = null;至
InputStream inputStream = new InputStream();或
摆脱InputStream inputStream = null;
source you should take a look at
发布于 2014-09-29 16:36:57
最明显的错误是使用setLong而不是setString。
然而,有一种做法是致命的:提前声明。在其他语言中,这是一个很好的实践,但在java中,应该声明尽可能接近。
这缩小了你会发现错误的作用域!即inputStream在失败的rs.next()之后被调用--在循环之外。也许是因为找不到任何记录。
这种做法,声明尽可能接近可行,也有助于在这里使用try- with -resources来自动关闭语句和结果集。
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection(
"jdbc:oracle:thin:@MyDatabase:1535:XE","password","password");
System.out.println("connection established"+con);
try (PreparedStatement psStmt = con.prepareStatement(
"Select Photo from Person where Firstname=?")) {
int i = 1;
psStmt.setString(1, "Nani");
try (ResultSet rs = psStmt.executeQuery()) {
while (rs.next()) {
try (InputStream inputStream = rs.getBinaryStream(1)) {
//Blob blob = rs.getBlob(1);
//Blob blob1 = (Blob)rs.getObject(1);
//System.out.println("blob length "+blob1);//rs.getString(1);
Files.copy(inputStream, Paths.get("C:/photo-" + i + ".jpg"));
}
++i;
}
//ERROR System.out.println("bytessssssss "+inputStream);
} // Closes rs.
} // Closes psStmt.
}发布于 2014-09-29 16:52:56
1-在您的代码中设置SQL查询的参数值时,请确保使用适当的字段数据类型。所以在这里你应该使用
psStmt.setString(1, "Nani");而不是
psStmt.setLong(1, "Nani");2-确保查询正确(表名、字段名)。
3-确保表中包含数据。
https://stackoverflow.com/questions/26094885
复制相似问题