BCB实现BLOB字段的读写
C#写入和读取数据库blob字段代码
C#写入和读取数据库blob字段代码====================================== ====================try{OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "*.*|*.*";openFileDialog.CheckFileExists = true;openFileDialog.Title = "选择上传的文件";if (openFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK){return;}FileStream fileStream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read);byte[] fileData = new byte[fileStream.length + 1];fileStream.Read(fileData, 0, (int)fileStream.Length);string sql = "select * from TABLE_NAME where id = '" + id + "'";DataSet ds = OA.RsGet(sql, null);DataRow row;if (ds.Tables[0].Rows.Count > 0){row = ds.Tables[0].Rows[0];}else{row = ds.Tables[0].NewRow();row["ID"] = Guid.NewGuid().T oString("N");ds.Tables[0].Rows.Add(row);}row["FILE"] = fileData;row["otherField"] = roadWidth;if (OA.RsUpdate(ds) > 0){MessageBox.Show("保存成功!");}}catch(Exception exc){MessageBox.Show("保存出错!请检查数据。
bcb文件读写操作
bcb文件读写操作bcb文件读写操作 (转)2010-09-16 16:45在BCB提供的这组文件操作函数中,可分为三种类型,就是:1、文件名函数,2、文件管理函数;3、文件I/O函数。
1、文件名函数文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。
下表列出这些函数及其功能。
函数说明ExpandFileName() 返回文件的全路径(含驱动器、路径)ExtractFileExt() 从文件名中抽取扩展名ExtractFileName() 从文件名中抽取不含路径的文件名ExtractFilePath() 从文件名中抽取路径名ExtractFileDir() 从文件名中抽取目录名ExtractFileDrive() 从文件名中抽取驱动器名ChangeFileExt() 改变文件的扩展名ExpandUNCFileName() 返回含有网络驱动器的文件全路径ExtractRelativePath() 从文件名中抽取相对路径信息ExtractShortPathName() 把文件名转化为DOS的8·3格式MatchesMask() 检查文件是否与指定的文件名格式匹配下面就把这些函数作一一介绍:⑴ExpandFileName()原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName);功能:返回文件的全路径(含驱动器、路径)参数:FileName:要处理的文件名例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:\MyBCB\Sample1.EXE⑵ExtractFileExt()原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName);功能:从文件名中抽取扩展名参数:FileName:要处理的文件名(全路径)例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe"⑶ExtractFileName()原型:extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName);功能:从文件名中抽取不含路径的文件名参数:FileName:要处理的文件名例:ShowMessage(ExtractFileExt("c:\\Winnt\\SOL.EXE"));//显示"SOL.EXE"⑷ExtractFilePath()原型:extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);功能:从文件名中抽取路径名参数:FileName:要处理的文件名例:ShowMessage(ExtractFilePath("Winnt\\SOL.EXE"));//显示"Winnt\"⑸ExtractFileDir()原型:extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);功能:从文件名中抽取目录名(和上个函数不同,不包括最后的"\") 参数:FileName:要处理的文件名例:ShowMessage(ExtractFileDir("Winnt\\SOL.EXE"));//显示"Winnt",注意和上个函数的区别⑹ExtractFileDrive()原型:extern PACKAGE AnsiString __fastcall ExtractFileDrive(const AnsiString FileName);功能:从文件名中抽取驱动器名参数:FileName:要处理的文件名例:ShowMessage(ExtractFileDrive("c:\\Winnt\\SOL.EXE"));//显示"c:"⑺ChangeFileExt()原型:extern PACKAGE System::AnsiString __fastcallChangeFileExt(const System::AnsiString FileName, constSystem::AnsiString Extension);功能:更改文件名的扩展名,不是对真正的文件进行改名,只是对文件名这个字符串进行处理参数:FileName:要改名的文件名,Extension:新的扩展名例:ShowMessage(ChangeFileExt("c:\\Winnt\\SOL.EXE",".OOO"));//显示"c:\winnt\SOL.OOO"⑻ExpandUNCFileName()原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName);功能:返回含有网络驱动器的文件全路径,格式为:\\机器名\共享名\文件名参数:FileName:要处理的文件名例:ShowMessage(ExpandUNCFileName("F:\\Winnt\\SOL.EXE"));/*如果F:是映射的网络驱动器\\NT40\WINNT,则显示"\\NT40\WINNT\SOL.EXE"*/⑼ExtractRelativeP ath()原型:extern PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BaseName, const AnsiString DestName);功能:从文件名中抽取相对路径信息,如"..\sss\ss.asd"这种形式参数:BaseName:基准文件名;DestName:目标文件名例:ShowMessage(ExtractRelativePath("D:\\Source\\c\\1.123"," D:\\Source\\A sm\\dz.asm"));/*显示"..\asm\dz.asm"*/ ⑽ExtractShortPathName()原型:extern PACKAGE AnsiString __fastcallExtractShortPathName(const AnsiString FileName);功能:把文件名转换为DOS的8、3格式参数:FileName:要处理的文件名例:ShowMessage(ExtractShortPathName("E:\\Program Files\\Dual Wheel Mouse\\4dmain.exe"));/*显示"E:\Progra~1\dualwh~1\4dmain.exe"*/⑾MatchesMask()原型:extern PACKAGE bool __fastcall MatchesMask(const AnsiString Filename, const AnsiString Mask);功能:检查文件是否与指定的文件名格式匹配参数:FileName:要处理的文件名;Mask:文件名格式,支持通配符例:ShowMessage(MatchesMask("Lxf.exe","*.?x?));//显示"true"--------------------------------------------------------------------------------2、文件管理函数这类函数包括设置和读取驱动器、子目录和文件的有关的各种操作,下表列出这类操作常用的函数及其功能。
oracle中对blob字段的处理方法
Oracle中对BLOB字段的处理方法详解BLOB(binary large object)是一种可以存储二进制文件的数据类型,常用于保存图片、音频、视频等大型数据。
在Oracle数据库中,BLOB字段的处理方法有以下几个方面:如何创建和插入BLOB字段如何读取和修改BLOB字段如何导出和导入BLOB字段如何使用DBMS_LOB包和UTL_FILE包操作BLOB字段本文将对这些方面进行详细的介绍和示例,帮助读者掌握Oracle中对BLOB字段的处理方法。
一、创建和插入BLOB字段在Oracle中,创建一个包含BLOB字段的表的语法如下:CREATE TABLE table_name (column1 datatype,column2 datatype,...blob_column BLOB,...);其中,blob_column是BLOB字段的名称,可以指定一些存储属性,如表空间、数据块大小、是否禁用行内存储等。
例如:CREATE TABLE t_lob (id NUMBER(4),name VARCHAR2(10),photo BLOB)LOB (photo) STORE AS (TABLESPACE ts_lobCHUNK 8KDISABLE STORAGE IN ROW);这个语句创建了一个名为t_lob的表,其中包含一个名为photo的BLOB字段,该字段存储在ts_lob表空间中,每个数据块大小为8K,且禁用了行内存储,即BLOB数据不会与其他列数据存储在同一行中,而是存储在一个单独的段中。
插入BLOB字段的数据有两种方法:使用EMPTY_BLOB()函数插入一个空的BLOB对象,然后再使用SELECT ... FOR UPDATE语句获取该对象的引用,并通过其提供的方法写入数据。
例如:-- 插入一个空的BLOB对象INSERT INTO t_lob VALUES (1, 'Alice', EMPTY_BLOB());-- 获取该对象的引用DECLAREv_blob BLOB;BEGINSELECT photo INTO v_blob FROM t_lob WHERE id =1FOR UPDATE;-- 写入数据使用TO_BLOB()函数将一个RAW类型的值转换为BLOB类型,并直接插入到表中。
blob字段存储文件并读取
blob字段存储文件并读取文档或图片等文件在数据库表中以blob字段存储并读取的方法:1、将文件以blob形式存放到数据库:参考/topics/330265813CREATE TABLE yuser (ID number,photo BLOB);--首先要创建目录将需要存放到数据库的文件放到该目录中create or replace directory images as 'D:\images';SELECT *FROM dba_directories--然后将这些文件读取存放到数据库declarel_bfilebfile;l_blob blob;begininsert into yuser(ID,photo) values(1,empty_blob())return photo into l_blob;l_bfile:=bfilename('IMAGES','...test.doc');dbms_lob.open(l_bfile,dbms_lob.file_readonly);dbms_lob.loadfromfile(l_blob,l_bfile,dbms_lob.getlength(l_bfile)); dbms_lob.close(l_bfile);commit;end;2.Oracle导出Blob存储的图像或文件到指定目录:参考/dayrl/articles/1595879.html--首先要先创建这些文件读取后存放的目录create or replace directory images2 as 'D:\images2';CREATE OR REPLACE PROCEDURE b_wzzp_dump(locationno INNUMBER,filename IN VARCHAR2) ISl_file utl_file.file_type;l_buffer RAW(32767);l_amount BINARY_INTEGER := 32767;l_pos INTEGER := 1;l_blob BLOB;l_blob_len INTEGER;BEGINSELECT photo INTO l_blob FROM yuser WHERE id = locationno;l_blob_len := dbms_lob.getlength(l_blob);l_file := utl_file.fopen('IMAGES2', filename, 'w',/*l_blob_len*/32767);WHILE l_pos<l_blob_lenLOOPdbms_lob.read(l_blob, l_amount, l_pos, l_buffer);utl_file.put_raw(l_file, l_buffer, TRUE);l_pos := l_pos + l_amount;END LOOP;utl_file.fclose(l_file);EXCEPTIONWHEN OTHERS THENdbms_output.put_line(SQLERRM);IF utl_file.is_open(l_file) THENutl_file.fclose(l_file);END IF;RAISE;END b_wzzp_dump;execute b_wzzp_dump(locationno =>指定表中的哪个文件,filename => filename);上述用到的一些包过程说明:dbms_lob.read——读取文件dbms_lob.read(lob_loc => blob字段,amount =>每次读取的字符数,offset =>从哪开始读取,buffer =>缓存量);dbms_lob.getlength——获取blob对象的长度dbms_lob.getlength(lob_loc =>对应的bLOB字段);utl_file.fopen——打开文件utl_file.fopen(location =>文件所在的目录,filename =>文件名称,open_mode =>打开方式(R/W/A) ,max_linesize =>文件每行最大的字符数,不能超过32767,最小为1,默认为null,表示操作系统运行时指定的值);注:max_linesize不能超过32767,如果超过则提示“ORA-29287: 最大行大小无效”utl_file.put_raw——将raw数据写入文件utl_file.put_raw(file =>文件类型,buffer =>存放raw数据的缓存,autoflush =>是自动刷新缓冲区数据);utl_file.is_open——判断文件是否打开,返回true或falseutl_file.is_open(file =>文件名);utl_file.fclose——关闭文件utl_file.fclose(file =>文件名);。
详解jdbc实现对CLOB和BLOB数据类型的操作
详解jdbc实现对CLOB和BLOB数据类型的操作详解jdbc实现对CLOB和BLOB数据类型的操作1、读取操作CLOB//获得数据库连接Connection con = ConnectionFactory.getConnection();con.setAutoCommit(false);Statement st = con.createStatement();//不需要“for update”ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");if (rs.next()){java.sql.Clob clob = rs.getClob("CLOBATTR");Reader inStream = clob.getCharacterStream();char[] c = new char[(int) clob.length()];inStream.read(c);//data是读出并需要返回的数据,类型是Stringdata = new String(c);inStream.close();}inStream.close();mit();con.close();BLOB//获得数据库连接Connection con = ConnectionFactory.getConnection();con.setAutoCommit(false);Statement st = con.createStatement();//不需要“for update”ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");if (rs.next()){java.sql.Blob blob = rs.getBlob("BLOBATTR");InputStream inStream = blob.getBinaryStream();//data是读出并需要返回的数据,类型是byte[]data = new byte[input.available()];inStream.read(data);inStream.close();}inStream.close();mit();con.close();2、写⼊操作CLOB//获得数据库连接Connection con = ConnectionFactory.getConnection();con.setAutoCommit(false);Statement st = con.createStatement();//插⼊⼀个空对象empty_clob()st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");//锁定数据⾏进⾏更新,注意“for update”语句ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");if (rs.next()){//得到java.sql.Clob对象后强制转换为oracle.sql.CLOBoracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");Writer outStream = clob.getCharacterOutputStream();//data是传⼊的字符串,定义:String datachar[] c = data.toCharArray();outStream.write(c, 0, c.length);}outStream.flush();outStream.close();mit();con.close();BLOB//获得数据库连接Connection con = ConnectionFactory.getConnection();con.setAutoCommit(false);Statement st = con.createStatement();//插⼊⼀个空对象empty_blob()st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())"); //锁定数据⾏进⾏更新,注意“for update”语句ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");if (rs.next()){//得到java.sql.Blob对象后强制转换为oracle.sql.BLOBoracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");OutputStream outStream = blob.getBinaryOutputStream();//data是传⼊的byte数组,定义:byte[] dataoutStream.write(data, 0, data.length);}outStream.flush();outStream.close();mit();con.close();3、读写CLOB/BLOB数据到⽂件TNS:# tnsnames.ora Network Configuration File: d:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora # Generated by Oracle configuration tools.ORADB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)))(CONNECT_DATA =(SID = ORCL)))MYORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = myorcl)))Table:create table TEST_ORALOB(ID VARCHAR2(20),TSBLOB BLOB not null,TSCLOB CLOB not null)测试代码:package mon;import oracle.sql.BLOB;import java.io.*;import java.sql.*;/*** JDBC读写Oracle10g的CLOB、BLOB**/public class TestOraLob {public static void main(String[] args) {insertBlob();queryBlob();}public static void insertBlob() {Connection conn = DBToolkit.getConnection();PreparedStatement ps = null;try {String sql = "insert into test_oralob (ID, TSBLOB, TSCLOB) values (?, ?, ?)";ps = conn.prepareStatement(sql);ps.setString(1, "100");//设置⼆进制BLOB参数File file_blob = new File("C:\\a.jpg");InputStream in = new BufferedInputStream(new FileInputStream(file_blob));ps.setBinaryStream(2, in, (int) file_blob.length());//设置⼆进制CLOB参数File file_clob = new File("c:\\a.txt");InputStreamReader reader = new InputStreamReader(new FileInputStream(file_clob));ps.setCharacterStream(3, reader, (int) file_clob.length());ps.executeUpdate();in.close();} catch (IOException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {DBToolkit.closeConnection(conn);}}public static void queryBlob() {Connection conn = DBToolkit.getConnection();PreparedStatement ps = null;Statement stmt = null;ResultSet rs = null;try {String sql = "select TSBLOB from TEST_ORALOB where id ='100'";stmt = conn.createStatement();rs = stmt.executeQuery(sql);if (rs.next()) {//读取Oracle的BLOB字段InputStream in = rs.getBinaryStream(1);File file = new File("c:\\a1.jpg");OutputStream out = new BufferedOutputStream(new FileOutputStream(file));byte[] buff1 = new byte[1024];for (int i = 0; (i = in.read(buff1)) > 0;) {out.write(buff1, 0, i);}out.flush();out.close();in.close();//读取Oracle的CLOB字段char[] buff2 = new char[1024];File file_clob = new File("c:\\a1.txt");OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file_clob)); Reader reader = rs.getCharacterStream(1);for (int i = 0; (i = reader.read(buff2)) > 0;) {writer.write(buff2, 0, i);}writer.flush();writer.close();reader.close();}rs.close();stmt.close();} catch (IOException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {DBToolkit.closeConnection(conn);}}}注:如果是具体的字符串写⼊CLOB字段,简化写法://设置⼆进制CLOB参数String xxx = "abcdefg";ps.setCharacterStream(3, new StringReader(xxx), xxx.getBytes("GBK").length);ps.executeUpdate();in.close();感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持,如有疑问请留⾔或者到本站社区交流讨论,感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。
BCB第十讲文件读写操作
文件读写操作上一讲我们学习了事件和事件处理函数的有关知识,并为Mp3Collect程序添加的进行记录操作的代码,但是程序还缺少保存记录的功能,以至于当程序退出之后,我们辛苦输入的记录就丢失了,因此在本讲中,我们就首先来学习有关文件读写操作的知识,然后继续添加事件处理函数,实现查询记录的功能。
在应用程序中保存信息和数据的常用方法有三种:第一种是保存在Windows的注册表中,第二种是保存在程序专用的文件中,第三种则是保存在数据库中。
第一种方法只适合于保存少量关键的信息,例如程序的参数和选项,对于我们的例子程序来说,歌曲记录的数量可以是非常多的,因此不适合保存在注册表中。
第二种方法是最常用的,也比较容易实现,因此现在我们先采用第二种方法来保存记录。
第三种方法对于保存大量结构化的数据是最有效的,例如Mp3Collect的歌曲记录,但实现起来相对要复杂得多,在讲座的后面我们再来学习数据库操作方法。
用于文件操作的函数也有很多种,我们选择使用I/O流函数和FILE *指针来进行对文件的操作,因为这些函数符合ANSI C/C++规范,可移植性较好,能够用于Win32、Unix平台,是比较常用的文件操作方式。
I/O流函数和FILE结构的声明和定义位于头文件stdio.h中。
保存记录文件首先,为主窗体类添加一个SaveFile()成员函数。
在类浏览器中找到TMainForm类,用右键单击该类,在关联菜单中选择NewMethod命令,就会弹出如图10-1所示的AddMethod对话框。
在其中的Method Name中输入新的成员函数名SaveFile,函数的参数(Arguments)为空,返回类型为void,即没有返回值。
函数的访问权限为私有的(Private),函数的调用方式为__fastcall,这是因为按照CBuilder的规定,所有窗体类的成员函数的调用方式都必须为__fastcall方式。
设置好这些函数属性后,按下“OK”按钮,CBuilder就会自动添加好SaveFile()函数的框架。
Oracle BLOB字段读写
IDataParameterCollection m_arrParamter = m_objCmd.Parameters;
OracleBlob blob = new OracleBlob(dbConn);
m_arrParamter.Insert(0, objParam);
try
{
m_objCmd.ExecuteNonQuery();
}
catch (Exception e)
{
{
return 1;
}
}
IDbCommand m_objCmd = new OracleCommand();
m_objCmd.Connection = dbConn;
#region 读取BLOB字段
string ReadBLOBData(string WellDLTName, string FileName, string FileForm, string Jh)
{
string conn_str = "Data Source=ora9i_cqedri11;User ID=cqedri;Password=cqedri;";
string FileName = temp[temp.Length - 1];
பைடு நூலகம் string[] temp2 = FileName.Split('.');
FileName = temp2[0];
string FileForm = temp2[1];
if (FlagofHasData == 0)
{
return "1";//文件中无数据
Hibernate读写Clob和Blob类型字段
数据库脚本:create table testcb(id varchar(32) primary key,name varchar(32),photo blob,description text);Hibernate.cfg.xml"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="ername">rootproperty><property name="connection.url">jdbc:mysql://localhost:3306/schoolproject?characterEncoding=gb2312&useUnicode=true property><property name="dialect">org.hibernate.dialect.MySQLDialectproperty><property name="myeclipse.connection.profile">mysqlproperty><property name="connection.password">1234property><property name="connection.driver_class">com.mysql.jdbc.Driverproperty><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialectproperty><property name="hibernate.show_sql">trueproperty><property name="current_session_context_class">threadproperty><mapping resource="Search/Clob_Blob/TestCB.hbm.xml" />session-factory>hibernate-configuration>POJO:package Search.Clob_Blob;import java.sql.Blob;import java.sql.Clob;public class TestCB ...{private String id; //标识idprivate String name; //学生姓名private Blob photo;private Clob description;public String getId() ...{return id;}public void setId(String id) ...{this.id = id;}public String getName() ...{return name;}public void setName(String name) ...{ = name;}public Blob getPhoto() ...{return photo;}public void setPhoto(Blob photo) ...{this.photo = photo;}public Clob getDescription() ...{return description;}public void setDescription(Clob description) ...{ this.description = description;}}TestCB.hbm.xml"/hibernate-mapping-3.0.dtd"><hibernate-mapping package="Search.fetch" ><class name="Search.Clob_Blob.TestCB" table="testcb" lazy="true"><id name="id" column="id" unsaved-value="null"><generator class="uuid.hex">generator>id><property name="name" column="name" type="string">property><property name="photo" column="photo" type="blob">property><property name="description" column="description" type="clob">property>class>hibernate-mapping>准备一个图片sample.jpg放在Clob_Blob包下写Blob和Clob测试代码:package Search.Clob_Blob;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.Blob;import java.sql.Clob;import org.hibernate.Hibernate;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class Test ...{public static void main(String[] args) ...{String filePath=System.getProperty("user.dir")+File.separator+"src/Search/Clob_Blob"+File.separator+"hi bernate.cfg.xml";File file=new File(filePath);SessionFactory sessionFactory=new Configuration().configure(file).buildSessionFactory();Session session=sessionFactory.openSession();Transaction tx=session.beginTransaction();try ...{String imgPath=System.getProperty("user.dir")+File.separator+"src/Search/Clob_Blob"+File.separator+ "sample.jpg";FileInputStream fis=new FileInputStream(imgPath);Blob photo=Hibernate.createBlob(fis);Clob description=Hibernate.createClob("this is description");TestCB testcb=new TestCB();testcb.setName("tom1");testcb.setPhoto(photo);testcb.setDescription(description);session.save(testcb);mit();} catch (FileNotFoundException e) ...{e.printStackTrace();} catch (IOException e) ...{e.printStackTrace();}}}、运行后,客户端中可以看到已经成功保存:运行读取测试代码:package Search.Clob_Blob;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.Reader;import java.sql.Blob;import java.sql.Clob;import java.sql.SQLException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class TestRead ...{public static void main(String[] args) ...{String filePath=System.getProperty("user.dir")+File.separator+"src/Search/Clob_Blob"+File.separator+"hi bernate.cfg.xml";File file=new File(filePath);SessionFactory sessionFactory=new Configuration().configure(file).buildSessionFactory();Session session=sessionFactory.openSession();Transaction tx=session.beginTransaction();//读取clob和blobString imgPath=System.getProperty("user.dir")+File.separator+"src/Search/Clob_Blob"+File.separator+"sa mpleread.jpg";TestCB testcb=(TestCB)session.get(TestCB.class, "1");Blob photo=testcb.getPhoto();Clob description=testcb.getDescription();try ...{StringBuffer buffer=new StringBuffer();Reader reader=(Reader)description.getCharacterStream();BufferedReader breader=new BufferedReader(reader);char[] b = new char[60000];//每次获取60K//将Clob解析成Stringint i = 0;while((i = breader.read(b)) != -1)...{buffer.append(b,0,i);}System.out.println(buffer.toString());//将Blob还原成文件FileOutputStream fos=new FileOutputStream(imgPath);InputStream fis1=(InputStream)photo.getBinaryStream();byte[] b1 = new byte[60];//每次获取60Kint i1 = 0;while((i1=fis1.read(b1))!=-1)...{fos.write(b1);}} catch (SQLException e) ...{e.printStackTrace();} catch (IOException e) ...{e.printStackTrace();}mit();}}结果:Hibernate: select testcb0_.id as id0_0_, testcb0_.name as name0_0_, testcb0_.photo as photo0_0_, testcb0_.description as descript4_0_0_ from testcb testcb0_ where testcb0_.id=?this is description红色部分为解析的Clob,同时在Clob_Blob下可以看到生成的sampleread.jpg。
BLOB和CLOB的存取操作
BLOB和CLOB的存取操作BLOB和CLOB是数据库中用于存储大型二进制对象和字符对象的数据类型。
BLOB代表二进制大对象,CLOB代表字符大对象。
在数据库中,BLOB和CLOB可以存储图像、音频、视频文件等二进制数据,以及大段的文本数据。
存取操作BLOB和CLOB数据可以通过数据库中的SQL语句和程序代码来实现。
下面将详细介绍如何进行存取操作,包括数据的插入、查询、更新和删除。
1.插入操作:a.存储二进制数据(BLOB):-使用INSERTINTO语句插入一条记录,使用BINARY或VARBINARY关键字指定数据类型。
- 使用参数化查询(Prepared Statement)将BLOB数据作为输入。
b.存储字符数据(CLOB):-使用INSERTINTO语句插入一条记录,使用VARCHAR或TEXT关键字指定数据类型。
-使用参数化查询将CLOB数据作为输入。
2.查询操作:a.查询二进制数据(BLOB):-使用SELECT语句查询数据表,并使用BINARY或VARBINARY数据类型读取BLOB数据。
- 通过流(InputStream)读取BLOB数据并进行处理。
b.查询字符数据(CLOB):-使用SELECT语句查询数据表,并使用VARCHAR或TEXT数据类型读取CLOB数据。
- 通过字符串(String)读取CLOB数据并进行处理。
3.更新操作:a.更新二进制数据(BLOB):-使用UPDATE语句更新表中的记录,并使用BINARY或VARBINARY数据类型更新BLOB字段。
-使用参数化查询将新的BLOB数据作为输入。
b.更新字符数据(CLOB):-使用UPDATE语句更新表中的记录,并使用VARCHAR或TEXT数据类型更新CLOB字段。
-使用参数化查询将新的CLOB数据作为输入。
4.删除操作:a.删除二进制数据(BLOB):-使用DELETE语句从数据表中删除记录,或设置BLOB字段的值为NULL。
Blob读写
Blob大对象Java程序中对数据库中的Blob类型读写,均可对byte[] 类型进行操作,读protectedstaticclass ByXmlQuery extends MappingSqlQuery {protected ByXmlQuery(DataSource ds) {super(ds, queryByXmlSql);}/*** @param rs* @param rowNum* @return* @throws SQLException*/protected Object mapRow(ResultSet rs, int rowNum) throws SQLException { FybtBy fybtby = new FybtBy();fybtby.setBybh(rs.getString("FYBTBY_BYBH"));fybtby.setBymc(rs.getString("FYBTBY_BYMC"));fybtby.setVer(rs.getString("FYBTBY_VER"));if(rs.getString("FYBTBY_SFDQ")!=null&&"0".equals(rs.getString("FYBTBY_SFD Q"))){fybtby.setSfdq("否");}else{fybtby.setSfdq("是");}fybtby.setBylx(rs.getString("FYBTBY_BYLX"));fybtby.setXml(rs.getBytes("FYBTBY_XML"));//fybtby的xml属性是byte[],数据库中fybtby_xml是Blob类型fybtby.setNote(rs.getString("FYBTBY_NOTE"));return fybtby;}}写protectedstaticclass ByXmlInsert extends SqlUpdate {protected ByXmlInsert(DataSource ds) {super(ds, insertByXmlSql);// 参数类型设定declareParameter(new SqlParameter(Types.VARCHAR));declareParameter(new SqlParameter(Types.VARCHAR));declareParameter(new SqlParameter(Types.VARCHAR));declareParameter(new SqlParameter(Types.VARCHAR));declareParameter(new SqlParameter(Types.VARCHAR));declareParameter(new SqlParameter(Types.BLOB));declareParameter(new SqlParameter(Types.VARCHAR));}/*** @param zchZclb* @return*/publicint insert(FybtBy fybtby) {Object[] objs = new Object[] { fybtby.getBybh(), fybtby.getBymc(), fybtby.getVer(), fybtby.getSfdq(), fybtby.getBylx(),fybtby.getXml(), fybtby.getNote() };return update(objs);}}另 java中也有Blob类型,java.sql.Blobprivate Map querySqfj(final QMYSBZ qmysbz){final Map result =new HashMap();StringBuffer sql = new StringBuffer();sql.append("SELECTqmyssqfj_zznm,qmyssqfj_sjzz,qmyssqfj_jhnm,qmyssqfj_gxlx,qmyssqfj_sjlx,qmyssqfj_yszt,qmyssqf j_ztnm,qmyssqfj_jdxh,qmyssqfj_dqjd,qmyssqfj_wjmc,"+ "qmyssqfj_scsj,qmyssqfj_scr,qmyssqfj_wjt FROM qmyssqfj ");sql.append("WHERE qmyssqfj_jhnm='" + qmysbz.getJhnm()+ "' AND qmyssqfj_gxlx='" + qmysbz.getGxlx()+ "' AND qmyssqfj_yszt='" + qmysbz.getYszt() + "' "+ "AND qmyssqfj_ztnm='" + qmysbz.getZtnm()+ "' AND qmyssqfj_sjlx='" + qmysbz.getSjlx() + "' "+ " AND qmyssqfj_jdxh = "+ qmysbz.getJdxh()+ " AND qmyssqfj_dqjd ='"+ YsConstants.qmysjd_sb+"'");sql.append(" with ur ");getJdbcTemplate().query(sql.toString(),new ResultSetExtractor() {public Object extractData(ResultSet rs)throws SQLException, DataAccessException {while (rs.next()) {result.put("QMYSSQFJ_ZZNM", rs.getString(1)==null ? "":rs.getString(1));result.put("QMYSSQFJ_SJZZ", rs.getString(2)==null ? "":rs.getString(2));result.put("QMYSSQFJ_JHNM", rs.getString(3)==null ? "":rs.getString(3));result.put("QMYSSQFJ_GXLX", rs.getString(4)==null ? "":rs.getString(4));result.put("QMYSSQFJ_SJLX", rs.getString(5)==null ? "":rs.getString(5));result.put("QMYSSQFJ_YSZT", rs.getString(6)==null ? "":rs.getString(6));result.put("QMYSSQFJ_ZTNM", rs.getString(7)==null ? "":rs.getString(7));result.put("QMYSSQFJ_JDXH", new Integer((rs.getString(8)==null || rs.getString(8).trim().equals("")) ? "0":rs.getString(8)));result.put("QMYSSQFJ_DQJD", rs.getString(9)==null ? "":rs.getString(9));result.put("QMYSSQFJ_WJMC", rs.getString(10)==null ? "":rs.getString(10));result.put("QMYSSQFJ_SCSJ", rs.getString(11)==null ? "":rs.getString(11));result.put("QMYSSQFJ_SCR", rs.getString(12)==null ? "":rs.getString(12));Blob blob=(Blob) rs.getBlob(13);//Blob 为java.sql.Blobtry{InputStream is = blob.getBinaryStream();int count = is.available();System.out.println("count:"+count);byte[] b = new byte[count];count = is.read(b);// String str=new String(b,0,count);// result.put("QMYSSQFJ_WJT", str);blob = new BlobImpl(b);//BlobImp implemnets java.sql.Blobresult.put("QMYSSQFJ_WJT", blob);}catch(Exception e){e.printStackTrace();}}return result;}});return result;}。
对blob字段读写的方法
对blob字段读写的方法Blob字段是一种特殊的数据类型,它能够存储二进制数据,例如图片、音频、视频等等。
在开发中,我们有时需要使用Blob字段来存储这些特殊数据类型。
本文将介绍如何对Blob字段进行读写操作。
对于Blob字段的读操作,我们可以使用FileReader对象。
FileReader对象是HTML5新增的用于读取文件的对象,它提供了readAsArrayBuffer()、readAsBinaryString()、readAsDataURL()、readAsText()等方法来读取文件内容。
我们可以使用readAsArrayBuffer()方法来读取Blob字段中的内容,示例代码如下:var file_reader = new FileReader();file_reader.readAsArrayBuffer(blob);file_reader.onload = function() {var array_buffer = file_reader.result;// do something with the array_buffer};在示例代码中,我们首先创建了一个FileReader对象,然后使用它的readAsArrayBuffer()方法来读取Blob字段中的内容。
读取完成后,我们可以通过result属性获取到读取后的ArrayBuffer对象,然后对其进行相关操作。
对于Blob字段的写操作,我们可以使用FormData对象。
FormData 对象是HTML5新增的用于将表单数据编码为键值对并进行异步上传的对象,它提供了append()方法来向表单中添加数据。
我们可以使用append()方法向FormData对象中添加Blob字段数据,示例代码如下:var form_data = new FormData();form_data.append('file', blob, 'sample.jpg');$.ajax({url: '/upload',type: 'post',data: form_data,processData: false,contentType: false,success: function(response) {// handle success},error: function(xhr, status, error) {// handle error}});在示例代码中,我们首先创建了一个FormData对象,然后使用它的append()方法向表单中添加Blob字段数据。
vfp blob用法
vfp blob用法VFP(Visual FoxPro)中的BLOB(Binary Large Object)是一种用于存储大量二进制数据的数据类型。
它可以用于存储图像、音频、视频或其他二进制数据。
要在VFP中使用BLOB,首先需要创建一个表,并在表中定义一个BLOB字段。
例如:foxpro.CREATE TABLE myTable (id INT, myBlob BLOB)。
在这个例子中,我们创建了一个名为myTable的表,其中包含一个整数类型的id字段和一个BLOB类型的myBlob字段。
要向BLOB字段中存储数据,可以使用APPEND BLANK命令创建一条新记录,然后使用GATHER FROM或READ BINARY命令将二进制数据读入BLOB字段。
例如:foxpro.APPEND BLANK.GATHER FROM myfile TYPE BINARY TO myTable.myBlob.在这个例子中,我们创建了一条新记录,并将名为myfile的文件的二进制数据存储到myBlob字段中。
要从BLOB字段中检索数据,可以使用SCATTER TO或WRITE BINARY命令将BLOB字段中的数据写入文件。
例如:foxpro.SCATTER TO myfile TYPE BINARY FROM myTable.myBlob.在这个例子中,我们将myBlob字段中的二进制数据写入名为myfile的文件中。
除了上述基本操作之外,VFP还提供了许多其他与BLOB相关的函数和命令,例如EMPTY BLOB、FCOUNT()、FSEEK()等,这些函数和命令可以帮助你更灵活地处理BLOB数据。
总的来说,VFP中的BLOB类型提供了一种方便的方式来处理大量的二进制数据,可以用于各种需要存储和检索二进制数据的场景。
希望这些信息能够帮助到你。
BCB读写文件
BCB读写文件//---------------------------------------------------------------------------//打开文件//---------------------------------------------------------------------------FILE * fp; //文件指针要加 #include "stdio.h"String file_L = Edit1->Text; //获取文件路径const char * file_H;file_H = (char *)file_L.c_str(); //将String 转换到 const char *fp = fopen(file_H,"r+"); //打开文件,文本方式,读和写if(fp!=NULL){Text_Out(">>> 打开文件成功......",3,1);}else Text_Out(">>> 打开文件失败",1,1);//---------------------------------------------------------------------------/* while(!feof(fp)) //非文件结尾,就读{char red = fgetc(fp);Text_Out(red,4,0);} *///---------------------------------------------------------------------------for(char i='A';i<'G';i++) //写文件{fputc(i,fp);}//---------------------------------------------------------------------------fclose(fp); //关闭文件//---------------------------------------------------------------------------例:char x[]="I Love You";fwire(x, 6,12,fp);//写入6*12=72字节将把"I Love"写到流fp中12次,共72字节bcb方法int fh = FileOpen(Edit1->Text, FILE_CSV|FILE_READ);//fmOpenRead|fmOpenWriteif(fh==-1) Text_Out(">>> 打开文件错误",1,1);else Text_Out(">>> 打开文件ok",3,1);FileClose(fh);、文件I/O函数这类函数完成对文件的读写相关的操作,这种类型的操作和C的基于I/O文件操作类似,下表列出这类操作常用的函数及其功能。
深入浅析mybatisoracleBLOB类型字段保存与读取
深⼊浅析mybatisoracleBLOB类型字段保存与读取⼀、BLOB字段 BLOB是指⼆进制⼤对象也就是英⽂Binary Large Object的所写,⽽CLOB是指⼤字符对象也就是英⽂Character Large Object的所写。
其中BLOB是⽤来存储⼤量⼆进制数据的;CLOB⽤来存储⼤量⽂本数据。
BLOB通常⽤来保存图⽚、⽂件等⼆进制类型的数据。
⼆、使⽤mybatis操作blob 1、表结构如下:create table BLOB_FIELD(ID VARCHAR2(64 BYTE) not null,TAB_NAME VARCHAR2(64 BYTE) not null,TAB_PKID_VALUE VARCHAR2(64 BYTE) not null,CLOB_COL_NAME VARCHAR2(64 BYTE) not null,CLOB_COL_VALUE CLOB,constraint PK_BLOB_FIELD primary key (ID)); 2、实体代码如下:package com.test.entity;import java.sql.Clob;/*** ⼤字段*/public class BlobField {private String tabName;// 表名private String tabPkidValue;// 主键值private String blobColName;// 列名private byte[] blobColValue;// 列值 clob类型public String getTabName() {return tabName;}public void setTabName(String tabName) {this.tabName = tabName;}public String getTabPkidValue() {return tabPkidValue;}public void setTabPkidValue(String tabPkidValue) {this.tabPkidValue = tabPkidValue;}public String getBlobColName() {return blobColName;}public void setBlobColName(String blobColName) {this.blobColName = blobColName;}public byte[] getBlobColValue() {return blobColValue;}public void setBlobColValue(byte[] blobColValue) {this.blobColValue = blobColValue;}} 3、mybatis sql代码如下:<?xml version="." encoding="UTF-" ?><!DOCTYPE mapper PUBLIC "-////DTD Mapper .//EN" "/dtd/mybatis--mapper.dtd"><mapper namespace="com.test.dao.BlobFieldDao"><sql id="blobFieldColumns">a.ID AS id,a.TAB_NAME AS tabName,a.TAB_PKID_VALUE AS tabPkidValue,a.BLOB_COL_NAME AS blobColName,a.BLOB_COL_VALUE AS blobColValue</sql><sql id="blobFieldJoins"></sql><select id="get" resultType="blobField">SELECT<include refid="blobFieldColumns" />FROM BLOB_FIELD a<include refid="blobFieldJoins" />WHERE a.ID = #{id}</select><select id="findList" resultType="blobField">SELECT<include refid="blobFieldColumns" />FROM BLOB_FIELD a<include refid="blobFieldJoins" /></select><insert id="insert">INSERT INTO BLOB_FIELD(ID ,TAB_NAME ,TAB_PKID_VALUE ,BLOB_COL_NAME ,BLOB_COL_VALUE) VALUES (#{id},#{tabName},#{tabPkidValue},#{blobColName},#{blobColValue,jdbcType=BLOB})</insert><update id="update">UPDATE BLOB_FIELD SETTAB_NAME = #{tabName},TAB_PKID_VALUE = #{tabPkidValue},BLOB_COL_NAME = #{blobColName},BLOB_COL_VALUE = #{blobColValue}WHERE ID = #{id}</update><delete id="delete">DELETE FROM BLOB_FIELDWHERE ID = #{id}</delete></mapper> 3、controller代码如下: a、保存BLOB字段代码/*** 附件上传** @param testId* 主表Id* @param request* @return* @throws UnsupportedEncodingException*/@RequiresPermissions("exc:exceptioninfo:feedback")@RequestMapping(value = "attachment", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> uploadAttachment(@RequestParam(value = "testId", required = true) String testId, HttpServletRequest request)throws UnsupportedEncodingException {Map<String, Object> result = new HashMap<String, Object>();MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// 获得⽂件MultipartFile multipartFile = multipartRequest.getFile("Filedata");// 与前端设置的fileDataName属性值⼀致String filename = multipartFile.getOriginalFilename();// ⽂件名称InputStream is = null;try {//读取⽂件流is = multipartFile.getInputStream();byte[] bytes = FileCopyUtils.copyToByteArray(is);BlobField blobField = new BlobField();blobField.setTabName("testL");blobField.setTabPkidValue(testId);blobField.setBlobColName("attachment");blobField.setBlobColValue(bytes);//保存blob字段this.testService.save(blobField, testId, filename);result.put("flag", true);result.put("attachmentId", blobField.getId());result.put("attachmentName", filename);} catch (IOException e) {e.printStackTrace();result.put("flag", false);} finally {IOUtils.closeQuietly(is);}return result;} b、读取BLOB字段/*** 下载附件** @param attachmentId* @return*/@RequiresPermissions("exc:exceptioninfo:view")@RequestMapping(value = "download", method = RequestMethod.GET)public void download(@RequestParam(value = "attachmentId", required = true) String attachmentId,@RequestParam(value = "attachmentName", required = true) String attachmentName, HttpServletRequestrequest, HttpServletResponse response) {ServletOutputStream out = null;try {response.reset();String userAgent = request.getHeader("User-Agent");byte[] bytes = userAgent.contains("MSIE") ? attachmentName.getBytes() : attachmentName.getBytes("UTF- "); // fileName.getBytes("UTF-")处理safari的乱码问题String fileName = new String(bytes, "ISO--");// 设置输出的格式response.setContentType("multipart/form-data");response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(attachmentName, "UTF-"));BlobField blobField = this.blobFieldService.get(attachmentId);//获取blob字段byte[] contents = blobField.getBlobColValue();out = response.getOutputStream();//写到输出流out.write(contents);out.flush();} catch (IOException e) {e.printStackTrace();}} 本例⼦将⽂件上传并保存到BLOB类型字段字段,下载的时候读取BLOB字段,并写⼊成输出流。
blob解析格式
Blob(Binary Large Object)是一种二进制数据的表示形式,通常用于存储大块的二进制数据。
在计算机领域,Blob可以包含任何类型的数据,例如图像、音频、视频、文档等。
Blob的解析格式取决于它所包含的具体数据类型。
以下是一些常见的Blob解析格式:1. 图像数据(例如JPEG、PNG):-图像数据通常以二进制形式存储在Blob中。
解析时,可以使用相应的图像格式解码器(例如JPEG解码器、PNG解码器)来将二进制数据转换为图像。
2. 音频数据(例如MP3、WA V):-音频数据以二进制形式存储在Blob中。
解析时,需要使用相应的音频解码器来将二进制数据解码为音频。
Web浏览器提供了Web Audio API等工具,用于处理和播放Blob中的音频数据。
3. 视频数据(例如MP4、WebM):-视频数据以二进制形式存储在Blob中。
解析时,需要使用相应的视频解码器来将二进制数据解码为视频。
Web浏览器支持通过HTML5 Video元素播放Blob中的视频。
4. 文本数据:-如果Blob中包含文本数据,可以使用文本解码器(例如UTF-8解码器)将二进制数据解码为文本。
在Web浏览器中,可以使用`FileReader`对象来读取Blob中的文本数据。
以下是一个使用JavaScript在浏览器中解析Blob的简单示例:// 假设有一个Blob对象var blob = new Blob(["Hello, World!"], { type: "text/plain" });// 创建FileReader对象var reader = new FileReader();// 设置读取完成时的回调函数reader.onload = function(event) {// 通过event.target.result获取解析后的文本数据console.log(event.target.result);};// 读取Blob中的文本数据reader.readAsText(blob);这个示例中,我们创建了一个包含文本数据的Blob对象,并使用`FileReader`来读取Blob中的文本数据。
对blob字段读写的方法
对blob字段读写的方法1. 概述Blob(Binary Large Object)字段是一种用于存储大型二进制数据的数据库字段类型。
在很多应用场景下,需要对Blob字段进行读写操作。
本文将深入探讨对Blob字段的读写方法,包括如何读取Blob字段内容以及如何写入Blob字段内容。
2. 读取Blob字段内容2.1 使用SELECT语句读取Blob字段内容使用SELECT语句可以从数据库中读取Blob字段内容。
以下是使用SELECT语句读取Blob字段内容的一般步骤:1.连接到数据库服务器。
2.构建SELECT语句,指定要读取的Blob字段。
3.执行SELECT语句。
4.获取结果集,并逐行读取Blob字段内容。
2.2 使用流读取Blob字段内容除了使用SELECT语句,还可以使用流的方式读取Blob字段内容。
以下是使用流读取Blob字段内容的一般步骤:1.连接到数据库服务器。
2.构建SELECT语句,指定要读取的Blob字段。
3.执行SELECT语句。
4.获取结果集的Blob字段对象。
5.使用流将Blob字段内容读取到内存中。
3. 写入Blob字段内容3.1 使用INSERT语句写入Blob字段内容使用INSERT语句可以将二进制数据写入Blob字段。
以下是使用INSERT语句写入Blob字段内容的一般步骤:1.连接到数据库服务器。
2.构建INSERT语句,指定要写入的Blob字段以及对应的二进制数据。
3.执行INSERT语句。
3.2 使用流写入Blob字段内容除了使用INSERT语句,还可以使用流的方式写入Blob字段内容。
以下是使用流写入Blob字段内容的一般步骤:1.连接到数据库服务器。
2.创建Blob对象,并将要写入的二进制数据写入该对象。
3.构建INSERT语句,指定要写入的Blob字段以及对应的Blob对象。
4.执行INSERT语句。
4. 其他操作4.1 更新Blob字段内容除了写入Blob字段内容,还可以更新已有的Blob字段内容。
c语言blob函数
c语言blob函数Blob函数是C语言中的一个重要函数,它是Binary Large Object 的缩写,用于处理大型二进制对象。
在C语言中,Blob函数主要用于在内存中存储和操作二进制数据。
Blob函数的具体功能包括创建Blob对象、读取Blob对象的数据、写入数据到Blob对象以及释放Blob对象等。
下面将详细介绍这些功能。
1. 创建Blob对象:Blob函数提供了创建Blob对象的功能,通过调用该函数,可以在内存中分配一块指定大小的空间用于存储二进制数据。
创建Blob对象的函数原型如下:```cvoid *blob_create(size_t size);```其中,size参数指定了需要分配的内存大小,函数返回一个指向分配空间的指针。
2. 读取Blob对象的数据:读取Blob对象的数据需要使用到Blob 对象的指针以及需要读取的数据大小。
Blob函数提供了以下函数用于读取数据:```csize_t blob_read(void *ptr, void *data, size_t size);```其中,ptr参数是指向Blob对象的指针,data参数是用于存储读取数据的缓冲区,size参数指定了需要读取的数据大小。
函数返回值是实际读取的数据大小。
3. 写入数据到Blob对象:写入数据到Blob对象也需要使用到Blob对象的指针以及需要写入的数据。
Blob函数提供了以下函数用于写入数据:```csize_t blob_write(void *ptr, const void *data, size_t size);```其中,ptr参数是指向Blob对象的指针,data参数是需要写入的数据,size参数指定了需要写入的数据大小。
函数返回值是实际写入的数据大小。
4. 释放Blob对象:在使用完Blob对象后,为了避免内存泄漏,需要释放Blob对象所占用的内存。
Blob函数提供了以下函数用于释放Blob对象:```cvoid blob_release(void *ptr);```其中,ptr参数是指向Blob对象的指针,调用该函数后,Blob对象所占用的内存将被释放。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//注意!!
the system administrator must use the sp_dboption system stored
procedure to set select into/bulkcopy,
BLOB字段的写入:
TBlobSTream* TemplateStream;
char* TempPlatePtr;
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
("SearchTem"),bmReadWrite);
NewsScript.m_pScript=(BYTE *)GlobalLock(NewsScript.m_hScript);
if(NewsScript.m_pScript!=NULL)
{
//再将刚插入的记录读出来,使该Query与该条记录关联
script为一个BLOB字段:
TBlobStream *pScriptStream;
//插入一条记录
strSQL1="insert into content(file_id,script,key_image) values('";
strSQL1=strSQL1+m_szFileID+"',null,null)";
("SearchTem"),bmReadWrite);
TemplatePtr= new char[TemplateStream->Size];
TemplateStream->Read(TemplatePtr, TemplateStream->Size);
qryExec->FieldByName("script"),bmReadWrite);
pScriptStream->Write(NewsScript.m_pScript,
NewsScript.m_lScriptRealSize);
UnLockMemories(NewsScript);
�
dmStoryEditor->qryExec->SQL->Clear();
dmStoryEditor->qryExec->SQL->Add(strSQL1);
dmStoryEditor->qryExec->Open();
TemplatePtr= new char[TemplateStream->Size];
TemplateStream->Write(TemplatePtr, TemplateStream->Size);
________________________________________________________________
dmStoryEditor->qryExec->SQL->Clear();
dmStoryEditor->qryExec->SQL->Add(strSQL1);
dmStoryEditor->qryExec->ExecSQL();
dmStoryEditor->qryExec->Close();
strSQL1="select file_id,script from content where file_id='"+
m_szFileID+"'";
//允许该Query写
dmStoryEditor->qryExec->RequestLive=true;
dmStoryEditor->qryExec->Post();
dmStoryEditor->qryExec->RequestLive=false;
delete pScriptStream;
}
GlobalUnlock(NewsScript.m_hScript);
补充:
获得字段的大小用函数datalength
SQL Server端要作一点设置:
By default, WRITETEXT is a nonlogged operation. This means that
text or image data is not logged when it is written into the database.
dmStoryEditor->qryExec->First();
//将该Query置为可写
dmStoryEditor->qryExec->Edit();
pScriptStream=new TBlobStream((TBlobField*)dmStoryEdi
BLOB字段的读取:
TBlobSTream* TemplateStream;
char* TempPlatePtr;
TemplateStream=new TBlobStream((TBlobField*)WebQuery->FieldByName
在写入时:
(1)如果使用的是TTable,则要将其ReadOnly属性先置为false,然后调用Edit函数;
(2)如果使用的是TQuery,则要将其RequestLive属性先置为true,然后调用Edit函数;
使得TTable(TQuery)是可写的.
下面是一个使用TQuery往content表(主键file_id)中插入一条记录的例子,
//
which allows nonlogged data to be inserted.
做了试验,直接写SQL语句好象不行.
____________________________________________________________________
一些注意事项和一个例子
//整理要写入的Blob数据
LockMemories(NewsScript);
// 本文转自 C++Builder研究 - /article.asp?i=214&d=ze74hw
NewsScript.GetEdition(NewsScript.m_ScriptHead.byteEditionNum);