码迷,mamicode.com
首页 > 数据库 > 详细

java之操作MySql操作大对象

时间:2015-04-22 20:26:17      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

1.数据库表结构如下

  技术分享

  这里数据类型根据插入数据的大小进行选择。

1.具体实现如下,这里主要将图片转为二进制存入数据库

 1 Connection conn=null;
 2         PreparedStatement st=null;
 3         String sql="insert into users(username,password,regdate,img) values(?,?,?,?)";
 4         try {
 5             if(conn==null){
 6                 conn = db.getConnection();
 7             }
 8             st = conn.prepareStatement(sql);
 9             File file=new File(this.getClass().getClassLoader().getResource("../../").getPath()+"1.jpeg");
10             InputStream input=new BufferedInputStream(new FileInputStream(file));
11             st.setString(1,user.getUsername());
12             st.setString(2, user.getPassword());
13             st.setDate(3, new Date(user.getRegdate().getTime()));
14             st.setBinaryStream(4, input,(int)file.length());//这里需要注意,后面的file.length()数据类型为long,在这里需要将其强转为int类型
15             int result=st.executeUpdate();             
16             if(result>0){
17                 return true;
18             }
19         } catch (SQLException e) {
20             e.printStackTrace();
21         } catch (FileNotFoundException e) {
22             e.printStackTrace();
23         } finally{
24             if(st!=null)
25             db.close(st);
26             if(conn!=null)
27             db.close(conn);
28         }
29         return false;

3.注意:

  PreparedStatement对象中的setBinaryStream(int index,inputstream input,long)方法在jdk1.6存在,但是在mysql的jdbc中并没有实现,如果后面的文件长度没有转换为int的话则会报以下错误

java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V

4.从数据库中取出二进制文件

 

 1 Connection conn = null;
 2         PreparedStatement st = null;
 3         String sql = "select * from users where id=?";
 4         try {
 5             if (conn == null) {
 6                 conn = JdbcUtil.getConnection();
 7             }
 8             st = conn.prepareStatement(sql);
 9             st.setInt(1, user.getId());
10             File file = new File(this.getClass().getClassLoader().getResource("../../").getPath()+ "back.jpeg");
11             OutputStream output = new BufferedOutputStream(new FileOutputStream(file));
12             ResultSet result = st.executeQuery();
13             while (result.next()) {
14                 byte[] by = new byte[1024];
15                 int i = 0;
16                 InputStream input = result.getBinaryStream(5);//取出二进制数据    
17                 try {
18                     while ((i = input.read(by)) != -1)
19                         output.write(by, 0, i);//通过输出流写到文件中  
20                 } catch (IOException e) {
21                     e.printStackTrace();
22                 }
23 
24             }
25 
26         } catch (SQLException e) {
27             e.printStackTrace();
28         } catch (FileNotFoundException e) {
29             e.printStackTrace();
30         } finally {
31             if (st != null)
32                 JdbcUtil.close(st);
33             if (conn != null)
34                 JdbcUtil.close(conn);
35         }
36         return false;

 

java之操作MySql操作大对象

标签:

原文地址:http://www.cnblogs.com/jameszbp/p/4448306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!