내 프로그램이있는 벽에이 프로그램을 실행했습니다. 이 문제에 대한 해결책을 찾기 위해 인터넷에서 검색을했는데 여기를 찾을 수 없었습니다.SQLiteDatabaseCorruptException : 데이터베이스 디스크 이미지의 형식이 잘못되었습니다.
원격 서버에서 SQLite 데이터베이스를 다운로드하려고합니다. 다운로드가 잘된 것 같습니다. 전화에서 파일을 가져 와서 볼 수 있습니다. 괜찮아 보인다.
android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
그래서 내가 서버의 DB를 삭제하고 휴대 전화에서 DB 및 I 데이터베이스를 작성하고 제출하도록되어 활동으로 건너 : 내 프로그램이 데이터베이스를 읽으려고 할 때, 나는 얻을 그것은 서버에. 이제 데이터베이스가 전화와 서버에서 다시 만들어졌습니다. 나는 그들을 열 수있어 그들은 잘 보인다.
프로그램을 다시 시작하면 제 회 전자가 데이터로 채워지지 않고 동일한 오류가 발생합니다.
여기에 스피너를 채우는 코드가 있습니다.
private void fillSpinner(){
mDbHelper = new myDbAdapter(this);
mDbHelper.open();
Cursor c = mDbHelper.fetchColumns(new String[] {"_id","name"});
if (! c.moveToFirst()){
mDbHelper.createRow("Create Name");
c = mDbHelper.fetchColumns(new String[] {"_id","name"});
}
// create an array to specify which fields we want to display
String[] from = new String[]{"name"};
// create an array of the display item we want to bind our data to
int[] to = new int[]{android.R.id.text1};
// create simple cursor adapter
SimpleCursorAdapter adapter =
new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to);
mDbHelper.close();
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// get reference to our spinner
c.close();
s.setAdapter(adapter);
}
데이터베이스의 데이터를 액세스하고 액세스하는 데 사용되므로 참조 용 fetchColumns 메소드입니다.
public Cursor fetchColumns(String[] colnames) {
Cursor mCursor = database.query(DATABASE_TABLE, colnames, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Logcat이 나를이 방법으로 안내합니다. 위의 오류는 getWritableDatabase()가 범인임을 나타냅니다. db가 null이 아니므로 sqlite 데이터베이스 브라우저로 내용을 볼 수 있습니다.
public SQLiteDatabase open() throws SQLException {
dbHelper = new myDbHelper(context);
database = dbHelper.getWritableDatabase();
return database;
}
다음은 db를 다운로드하는 방법입니다.
public void downloadFile(String file_name) throws IOException {
URL url = new URL(file_url + file_name);
URLConnection connection = url.openConnection();
InputStream response = connection.getInputStream();
FileOutputStream fos = new FileOutputStream(local_file_path + file_name);
byte data[] = new byte[1024];
fos.write(data);
fos.close();
response.close();
}
누구든지 문제의 원인에 대한 아이디어가 있습니까? 디버깅 및 스택 추적 및 모든 open() 메서드에서 오는 것으로 보인다. 여기에 스택 추적입니다
11-05 19:39:32.861: INFO/Database(9084): sqlite returned: error code = 11, msg =
database corruption found by source line 40107
11-05 19:39:32.861: INFO/Database(9084): sqlite returned: error code = 11, msg = database disk image is malformed
11-05 19:39:32.861: ERROR/Database(9084): CREATE TABLE android_metadata failed
11-05 19:39:32.881: ERROR/Database(9084): Failed to setLocale() when constructing, closing the database
11-05 19:39:32.881: ERROR/Database(9084): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
11-05 19:39:32.881: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
11-05 19:39:32.881: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
11-05 19:39:32.881: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818)
11-05 19:39:32.881: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
11-05 19:39:32.881: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
11-05 19:39:32.881: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
11-05 19:39:32.881: ERROR/Database(9084): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
11-05 19:39:32.881: ERROR/Database(9084): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
11-05 19:39:32.881: ERROR/Database(9084): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
11-05 19:39:32.881: ERROR/Database(9084): at com.project.myDbAdapter.open(myDbAdapter.java:42)
11-05 19:39:32.881: ERROR/Database(9084): at com.project.Main.fillSpinner(Main.java:77)
11-05 19:39:32.881: ERROR/Database(9084): at com.project.Main.onCreate(Main.java:40)
11-05 19:39:32.881: ERROR/Database(9084): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-05 19:39:32.881: ERROR/Database(9084): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-05 19:39:32.881: ERROR/Database(9084): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-05 19:39:32.881: ERROR/Database(9084): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-05 19:39:32.881: ERROR/Database(9084): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-05 19:39:32.881: ERROR/Database(9084): at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 19:39:32.881: ERROR/Database(9084): at android.os.Looper.loop(Looper.java:123)
11-05 19:39:32.881: ERROR/Database(9084): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-05 19:39:32.881: ERROR/Database(9084): at java.lang.reflect.Method.invokeNative(Native Method)
11-05 19:39:32.881: ERROR/Database(9084): at java.lang.reflect.Method.invoke(Method.java:521)
11-05 19:39:32.881: ERROR/Database(9084): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-05 19:39:32.881: ERROR/Database(9084): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-05 19:39:32.881: ERROR/Database(9084): at dalvik.system.NativeStart.main(Native Method)
11-05 19:39:32.901: ERROR/Database(9084): Deleting and re-creating corrupt database /data/data/com.project/databases/names
11-05 19:39:32.901: ERROR/Database(9084): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
11-05 19:39:32.901: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
11-05 19:39:32.901: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
11-05 19:39:32.901: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818)
11-05 19:39:32.901: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
11-05 19:39:32.901: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
11-05 19:39:32.901: ERROR/Database(9084): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
11-05 19:39:32.901: ERROR/Database(9084): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
11-05 19:39:32.901: ERROR/Database(9084): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
11-05 19:39:32.901: ERROR/Database(9084): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
11-05 19:39:32.901: ERROR/Database(9084): at com.project.myDbAdapter.open(myDbAdapter.java:42)
11-05 19:39:32.901: ERROR/Database(9084): at com.project.Main.fillSpinner(SBMain.java:77)
11-05 19:39:32.901: ERROR/Database(9084): at com.project.Main.onCreate(SBMain.java:40)
11-05 19:39:32.901: ERROR/Database(9084): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-05 19:39:32.901: ERROR/Database(9084): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-05 19:39:32.901: ERROR/Database(9084): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-05 19:39:32.901: ERROR/Database(9084): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-05 19:39:32.901: ERROR/Database(9084): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-05 19:39:32.901: ERROR/Database(9084): at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 19:39:32.901: ERROR/Database(9084): at android.os.Looper.loop(Looper.java:123)
11-05 19:39:32.901: ERROR/Database(9084): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-05 19:39:32.901: ERROR/Database(9084): at java.lang.reflect.Method.invokeNative(Native Method)
11-05 19:39:32.901: ERROR/Database(9084): at java.lang.reflect.Method.invoke(Method.java:521)
11-05 19:39:32.901: ERROR/Database(9084): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-05 19:39:32.901: ERROR/Database(9084): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-05 19:39:32.901: ERROR/Database(9084): at dalvik.system.NativeStart.main(Native Method)
11-05 19:39:33.311: INFO/ActivityManager(66): Displayed activity com.project.Main: 552 ms (total 552 ms)
어떤 도움을 주시면 감사하겠습니다! 미리 감사드립니다! HERE
는 작업 CODE public void downloadFile(String file_name) throws IOException {
URL url = new URL(file_url + file_name);
URLConnection connection = url.openConnection();
InputStream response = connection.getInputStream();
FileOutputStream fos = new FileOutputStream(local_file_path + file_name);
byte data[] = new byte[1024];
IOUtils.copy(response, fos);
response.close();
}
private void fillSpinner(){
mDbHelper = new myDbAdapter(this);
mDbHelper.open();
Cursor c = mDbHelper.fetchColumns(new String[] {"_id","name"});
if (! c.moveToFirst()){
mDbHelper.createRow("Create Name");
c = mDbHelper.fetchColumns(new String[] {"_id","name"});
c.close();
}
// create an array to specify which fields we want to display
String[] from = new String[]{"name"};
// create an array of the display item we want to bind our data to
int[] to = new int[]{android.R.id.text1};
// create simple cursor adapter
SimpleCursorAdapter adapter =
new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to);
mDbHelper.close();
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// get reference to our spinner
c.close();
s.setAdapter(adapter);
}
I 커서를 폐쇄하지 않은 것이다.
확인
http://www.touchlab.co/blog/android-mini-commons/
전화, 내가 라인을 추가하고 fos.write (데이터)를 꺼내서 : 나는 아파치 평민의 아래 손질 버전을했다. 어떤 오류도없는 것 같고 파일이 복사 중입니다. 항목을 잘 볼 수는 있지만 회 전자는 채워지지 않습니다. : – tricknology
커서 어댑터가있는 회 전자를 사용하지 마십시오. 많이 도움이되지 못합니다. –
끝내 주셔서 감사합니다. 도움을 주셔서 감사합니다. 작업 코드로 수정 사항을 게시하십시오. – tricknology