使用java语言操作,如何来实现MySQL中Blob字段的存取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java语言操作,如何来实现MySQL中Blob字段的存取相关的知识,希望对你有一定的参考价值。

参考技术A /**
* Title: BlobPros.java
* Project: test
* Description: 把图片存入mysql中的blob字段,并取出
* Call Module: mtools数据库中的tmp表
* File: C:downloadsluozsh.jpg
* Copyright: Copyright (c) 2003-2003
* Company: uniware
* Create Date: 2002.12.5
* @Author: ChenQH
* @version 1.0 版本*
*
* Revision history
* Name Date Description
* ---- ---- -----------
* Chenqh 2003.12.5 对图片进行存取
*
* note: 要把数据库中的Blob字段设为longblob
*
*/

//package com.uniware;

import java.io.*;
import java.util.*;
import java.sql.*;

public class BlobPros

private static final String URL = "jdbc:mysql://10.144.123.63:3306/mtools?user=wind&password=123&useUnicode=true";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private File file = null;

public BlobPros()



/**
* 向数据库中插入一个新的BLOB对象(图片)
* @param infile 要输入的数据文件
* @throws java.lang.Exception
*/
public void blobInsert(String infile) throws Exception

FileInputStream fis = null;
try

Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);

file = new File(infile);
fis = new FileInputStream(file);
//InputStream fis = new FileInputStream(infile);
pstmt = conn.prepareStatement("insert into tmp(descs,pic) values(?,?)");
pstmt.setString(1,file.getName()); //把传过来的第一个参数设为文件名
//pstmt.setBinaryStream(2,fis,(int)file.length()); //这种方法原理上会丢数据,因为file.length()返回的是long型
pstmt.setBinaryStream(2,fis,fis.available()); //第二个参数为文件的内容
pstmt.executeUpdate();

catch(Exception ex)

System.out.println("[blobInsert error : ]" + ex.toString());

finally

//关闭所打开的对像//
pstmt.close();
fis.close();
conn.close();



/**
* 从数据库中读出BLOB对象
* @param outfile 输出的数据文件
* @param picID 要取的图片在数据库中的ID
* @throws java.lang.Exception
*/

public void blobRead(String outfile,int picID) throws Exception

FileOutputStream fos = null;
InputStream is = null;
byte[] Buffer = new byte[4096];

try

Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);
pstmt = conn.prepareStatement("select pic from tmp where id=?");
pstmt.setInt(1,picID); //传入要取的图片的ID
rs = pstmt.executeQuery();
rs.next();

file = new File(outfile);
if(!file.exists())

file.createNewFile(); //如果文件不存在,则创建

fos = new FileOutputStream(file);
is = rs.getBinaryStream("pic");
int size = 0;
/* while(size != -1)

size = is.read(Buffer); //从数据库中一段一段的读出数据
//System.out.println(size);
if(size != -1) //-1表示读到了文件末
fos.write(Buffer,0,size);
*/
while((size = is.read(Buffer)) != -1)

//System.out.println(size);
fos.write(Buffer,0,size);



catch(Exception e)

System.out.println("[OutPutFile error : ]" + e.getMessage());

finally

//关闭用到的资源
fos.close();
rs.close();
pstmt.close();
conn.close();



public static void main(String[] args)

try


BlobPros blob = new BlobPros();
//blob.blobInsert("C:Downloadsluozsh1.jpg");
blob.blobRead("c:/downloads/1.jpg",47);

catch(Exception e)

System.out.println("[Main func error: ]" + e.getMessage());


MySQL学习——Java连接MySQL数据库

1、什么是JDBC?

  JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

2、JDBC原理

SUN提供访问数据库规范称为JDBC,而生产厂商提供的实现类称为驱动。

JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!

每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

3、JDBC开发步骤

1)注册驱动

2)获得连接

3)获得语句执行者

4)执行sql语句

5)处理结果

6)释放资源

3、导入驱动jar包

1)新建项目,命名为WEB08_JDBC,

2)创建lib目录,右击New->Folder,命名为lib,用于存放当前项目需要的所有jar包,

把jar包复制到当前项目的lib文件夹下,

3)选择jar包右击执行Build Path,直至当前目录下出现一个小奶瓶标志

4、测试sql注入问题(运用到JUnit单元测试的内容)

mysql下web08数据库中tbl_user表中有两条数据,根据用户信息登录。

具体代码实现如下:

 1 package cn.itheima.test;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 
10 import org.junit.Test;
11 
12 public class TestLogin {
13         @Test
14         public void testLogin(){
15             try {
16                 login1("zhangsan","999");
17             } catch (Exception e) {
18                 e.printStackTrace();
19             }
20         }
21         public void login1(String username,String password) throws ClassNotFoundException, SQLException{
22             /*
23              * 用户登录方法
24              */
25             //1.注册驱动
26             Class.forName("com.mysql.jdbc.Driver");
27             //2.获取连接
28             Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/web08","root","12345");
29             //3.编写sql语句
30             String sql="select * from tbl_user where uname=? and upassword=?";
31             //4.创建预处理对象
32             PreparedStatement pstmt=conn.prepareStatement(sql);
33             //5.设置参数(给占位符)
34             pstmt.setString(1, username);
35             pstmt.setString(2, password);
36             //6.执行查询操作
37             ResultSet rs=pstmt.executeQuery();
38             //7.对结果集进行处理
39             if(rs.next()){
40                 System.out.println("恭喜您,"+username+"登录成功!");
41             }else{
42                 System.out.println("账号或密码错误!");
43             }
44             if(rs!=null) rs.close();
45             if(pstmt!=null) pstmt.close();
46             if(conn!=null) conn.close();            
47         }
48     }

右击Run As->JUnit Test,执行结果为:恭喜您,zhangsan登录成功!

 

以上是关于使用java语言操作,如何来实现MySQL中Blob字段的存取的主要内容,如果未能解决你的问题,请参考以下文章

java之Hibernate框架实现数据库操作

Go语言使用gorm对MySQL进行性能测试

mysql四:数据操作

COM如何实现语言互操作?

mysql五:数据操作

MySQL之表操作