【问题标题】:How to upload blob to MSSQL in Android?如何在 Android 中将 blob 上传到 MSSQL?
【发布时间】:2018-02-19 20:15:09
【问题描述】:

我正在尝试使用 Android Studio 中的 JTDS 1.30 将 jpg 文件上传到 MSSQL 服务器。我可以使用以下代码将我的 jpg 格式转换为 blob 格式(或 base64,如果需要):

    Bitmap bitmap = BitmapFactory.decodeFile("/storage/sdcard0/Shipright/Pod/test.jpg");
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, byteArrayOutputStream);
    byte[] blob = byteArrayOutputStream.toByteArray();
    String encodedImage = Base64.encodeToString(blob, Base64.DEFAULT);

但是,实际将其上传到数据库的代码一直给我一个错误:

        try {
            Blob blobUpload = con.createBlob();
            blobUpload.setBytes(0, blob);
            String query = "insert into pics values ('today', 'test.jpg', '11111', 'Jay', '111', '287', '13', ?)";
            PreparedStatement ps = con.prepareStatement(query);
            Timber.d(query);
            ps.setBlob(1, blobUpload);
            ps.executeUpdate();
        } catch (Exception e) {
            Timber.e("error: " + e.getMessage());
        }

我在 con.createBlob 行上收到 AbstractMethodError:

09-11 10:26:46.246 8462-8462/com.procatdt.sandfile E/AndroidRuntime: 致命例外:主要 进程:com.procatdt.sandfile,PID:8462 java.lang.AbstractMethodError 在 net.sourceforge.jtds.jdbc.JtdsConnection.createBlob(JtdsConnection.java:2755) 在 com.procatdt.sandfile.CopyActivity.onCreate(CopyActivity.java:46)

看来我也不能直接将它作为base64上传到列,因为sql server说我需要先将它转换为varbinary(max)。

【问题讨论】:

  • 是否需要存储在数据库中,或者您可以将其保存到文件中并将文件名保存在数据库中吗?
  • 我也可以选择。我控制着 SQL 服务器上的表。我将文件名保存为查询的一部分,但是我需要以某种方式将实际文件传送到服务器。

标签: android sql-server blob jtds


【解决方案1】:

显然,我不需要使用 createblob() 函数来初始化 blob。我只需要使用 PreparedStatement 的 setBytes 方法,它将一个 byte[] 对象直接转换为必要的 blob 对象。这是工作代码:

    try {
        String query = "insert into podfiles values ('09/28/2017','c:\\temp\\','" + inputFile + "', ?)";
        PreparedStatement ps = con.prepareStatement(query);
        Timber.d(query);
        ps.setBytes(1, blob);
        ps.executeUpdate();
    } catch (Exception e) {
        Timber.e("Blob Error: " + e.getMessage());
    }

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2016-05-15
    • 2011-07-23
    • 2013-10-17
    • 2018-05-09
    相关资源
    最近更新 更多