在现代的软件系统中,数据库是至关重要的组成部分。它们用于存储和检索数据,支持公司和组织的关键任务。与传统的文本和数字数据类型不同,二进制数据类型(例如图像和音频文件)需要特殊处理才能在数据库中存储和读取。在本教程中,我们将介绍使用C语言将二进制流写入数据库的方法。
10年的岳麓网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整岳麓建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“岳麓网站设计”,“岳麓网站推广”以来,每个客户项目都认真落实执行。
一、选择合适的数据库类型
确定要使用的数据库类型。这将有助于您选择适当的库和工具。在本教程中,我们将讨论使用MySQL数据库的C语言编程。MySQL是一种流行的客户端/服务器数据库管理系统,具有卓越的性能和可扩展性。
二、准备你的代码
在您开始编写代码之前,您需要先定义二进制数据类型的存储位置和大小。可以使用您的MySQL安装程序提供的MySQL Workbench。这将允许您轻松地创建和管理数据库,定义表和列以及在表中添加数据。在我们的示例代码中,我们使用以下代码定义包含二进制数据的表:
“`
CREATE TABLE `binary_files` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`filename` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
`mime_type` VARCHAR(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ”,
`data` LONGBLOB NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
“`
三、编写代码以读取二进制数据
一旦您确定了数据库和表结构,您将可以编写代码。接下来,我们将介绍如何使用C语言编写代码以读取二进制数据,并将其写入表中创建的列。
步骤1:
使用mysql_init()函数初始化MySQL句柄。该句柄允许C语言程序与MySQL交互。
“`
MYSQL* mysql = mysql_init(NULL);
“`
步骤2:
使用mysql_real_connect()函数建立到数据库的连接。此函数使用数据库的名称、用户名和密码作为参数。
“`
mysql_real_connect(mysql, “localhost”, “user”, “password”, “database”, 0, NULL, 0);
“`
步骤3:
使用fopen()函数打开要读取的二进制文件。
“`
FILE* file = fopen(“image.jpg”, “rb”);
“`
步骤4:
使用fread()函数从文件中读取数据。
“`
fread(buffer, 1, 1024, file);
“`
步骤5:
使用mysql_real_escape_string()函数将读取的数据转义,然后使用mysql_query()函数将它们写入数据库表中的指定列。
“`
char* escaped_data = malloc((1024 * 2) + 1);
mysql_real_escape_string(mysql, escaped_data, buffer, 1024);
char* query = “INSERT INTO binary_files (filename, mime_type, data) VALUES(‘image.jpg’, ‘image/jpeg’, ‘%s’)”;
char* escaped_query = calloc(strlen(query) + (1024 * 2) + 1, sizeof(char));
sprintf(escaped_query, query, escaped_data);
mysql_query(mysql, escaped_query);
“`
步骤6:
使用fclose()函数关闭打开的文件。
“`
fclose(file);
“`
四、
本教程介绍了使用C语言将二进制流写入数据库的步骤。这是一个重要的主题,因为二进制数据类型在现代软件系统中越来越常见。使用MySQL和C语言编程的示例代码可以帮助您了解如何实现这一目标。无论您是新手还是经验丰富的开发人员,我们希望这个教程都能为您提供有用的信息。
成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220在oracle中可以使用bolb字段类型进行二进制流的存储
Java代码:
Oracle中插入图片并显示(用BLOB类型)
要在oracle里面银正模存入图片 用 blob类型
首先在数据库里建立:
–连接到管理员
conn sys/tbsoft as sysdba;
–为scott用户授权
grant create any directory to scott;
–回到scott用户
conn scott/tiger;
–创建存储图片的表
CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
–创建存储图片的目录
CREATE OR REPLACE DIRECTORY IMAGES AS ‘C:\picture’;
–在c:下自己建一个叫picture的文件夹
CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS
F_LOB BFILE;–文件类型
B_LOB BLOB;
BEGIN
iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;
–插入空的blob
F_LOB:= BFILENAME (‘IMAGES’, FILENAME);
–获取指定目录下的文件
DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READON);
–以只读的方式打开文件
DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB));
–传递对象
DBMS_LOB.FILECLOSE (F_LOB);
–关闭原始文件
COMMIT;
END;
/
–在C:\picture下放一张图片1.gif
–将该图片存入表
call IMG_INSERT(‘1′,’1.gif’);
然后创清悔建一个web项目 连接数据库后 创建一个BlobDAO类 用来取出表中的blob类型图片
Java代码 收藏代锋缓码
public class BlobDAO {
private static final BlobDAO instance = new BlobDAO();
private Connection conn = null;
private BlobDAO() {
}
public static BlobDAO getInstance() {
return instance;
}
private void initConn() {
conn = DBAccess.getInstance().getConn();
}
public byte getImage(String imgname) {
BufferedInputStream ins;//取得BLOB的IO流
byte bt = null;
initConn();
Blob bo = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = “select T_IMAGE from IMAGE_LOB where t_id=?”;
try {
ps = conn.prepareStatement(sql);
ps.setString(1, imgname);
rs = ps.executeQuery();
if (rs.next()) {
bo = rs.getBlob(“T_IMAGE”);
try {
ins = new BufferedInputStream(bo.getBinaryStream());
int bufferSize = (int) bo.length();//取得BLOB的长度
bt = new byte;
try {
ins.read(bt, 0, bufferSize);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//建立字节缓存
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return bt;
}
}
在action里面调用getImage()方法并显示图片在页面上
Java代码 收藏代码
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
BlobDAO blobDAO = BlobDAO.getInstance();
byte bs = blobDAO.getImage(“1”);
try {
response.getOutputStream().write(bs);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
添加图片到数据库
请在c盘下放入图片–c:\\4.gif
Java代码 收藏代码
public void savaImg(String imgId) {
//传的是存入数据库图片的id
initConn();
Statement st = null;
BLOB blob = null; //图片类型
OutputStream outputStream = null; //输出流
File file = null; //文件
InputStream inputStream = null; //输入流
ResultSet rs = null;
try {
conn.setAutoCommit(false); //事物由程序员操作
st = conn.createStatement();
st.executeQuery(“insert into IMAGE_LOB values(‘”+ imgId +”‘,empty_blob())”);
rs = st.executeQuery(“select T_IMAGE from IMAGE_LOB where t_id='”+ imgId +”‘ for update”);
if (rs.next()) {
blob = (BLOB) rs.getBlob(1);
outputStream = blob.getBinaryOutputStream();
file = new File(“c:\\4.gif”);
inputStream = new FileInputStream(file);
byte b = new byte;
int len = 0;
while ((len = inputStream.read(b)) != -1) {
System.out.println(len);
outputStream.write(b, 0, len);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
inputStream.close();
outputStream.flush();
outputStream.close();
rs.close();
st.close();
conn.commit();
conn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
c 将二进制流写入数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c 将二进制流写入数据库,C语言教程:将二进制流写入数据库的方法,.net怎样将图片以二进制流的方式存入Oracle数据库里 在以二进制流的方式读取显示 求源码的信息别忘了在本站进行查找喔。
创新互联【028-86922220】值得信赖的成都网站建设公司。多年持续为众多企业提供成都网站建设,成都品牌建站设计,成都高端网站制作开发,SEO优化排名推广服务,全网营销让企业网站产生价值。
当前文章:C语言教程:将二进制流写入数据库的方法(c将二进制流写入数据库)
链接地址:http://www.shufengxianlan.com/qtweb/news43/75593.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联