setObject将对象二进制数据存入数据库之后,读取时类型丢失

冰蓝2099 2012-04-12 12:28:33
PreparedStatement setObject 之后将对象存入数据库,读取时无法强制转换回来


PreparedStatement stmt = connection.prepareStatement("UPDATE tb set aaa=? where id=1 ");
stmt.setObject(1, new myClass());
stmt.executeUpdate();


当我读取该对象时


PreparedStatement stmt = connection.prepareStatement("select aaa from tb where id=1");
ResultSet res = stmt.executeQuery();

res.next();
Object obj = res.getObject(1);
trace(obj);

竟然不是 myClass@xxxxxx
而是 [B@xxxxxx

这是怎么回事?

myClass my = (myClass)obj;

也会报错! 说无法强制转换!
请高手指教


...全文
222 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰蓝2099 2012-04-12
  • 打赏
  • 举报
回复
楼上大锅 给力!
游一游走一走 2012-04-12
  • 打赏
  • 举报
回复
[B@xxxxxx表示你读取的是字节数组
你还需要做进一步的处理,请参考下以下代码,是针对mysql的

public class Test {
/**
* mysql> describe test;
* +-----------+------------+------+-----+---------+----------------+
* | Field | Type | Null | Key | Default | Extra |
* +-----------+------------+------+-----+---------+----------------+
* | id | bigint(20) | NO | PRI | NULL | auto_increment |
* | age | int(11) | YES | | NULL | |
* | firstname | blob | YES | | NULL | |
* | LASTNAME | blob | YES | | NULL | |
* +-----------+------------+------+-----+---------+----------------+
*/
public static void main(String[] args) throws Exception {
Class.forName(com.mysql.jdbc.Driver.class.getName());
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/zjjzyz", "root", "zhangyz");
PreparedStatement ps=conn.prepareStatement("INSERT INTO test(AGE, FIRSTNAME, LASTNAME) VALUES(0, ?, ?)");
ps.setObject(1, new Myclass("张", "zhang"));
ps.setObject(2, new Myclass("三", "san"));
ps.execute();
ps.close();
ps=conn.prepareStatement("SELECT id, AGE, FIRSTNAME, LASTNAME FROM test") ;
ResultSet rs=ps.executeQuery();

while(rs.next()){
System.out.println(readObjectFromDataBase(rs.getBytes(3)));
System.out.println(readObjectFromDataBase(rs.getBytes(4)));
}
rs.close();
ps.close();
conn.close();
}
static Object readObjectFromDataBase(byte[] bs) throws Exception{
ObjectInputStream in=new ObjectInputStream(new ByteArrayInputStream(bs));
return in.readObject();
}
}

class Myclass implements Serializable {
private static final long serialVersionUID = 1L;
private String zhongWen;
private String english;

public Myclass(String zhongWen, String english) {
super();
this.zhongWen = zhongWen;
this.english = english;
}

public String getZhongWen() {
return zhongWen;
}

public void setZhongWen(String zhongWen) {
this.zhongWen = zhongWen;
}

public String getEnglish() {
return english;
}

public void setEnglish(String english) {
this.english = english;
}

@Override
public String toString() {
return "Myclass [english=" + english + ", zhongWen=" + zhongWen + "]";
}
}
冰蓝2099 2012-04-12
  • 打赏
  • 举报
回复
Blob 类型 存二进制数据
  • 打赏
  • 举报
回复
表tb 的aaa是神马类型?
龙四 2012-04-12
  • 打赏
  • 举报
回复
字段是什么类型

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧