日期:2014-05-16  浏览次数:20559 次

图片以二进制保存到Oracle,取出并显示到页面示例
  用过数据库的人都知道,像文件、图片、视频等这些大对象可以用两种方式来存取:1.将这些对象放到服务器的某个文件中,将它们的路径保存到数据库;2.直接将这些文件对象以二进制形式保存到数据库中,用时再通过流对象读取出来。
  可能大多数人采用第一种方式,这里我主要试下第二种方式保存数据,原理主要是通过Oracle里面的BLOB数据类型来实现。
  这个示例主要是将页面的学生信息录入数据库,然后点击查看按钮马上可以查看当前保存用户的资料,实现截图如下:

 








  新建一张学生表,字段如下:



  Student类
 
/**
 * 学生类
 * 
 */
public class Student {
	private int id;
	private String sex;
	private String username;
	private String picName;

	public String getPicName() {
		return picName;
	}

	public void setPicName(String picName) {
		this.picName = picName;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String toString() {
		return "id: " + id + " username: " + username + " sex: " + sex;
	}
}
  

 
  Oracle数据库连接
 
/**
 * 与Oracle数据库连接
 * 
 */
public class OracleConnection {
	private static String ojdbcURL = "jdbc:oracle:thin:@localhost:1521:xe";
	private static String ojdbcDriver = "oracle.jdbc.driver.OracleDriver";
	private static String userName = "czc";
	private static String password = "netjava";
	private static Connection connec;

	public static Connection getConnec() {
		if (connec != null) {
			return connec;
		}
		try {
			Class.forName(ojdbcDriver);
			connec = DriverManager.getConnection(ojdbcURL, userName,     password);
			System.out.println("与oracle数据库连接成功...");
		} catch (Exception e) {
			System.out.println("与oracle数据库连接失败...");
			e.printStackTrace();
		}
		return connec;
	}
}
  


  Student操作类
 
/**
 * 数据操作
 */
public class StudentDAO {

	/**
	 * 将学生信息保存到数据库
	 * 
	 * @param stu:学生对象
	 * @return :是否成功
	 */
	public boolean savaStuMsg(Student stu) {
		try {
			// 取得数据库连接对象
			Connection connec = OracleConnection.getConnec();
			// 写插入SQL
			String sql = "insert into student(name,sex,picture) values(?,?,?)";
			// 得到预编译对象
			PreparedStatement pstm = connec.prepareStatement(sql);
			pstm.setString(1, stu.getUsername());
			pstm.setString(2, stu.getSex());
			// 创建一个文件输入流对象
			FileInputStream fins = new FileInputStream(stu.getPicName());
			// 将图片以二制数据保存到数据库
			pstm.setBinaryStream(3, fins, fins.available());
			pstm.addBatch();
			pstm.executeBatch();
			System.out.println("学生信息保存成功!");
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

	/**
	 * 根据学生名字查询学生信息
	 * 
	 * @param username:姓名
	 * @return
	 */
	public Student getStuMsg(String username) {
		try {
			Connection connec = OracleConnection.getConnec();
			// 注:where后varchar字段必须加''
			String sql = "select id,sex from student where name='" + username
					+ "'";
			Statement stmt = connec.createStatement();
			ResultSet rset = stmt.executeQuery(sql);
			Student stu = new Student();
			if (rset.next()) {
				stu.setId(rset.getInt("id"));
				stu.setSex(rset.getString("sex"));
				stu.setUsername(username);
			}
			return stu;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}