2017-09-11 37 views
0

我試圖從Android Studio使用JTDS 1.30將jpg文件上傳到MSSQL服務器。我能得到我的JPG成BLOB格式(或者如果有必要的base64)使用此代碼:如何在Android中將blob上傳到MSSQL?

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 Kallen', '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: FATAL EXCEPTION: main Process: com.procatdt.sandfile, PID: 8462 java.lang.AbstractMethodError at net.sourceforge.jtds.jdbc.JtdsConnection.createBlob(JtdsConnection.java:2755) at com.procatdt.sandfile.CopyActivity.onCreate(CopyActivity.java:46)

它不會出現,我可以把它上傳到欄目中直接爲Base64或者,如SQL Server的說,我需要ŧ o首先將其轉換爲varbinary(max)。

+0

它需要存儲在數據庫中,還是可以將其保存到文件並將文件名保存在數據庫中? –

+0

我可以選擇做。我正在控制SQL服務器上的表。我將文件名保存爲查詢的一部分,但是我需要以某種方式將實際文件轉移到服務器。 – Jay

回答

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()); 
    }