关于在java中保存image类型的字段的问题
有一个表test,其字段image是image类型的.在java中可以用如下的方法保存:Filefile=newFile("src/down.gif");InputStr...
有一个表test,其字段image是image类型的.在java中可以用如下的方法保存:
File file = new File("src/down.gif");
InputStream input = new FileInputStream(file);
PreparedStatement ps = con.prepareStatement("insert into test (id,image) values (?,?)");
int length = (int)file.length();
ps.setAsciiStream(1, '1');
ps.setAsciiStream(2, input,length);
ps.execute();
con.commit();
但是以上方法不是什么情况下都方便用.在我现在的一个应用中不太方便使用这种方法.我希望使用
Statement stm = con.createStatement();
String sql = "insert into test (id,image) values ('1',image数据)";
stm.execute(sql);
这样的方法来实现。但试了很久都不行,希望高手不吝赐教.
反编译看了,它最后也是放到一个byte数组里,但最后怎么存的我没找到。用statement怎么存一个byte数组啊.
我知道要放到inputStream里,我是在想既然ps.setAsciiStream(2, input,length);
ps.execute();
可以保存,那么inputStream流里面的字节,经过一种怎样的转换后可以象这样insert into test (id,image) values ('1',image转换后的数据)保存呢?
因为我的全部是动态生成的,连哪个数据库,连哪张表,全部是动态的,而且如果我一次要操作300条数据的话,也不一定是全部写入一个表,可能这一条数据写入A数据库的AA表,下一条就写进B数据库的BB表,所以sql语句全部是动态生成的,用PreparedStatement的话相对要麻烦很多,怎个的改动也很大.
最大的不同是同一个数据库不同的表不同的操作我只要一个statement. 但是用preparedstatement我就要每操作一次创建一个preparedstatement 展开
File file = new File("src/down.gif");
InputStream input = new FileInputStream(file);
PreparedStatement ps = con.prepareStatement("insert into test (id,image) values (?,?)");
int length = (int)file.length();
ps.setAsciiStream(1, '1');
ps.setAsciiStream(2, input,length);
ps.execute();
con.commit();
但是以上方法不是什么情况下都方便用.在我现在的一个应用中不太方便使用这种方法.我希望使用
Statement stm = con.createStatement();
String sql = "insert into test (id,image) values ('1',image数据)";
stm.execute(sql);
这样的方法来实现。但试了很久都不行,希望高手不吝赐教.
反编译看了,它最后也是放到一个byte数组里,但最后怎么存的我没找到。用statement怎么存一个byte数组啊.
我知道要放到inputStream里,我是在想既然ps.setAsciiStream(2, input,length);
ps.execute();
可以保存,那么inputStream流里面的字节,经过一种怎样的转换后可以象这样insert into test (id,image) values ('1',image转换后的数据)保存呢?
因为我的全部是动态生成的,连哪个数据库,连哪张表,全部是动态的,而且如果我一次要操作300条数据的话,也不一定是全部写入一个表,可能这一条数据写入A数据库的AA表,下一条就写进B数据库的BB表,所以sql语句全部是动态生成的,用PreparedStatement的话相对要麻烦很多,怎个的改动也很大.
最大的不同是同一个数据库不同的表不同的操作我只要一个statement. 但是用preparedstatement我就要每操作一次创建一个preparedstatement 展开
2个回答
展开全部
觉得还是要用PreparedStatement。觉得你的方向不对了,你反编译setBinaryStream的代码看看吧。
可以说说 你为什么一定要用Statement而就是不用PreparedStatement吗?
难道用PreparedStatement就不能动态生成SQL吗?不明白有什么不同。
"最大的不同是同一个数据库不同的表不同的操作我只要一个statement. 但是用preparedstatement我就要每操作一次创建一个preparedstatement"
我不明白你是怎么做的。我觉得statement可以做的事情preparedstatement同样可以,或者你把你的代码贴出来。
可以说说 你为什么一定要用Statement而就是不用PreparedStatement吗?
难道用PreparedStatement就不能动态生成SQL吗?不明白有什么不同。
"最大的不同是同一个数据库不同的表不同的操作我只要一个statement. 但是用preparedstatement我就要每操作一次创建一个preparedstatement"
我不明白你是怎么做的。我觉得statement可以做的事情preparedstatement同样可以,或者你把你的代码贴出来。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询