Как загрузить файлы (документы)/zip в MSSQL с помощью jdbc?

Я пытаюсь хранить документы (doc,ppt,pdf,txt..etc) в MSSQL(сервер работает в AWS). Я работаю над модулем приложения (Android). Я могу получить файлы от пользователя, но не могу загрузить их в базу данных. Что я сделал до сих пор:

  1. Пытался загрузить файл напрямую, используя setBinaryStream
  2. Попытался загрузить файл InputStream с помощью setBinaryStream
  3. В этом столбце базы данных нельзя объявить тип 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 байтов, т.е. считанных байтов для одного файла. Как я должен идти об этом?

База данных Pic 2

1 ответ

BULK IMPORT изначально не сможет сделать это, однако, если вы используете SQL2005 или выше, вы можете использовать SSIS. Первым шагом было бы выполнить задачу Exectute Process и использовать утилиту zip для распаковки файла. Вторым шагом является использование задачи "Массовая вставка" служб SSIS для загрузки данных в SQL Server.

Другие вопросы по тегам