2012-06-05 6 views
0

데이터베이스 파일에 문제가 있습니다 데이터베이스 파일을 mydb라는 자산에 추가했습니다. 코드를 실행하면 데이터베이스 파일이 위치하지 않는다는 메시지가 나타납니다. Toast.makeText (this, "No contact found", Toast.LENGTH_LONG) .show();를 호출합니다. 레코드가 반환되지 않기 때문에 호출됩니다. 또한 FileNotFoundException 예외가 없으므로 파일을 찾는 것으로 알고 있습니다. 이것은 Android Application Development book의 예제 양식입니다.레코드가 반환되지 않지만 sqlitebrowser에 데이터가 포함 된 안드로이드 데이터베이스

public class DatabaseActivity extends Activity { 
    /** Called when the activity is first created. */ 
    TextView quest, response1, response2; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView quest = (TextView) findViewById(R.id.quest); 


     try {   
      String destPath = "/data/data/" + getPackageName() + "/databases/MyDB"; 
      File f = new File(destPath);    
      if (!f.exists()) {   
       CopyDB(getBaseContext().getAssets().open("mydb"), 
        new FileOutputStream(destPath)); 
      } 
     } catch (FileNotFoundException e) {   
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     DBAdapter db = new DBAdapter(this); 


     //---get a contact--- 
     db.open(); 
     Cursor c = db.getContact(2); 
     if (c.moveToFirst())   
      DisplayContact(c); 
     else 
      Toast.makeText(this, "No contact found", Toast.LENGTH_LONG).show(); 
     db.close(); 



    } 

    public void CopyDB(InputStream inputStream, OutputStream outputStream) 
    throws IOException { 
     //---copy 1K bytes at a time--- 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = inputStream.read(buffer)) > 0) { 
      outputStream.write(buffer, 0, length); 
     } 
     inputStream.close(); 
     outputStream.close(); 
    } 

    public void DisplayContact(Cursor c) 
    { 
    quest.setText(String.valueOf(c.getString(1)));  
     //quest.setText(String.valueOf("this is a text string"));  
    } 
} 

데이터를 업로드하는 더 좋은 방법이 있습니까?

답변

1

몇 가지 그런 다음 다시 복사하지 않습니다 데이터베이스가 존재하는 (아마도 빈) 다음 번 때문에 !f.exists() 검사의 ... 여기에 마음에

  1. 을 온다. 그래서 어쩌면 지금 당신이 꼬임을 해결하고 어쩌면 Log.e(TAG, "message", e)로 변경하고에 표시 오류를보고 시작하는 경우를 참조 e.printStackTrace()와 내가 혼합 된 결과를 했어 !f.exists()

  2. 에 추가 할 때까지, 모든 시간을 복사 로그 캣

는 더 나은 방법에 관해서 ... 나는 1. 파일을 만드는 것입니다 ...이 두 가지 방법을 수행 (JSON, CVS 등) 후 공정 및로드했습니다 데이터베이스가 비어있는 경우 2. 데이터베이스가 비어 있으면 자바 직렬화 된 객체 배열을 만들고 데이터베이스에로드한다는 점을 제외하고 첫 번째와 비슷합니다.

또한 DBAdapter이 어떤 모양인지 모릅니다. 데이터베이스를 감싸기 때문에 문제가있을 수 있습니다.

+0

감사합니다. 시도해 보겠습니다. DBAdapter는 다른 예제에서도 사용 했으므로 잘 작동하지 않습니다. DB 파일을 자산에 추가하고 읽을 때 문제가 발생했습니다. 업로드가 잘됩니다. 데이터는 커서로 읽어 들여 XML 레이아웃 파일로 출력 될 수 있습니다. – al23dev

+0

그러나'DBAdapter'는'String destPath = "/ data/data /"+ getPackageName() + "/ databases/MyDB"; (파일 이름과 같은 경우 등). 아마도 리소스 데이터베이스를 다른 파일에 복사하고 있습니까? – stuckless

+0

그것은 테이블의 이름이었습니다. 테이블을 basic_table이라고 불렀고이 didnt가 작동하는 것처럼 보였습니다. 그래서 나는 싫어하는 것을 제거했다. 또한 printStackTrace()를 사용하지 말라고 조언했습니다. 또한 if.exists() 문에 대한 조언을 해주셔서 감사합니다. – al23dev

관련 문제