Как загрузить файлы (документы)/zip в MSSQL с помощью jdbc?
Я пытаюсь хранить документы (doc,ppt,pdf,txt..etc) в MSSQL(сервер работает в AWS). Я работаю над модулем приложения (Android). Я могу получить файлы от пользователя, но не могу загрузить их в базу данных. Что я сделал до сих пор:
- Пытался загрузить файл напрямую, используя setBinaryStream
- Попытался загрузить файл InputStream с помощью setBinaryStream
- В этом столбце базы данных нельзя объявить тип BLOB-объектов
Обновить
Запрошенный код:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.sm_attachments:
FilePickerDialog filePickerDialog = new FilePickerDialog(SendMailToCustomers.this,properties);
filePickerDialog.setTitle("Select Files");
filePickerDialog.show();
filePickerDialog.setDialogSelectionListener(new DialogSelectionListener() {
@Override
public void onSelectedFilePaths(String[] files) {
for (String file : files) {
Uri uri = Uri.fromFile(new File(file));
try {
File file1 = new File(uri.getPath());
//InputStream inputStream = new FileInputStream(new File(uri.getPath()));
byte[] bytesArray = null;
bytesArray = new byte[(int) file1.length()];
FileInputStream fileInputStream = new FileInputStream(file1);
fileInputStream.read(bytesArray);
String sql = "INSERT INTO Storedata (FileName,MyFile) values (?,?)";
PreparedStatement statement = con.prepareStatement(sql);
statement.setString(1,"myNewFile");
//statement.setBinaryStream(2, /*inputStream*/fileInputStream,fileInputStream.available());
statement.setBytes(2, /*inputStream*/bytesArray);
int row = statement.executeUpdate();
if(row>0){
Toast.makeText(SendMailToCustomers.this, "The File was inserted Successfully", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onSelectedFilePaths: Inserted File Successfully");
}
else{
Toast.makeText(SendMailToCustomers.this, "Failed To Insert File", Toast.LENGTH_SHORT).show();
Log.d(TAG, "onSelectedFilePaths: Failed To Insert File");
}
} catch (Exception e) {
Log.d(TAG, "onSelectedFilePaths: "+"Exception - "+e.getMessage()+"\n");
e.printStackTrace();
}
break;
Файлы String[] - это выбранные файлы (Uri) для загрузки.
Следующая картина моей базы данных SQL:
MyFile является varbinary(MAX)
После этого: Statement.setBytes (2, / inputStream / bytesArray);
Я получаю следующий результат. Но это около 433984 байтов, т.е. считанных байтов для одного файла. Как я должен идти об этом?
1 ответ
BULK IMPORT изначально не сможет сделать это, однако, если вы используете SQL2005 или выше, вы можете использовать SSIS. Первым шагом было бы выполнить задачу Exectute Process и использовать утилиту zip для распаковки файла. Вторым шагом является использование задачи "Массовая вставка" служб SSIS для загрузки данных в SQL Server.