如何在Android中将blob上传到MSSQL?

时间:2017-09-11 14:32:14

标签: android sql-server blob jtds

我正在尝试使用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)                                                                            at com.procatdt.sandfile.CopyActivity.onCreate(CopyActivity.java:46)

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

1 个答案:

答案 0 :(得分:0)

显然,我不需要使用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());
    }