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 文字 (以下またはそれ以上) が含まれています。
私は何を間違っていますか?
varchar の代わりに varbinary を使用してみてください。この質問を見てください。SQL Server 2008 r2 に格納されている base64 例外をエンコードおよびデコードしようとしましたが、問題がありました。
助けてください