我试图在MSSQL(在AWS中运行的服务器)中存储文档(doc,ppt,pdf,txt..etc)。我正在使用app模块(android)。我可以从用户那里获取文件,但我无法将其上传到数据库。 到目前为止我做了什么:
更新
请求的代码:
@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字节长度,即一个文件读取的字节数。我该怎么办呢?
答案 0 :(得分:-1)
BULK IMPORT本身无法做到这一点,但如果您使用的是SQL2005或更高版本,则可以使用SSIS。第一步是执行Exectute Process Task并使用zip实用程序解压缩文件。第二步是使用SSIS批量插入任务将数据推送到SQL Server。