java基本上可以任何数据库进行连接,比如:mysql,sqlserver,oracle等,只是连接的方式,驱动不同罢了。
存的问题:一般来讲都是存的路径,如果你非要存也能存,需要把转换成二进制字节,进行存储。
如果强调安全,存二进制。
如果强调方便,存路径。
首先这是一种SB做法,保存到数据库这个很浪费数据库资源, 通常情况下等文件都是用ftp服务器来存储文件的 为什么要用base64进行编码是因为, base64会把文件这个文件转换成字符串, base64编码后得到的是一组字符串, 为什么要用blob类型, 因为这个类型可以存储4GB数据, 数据库中普通的 varchar varchar2 text等类型都有长度的限制
把上传的照片存到服务器下并把路径存入数据库,读取时使用File对象根据数据库内存储的照片路径读取照片。注意from表单的这两个属性enctype="multipart/from-data" method="post"
oracle如下
数据库中提供了两种字段类型 Blob 和 Clob 用于存储大型字符串或二进制数据(如)。
Blob 采用单字节存储,适合保存二进制数据,如文件。
Clob 采用多字节存储,适合保存大型文本数据。
首先创建一个空 Blob/Clob 字段,再从这个空 Blob/Clob字段获取游标,例如下面的代码:
PreparedStatement ps = connprepareStatement( " insert into PICTURE(image,resume) values(,) " );
// 通过oralcesqlBLOB/CLOBempty_lob()构造空Blob/Clob对象
pssetBlob( 1 ,oraclesqlBLOBempty_lob());
pssetClob( 2 ,oraclesqlCLOBempty_lob());
psexcuteUpdate();
psclose();
// 再次对读出Blob/Clob句柄
ps = connprepareStatement( " select image,resume from PICTURE where id= for update " );
pssetInt( 1 , 100 );
ResultSet rs = psexecuteQuery();
rsnext();
oraclesqlBLOB imgBlob = (oraclesqlBLOB)rsgetBlob( 1 );
oraclesqlCLOB resClob = (oraclesqlCLOB)rsgetClob( 2 );
// 将二进制数据写入Blob
FileInputStream inStream = new FileInputStream( " c://imagejpg " );
OutputStream outStream = imgBlobgetBinaryOutputStream();
byte [] buf = new byte [ 10240 ];
int len;
while (len = inStreamread(buf) > 0 ) {
outStreamwrite(buf, 0 ,len);
}
inStreamclose();
outStreamcloese();
// 将字符串写入Clob
resClobputString( 1 , " this is a clob " );
// 再将Blob/Clob字段更新到数据库
ps = connprepareStatement( " update PICTURE set image= and resume= where id= " );
pssetBlob( 1 ,imgBlob);
pssetClob( 2 ,resClob);
pssetInt( 3 , 100 );
psexecuteUpdate();
psclose();
这种代码网上不是一大片吗
public boolean storeImage(File file){try{
// 打开文件
FileInputStream fin = new FileInputStream(file);
// 建一个缓冲保存数据
ByteBuffer nbf = ByteBufferallocate((int) filelength());
byte[] array = new byte[1024];
int offset = 0, length = 0;
// 读存数据
while((length = finread(array)) > 0){
if(length != 1024) nbfput(array,0,length);
else nbfput(array);
offset += length;
}
// 关闭文件
finclose();
// 新建一个数组保存要写的内容
byte[] content = nbfarray();
String sql = "insert into images (bin_data) values () ";
PreparedStatement pstmt = connprepareStatement(sql);
pstmtsetBytes(1,content);
pstmtexecute();
pstmtclose();
}catch(Exception e){
eprintStackTrace();
return false;
}
return true;
}
有一个比较简单的方法可以得到这个类型名称
通过
resultSet = statementexecuteQuery("select image列 from table");
resultSetMetaData = resultSetgetMetaData();
Systemoutprintln(resultStetMetaDatagetColumnClassName(1));
以上就是关于java和数据库可以连接,但是怎么把图片放到数据库中。全部的内容,包括:java和数据库可以连接,但是怎么把图片放到数据库中。、Java 保存图片到数据库时,为什么要对图片进行base64编码、java web中怎么把上传照片额地址存入数据库然后再读出来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)