C语言教程:将二进制流写入数据库的方法 (c 将二进制流写入数据库)

在现代的软件系统中,数据库是至关重要的组成部分。它们用于存储和检索数据,支持公司和组织的关键任务。与传统的文本和数字数据类型不同,二进制数据类型(例如图像和音频文件)需要特殊处理才能在数据库中存储和读取。在本教程中,我们将介绍使用C语言将二进制流写入数据库的方法。

一、选择合适的数据库类型

确定要使用的数据库类型。这将有助于您选择适当的库和工具。在本教程中,我们将讨论使用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语言编程的示例代码可以帮助您了解如何实现这一目标。无论您是新手还是经验丰富的开发人员,我们希望这个教程都能为您提供有用的信息。

相关问题拓展阅读:

.net怎样将图片以二进制流的方式存入Oracle数据库里 在以二进制流的方式读取显示 求源码

在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数据库里 在以二进制流的方式读取显示 求源码的信息别忘了在本站进行查找喔。


数据运维技术 » C语言教程:将二进制流写入数据库的方法 (c 将二进制流写入数据库)