我想将 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 对于 varbinary
和 varchar
的大小限制为 8kb。该驱动程序根本不支持 getBytes
或 getString
,或者您可能正在使用较旧的 JDBC 驱动程序。另一种可能性是您需要将 OUT 参数注册为 java.sql.types.LONGVARBINARY
(或 LONGVARCHAR
)。
无论如何(也在另一个问题中),我想知道为什么您在存储数据之前首先使用 Base64 进行编码。只需将原始字节存储在 VARBINARY
中即可。
关于java - jdbc 在 sql server 2008 r2 中存储的 png 图像给出的数据不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981631/