JDBC基础学习(三)—处理BLOB类型数据
一、BLOB類型介紹
???? 在MySQL中,BLOB是一個(gè)二進(jìn)制的大型對(duì)象,可以存儲(chǔ)大量數(shù)據(jù)的容器,它能容納不同大小的數(shù)據(jù)。
???? 在MySQL中有四種BLOB類型。
????
??? 實(shí)際使用中根據(jù)需要存入的數(shù)據(jù)大小定義不同的BLOB類型。需要注意的是,如果存儲(chǔ)的文件過(guò)大,數(shù)據(jù)庫(kù)的性能會(huì)下降。
?
二、Java數(shù)據(jù)類型與MySQL類型對(duì)照表
???? 對(duì)于blob,一般用于對(duì)圖片的數(shù)據(jù)庫(kù)存儲(chǔ),原理是把圖片打成二進(jìn)制,然后進(jìn)行的一種存儲(chǔ)方式,在java中對(duì)應(yīng)byte[]數(shù)組。?
???? 對(duì)于boolen類型,在mysql數(shù)據(jù)庫(kù)中,個(gè)人認(rèn)為用int類型代替較好,對(duì)bit操作不是很方便,尤其是在具有web頁(yè)面開(kāi)發(fā)的項(xiàng)目中,表示0/1,對(duì)應(yīng)java類型的Integer較好。
?
三、添加Blob到數(shù)據(jù)庫(kù)
Person.java
public class Person{private int id;private String name;private String city;private int age;private float salary;private byte[] head;public Person(){super();}public Person(int id,String name,String city,int age,float salary,byte[] head){super();this.id = id;this.name = name;this.city = city;this.age = age;this.salary = salary;this.head = head;}//...get、set方法} @Testpublic void testAddPerson() throws Exception{FileInputStream fis = new FileInputStream("1.jpg");byte[] bs = inputStream2Byte(fis);addPerson(new Person(0,"HeHe2","BJ",23,1300,bs));}/** 插入數(shù)據(jù)*/public static void addPerson(Person p) throws Exception{String sql = "insert into person(id,name,city,age,salary,head) values(?,?,?,?,?,?)";JdbcTools.update(sql,p.getId(),p.getName(),p.getCity(),p.getAge(),p.getSalary(),p.getHead());}/** 輸入流轉(zhuǎn)換為字節(jié)數(shù)組* @param inStream* @return* @throws Exception*/public static byte[] inputStream2Byte(InputStream inStream) throws Exception{ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len = inStream.read(buffer)) != -1){outSteam.write(buffer,0,len);}outSteam.close();inStream.close();return outSteam.toByteArray();}JdbcTools.update()方法
/** 通用的增刪改方法* 執(zhí)行SQL語(yǔ)句,使用PreparedStatemnt* @param sql 帶占位符的sql語(yǔ)句* @param args 填寫SQL占位符的可變參數(shù)*/public static void update(String sql,Object...args){Connection con = null;PreparedStatement ps = null;ResultSet rs = null;try{con = JdbcTools.getConnection();ps = con.prepareStatement(sql);for(int i = 0;i < args.length;i++){ps.setObject(i + 1,args[i]);}ps.execute();}catch (Exception e) {e.printStackTrace();}finally{JdbcTools.releaseResource(con,ps,rs);}}???? 在最后BLOb中右鍵另存為圖片即可看到。
轉(zhuǎn)載于:https://www.cnblogs.com/yangang2013/p/5405911.html
總結(jié)
以上是生活随笔為你收集整理的JDBC基础学习(三)—处理BLOB类型数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java中商业数据计算时用到的类BigD
- 下一篇: 20160419 while练习,复习