繁体   English   中英

jdbc 在 sql server 2008 r2 中存储的 png 图像提供了不完整的数据

[英]jdbc stored png image at sql server 2008 r2 gives not complete data

我想将 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,所以请看这个问题,我尝试过编码和解码 base64 异常存储到 sql server 2008 r2 时遇到问题

请帮忙

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM