gpt4 book ai didi

java - jdbc 在 sql server 2008 r2 中存储的 png 图像给出的数据不完整

转载 作者:行者123 更新时间:2023-12-01 14:28:43 25 4
gpt4 key购买 nike

我想将 Base64 图像保存到我的 SQL Server 2008 R2,我使用了这个:

Connection con = Database.getConnection();
CallableStatement callableStatement = null;

try
{
callableStatement = con.prepareCall("{call insertRestaurantFoodImage2(?,?)}");
callableStatement.setInt(1, ID);

callableStatement.setString(2, stringImage);
callableStatement.executeUpdate();
}
catch (SQLException e)
{
e.printStackTrace();
}

保存字符串的存储过程是:

ALTER PROCEDURE dbo.insertRestaurantFoodImage2
(@restaurantFoodID INT,
@image VARCHAR(MAX))
AS
BEGIN
SET NOCOUNT ON

UPDATE Food_Restaurant
SET [image] = @image
WHERE ID = @restaurantFoodID
END

检索数据如下:

Connection con = Database.getConnection();
CallableStatement callableStatement = null;

try
{
callableStatement = con.prepareCall("{call getRestaurantFoodImage2(?,?)}");
callableStatement.setInt(1, getID());
callableStatement.registerOutParameter(2, java.sql.Types.VARCHAR);
callableStatement.execute();

image = callableStatement.getString(2);
}
catch (SQLException e)
{
e.printStackTrace();
}

获取图像的存储过程是:

ALTER PROCEDURE dbo.insertRestaurantFoodImage2
(@restaurantFoodID INT,
@image VARCHAR(MAX))
AS
BEGIN
SET NOCOUNT ON

UPDATE Food_Restaurant
SET [image] = @image
WHERE ID = @restaurantFoodID
END

当我在插入字符串之前和检索字符串之后检查字符串时,结果不相等,检索到的图像大约有前 500 个(更少或更多)字符。

请问我做错了什么?

我知道你会告诉我,尝试使用 varbinary 而不是 varchar,所以请看这个问题,我尝试过但遇到了问题 encode and decode base64 excpetion storing to sql server 2008 r2

请帮忙

最佳答案

正如我所评论的,旧版本的 SQL Server 对于 varbinaryvarchar 的大小限制为 8kb。该驱动程序根本不支持 getBytesgetString,或者您可能正在使用较旧的 JDBC 驱动程序。另一种可能性是您需要将 OUT 参数注册为 java.sql.types.LONGVARBINARY(或 LONGVARCHAR)。

无论如何(也在另一个问题中),我想知道为什么您在存储数据之前首先使用 Base64 进行编码。只需将原始字节存储在 VARBINARY 中即可。

关于java - jdbc 在 sql server 2008 r2 中存储的 png 图像给出的数据不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com