如何在 Android 中将 blob 上传到 MSSQL?
How to upload blob to MSSQL in Android?
我正在尝试使用来自 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:
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 服务器说我需要先将它转换为 varbinary(max)。
显然,我不需要使用 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());
}
我正在尝试使用来自 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: 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 服务器说我需要先将它转换为 varbinary(max)。
显然,我不需要使用 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());
}