[英]Android Delete Database programmatically: android.system.ErrnoException: chmod failed: EPERM (Operation not permitted)
[英]chmod failed: EPERM (Operation not permitted) in android?
我想為此在sdcard或外部sdcard中創建數據庫,我嘗試過此代碼,並使用此代碼,我已成功在sdcard中創建數據庫,但在logcat中,它給我以下警告
Logcat
07-18 14:18:22.140:W / FileUtils(8595):無法執行chmod(/ mnt / sdcard / peakmedia / DB_PMD):libcore.io.ErrnoException:chmod失敗:EPERM(不允許操作)
DB_Helper.java
public class DB_Helper extends SQLiteOpenHelper
{
public DB_Helper(Context context)
{
super(context, Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + DB_Constant.DB.FILE_DIR
+ File.separator + DB_Constant.DB.DATABASENAME, null, DB_Constant.DB.DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
String query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYFILES_TABLE);
db.execSQL(query);
query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYUSERS_TABLE);
db.execSQL(query);
query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYPLAYLIST_TABLE);
db.execSQL(query);
query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYDEVICE_TABLE);
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
if(newVersion > oldVersion)
{
db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYFILES);
onCreate(db);
db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYUSERS);
onCreate(db);
db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYPLAYLIST);
onCreate(db);
db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYDEVICE);
onCreate(db);
}
}
}
剛剛解決了這個問題。
您必須讓您的應用加入linux build才能授予它SYSTEM權限。
將此行添加到Android.mk
LOCAL_CERTIFICATE := platform
將此添加到AndroidManifest.xml
清單節點中
android:sharedUserId="android.uid.system"
生成apk並將其推送到/ system / app /
現在您可以嘗試運行
final String command = "chmod 777 /data/ena"; Process p = Runtime.getRuntime().exec(command);
要么
File file = new File("/data/ena"); if (file.exists()) { boolean result = file.setExecutable(true); Log.e(TAG, "trpb67, RESULT IS " + result); }
結果值應為true
昨天我遇到了類似Mahesh的問題(出現相同的警告消息,將SQL Server中的數據插入SQLite,SQLite中有2個表應該接收數據,但是只有1個表接收了數據,另一個表為空)。
但是今天,我嘗試將來自SQL Server的數據再次插入SD卡中的2個SQLite表中,這一次,有2個表接收到數據。
唯一的區別是仿真器設置。
擴大SD卡的空間設置,從幾MB到8GB(參考圖片)。 模擬器設置照片
盡管也出現警告,但插入工作成功。
檢查您的設備是否以MTP USB模式連接。 有時以前的MTP模式連接可能會導致此問題。 只需重新啟動設備,然后檢查它是否可以工作。
您必須更改此文件夾的所有者(chown)。 當前,應用程序/您不是您要在其中安裝數據庫的文件夾的所有者。
所以你必須做類似的事情
sudo chown -R theuser /mnt/sdcard/peakmedia/DB_PMD
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.