2017-09-11 41 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()); 
    }