2016-09-06 1 views
1

Ich beobachtete derek Banas Tutorials und er verwendet OpenOrCreate die Datenbank zu erstellen, hier ist der Code des Java:Unterschied zwischen OpenOrCreateDatabase und die Datenbank Helper-Klasse zu verwenden?

public class MainActivity extends ActionBarActivity { 

SQLiteDatabase contactsDB = null; 

Button createDBButton, addContactButton, deleteContactButton, getContactsButton, 
     deleteDBButton; 
EditText nameEditText, emailEditText, contactListEditText, idEditText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    createDBButton = (Button) findViewById(R.id.createDBButton); 
    addContactButton = (Button) findViewById(R.id.addContactButton); 
    deleteContactButton = (Button) findViewById(R.id.deleteContactButton); 
    getContactsButton = (Button) findViewById(R.id.getContactsButton); 
    deleteDBButton = (Button) findViewById(R.id.deleteDBButton); 
    nameEditText = (EditText) findViewById(R.id.nameEditText); 
    emailEditText = (EditText) findViewById(R.id.emailEditText); 
    contactListEditText = (EditText) findViewById(R.id.contactListEditText); 
    idEditText = (EditText) findViewById(R.id.idEditText); 

} 

public void createDatabase(View view) { 

    try{ 

     // Opens a current database or creates it 
     // Pass the database name, designate that only this app can use it 
     // and a DatabaseErrorHandler in the case of database corruption 

     SQLiteDatabase contactsDB= this.openOrCreateDatabase("MyContacts", MODE_PRIVATE, null); 

     // Execute an SQL statement that isn't select 
     contactsDB.execSQL("CREATE TABLE IF NOT EXISTS contacts " + 
       "(id integer primary key, name VARCHAR, email VARCHAR);"); 

     // The database on the file system 
     File database = getApplicationContext().getDatabasePath("MyContacts.db"); 

     // Check if the database exists 
     if (database.exists()) { 
      Toast.makeText(this, "Database Created", Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(this, "Database Missing", Toast.LENGTH_SHORT).show(); 
     } 

    } 

    catch(Exception e){ 

     Log.e("CONTACTS ERROR", "Error Creating Database"); 

    } 

    // Make buttons clickable since the database was created 
    addContactButton.setClickable(true); 
    deleteContactButton.setClickable(true); 
    getContactsButton.setClickable(true); 
    deleteDBButton.setClickable(true); 

} 

public void addContact(View view) { 

    // Get the contact name and email entered 
    String contactName = nameEditText.getText().toString(); 
    String contactEmail = emailEditText.getText().toString(); 

    // Execute SQL statement to insert new data 
    contactsDB.execSQL("INSERT INTO contacts (name, email) VALUES ('" + 
      contactName + "', '" + contactEmail + "');"); 

} 

public void getContacts(View view) { 

    // A Cursor provides read and write access to database results 
    Cursor cursor = contactsDB.rawQuery("SELECT * FROM contacts", null); 

    // Get the index for the column name provided 
    int idColumn = cursor.getColumnIndex("id"); 
    int nameColumn = cursor.getColumnIndex("name"); 
    int emailColumn = cursor.getColumnIndex("email"); 

    // Move to the first row of results 
    cursor.moveToFirst(); 

    String contactList = ""; 

    // Verify that we have results 
    if(cursor != null && (cursor.getCount() > 0)){ 

     do{ 
      // Get the results and store them in a String 
      String id = cursor.getString(idColumn); 
      String name = cursor.getString(nameColumn); 
      String email = cursor.getString(emailColumn); 

      contactList = contactList + id + " : " + name + " : " + email + "\n"; 

      // Keep getting results as long as they exist 
     }while(cursor.moveToNext()); 

     contactListEditText.setText(contactList); 

    } else { 

     Toast.makeText(this, "No Results to Show", Toast.LENGTH_SHORT).show(); 
     contactListEditText.setText(""); 

    } 

} 

public void deleteContact(View view) { 

    // Get the id to delete 
    String id = idEditText.getText().toString(); 

    // Delete matching id in database 
    contactsDB.execSQL("DELETE FROM contacts WHERE id = " + id + ";"); 

} 

public void deleteDatabase(View view) { 

    // Delete database 
    this.deleteDatabase("MyContacts"); 

} 

@Override 
protected void onDestroy() { 

    contactsDB.close(); 

    super.onDestroy(); 
} 

} 

aber wenn ich diesen Code ausführen, es zeigt mir ein Toast Nachricht, dass Datenbank ist fehlt, werde ich Ihnen die XML zeigen auch:

Meine XML ...

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Create Database" 
    android:id="@+id/createDBButton" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:onClick="createDatabase"/> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Add Contact" 
    android:id="@+id/addContactButton" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/createDBButton" 
    android:layout_toEndOf="@+id/createDBButton" 
    android:layout_marginLeft="10dp" 
    android:onClick="addContact" 
    android:clickable="false" /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Delete Contact" 
    android:id="@+id/deleteContactButton" 
    android:layout_below="@+id/createDBButton" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:onClick="deleteContact" 
    android:clickable="false"/> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Get Contacts" 
    android:id="@+id/getContactsButton" 
    android:layout_below="@+id/createDBButton" 
    android:layout_toRightOf="@+id/deleteContactButton" 
    android:layout_toEndOf="@+id/deleteContactButton" 
    android:layout_marginLeft="10dp" 
    android:onClick="getContacts" 
    android:clickable="false"/> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/nameEditText" 
    android:layout_below="@+id/deleteContactButton" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:hint="Name" 
    android:layout_marginTop="5dp"/> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/emailEditText" 
    android:layout_below="@+id/nameEditText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:hint="Email" 
    android:layout_marginTop="5dp" 
    android:inputType="textEmailAddress"/> 

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:ems="10" 
    android:id="@+id/idEditText" 
    android:layout_below="@+id/emailEditText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:hint="ID to Delete" 
    android:layout_marginTop="5dp"/> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Delete Database" 
    android:id="@+id/deleteDBButton" 
    android:onClick="deleteDatabase" 
    android:layout_below="@+id/idEditText" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:clickable="false" /> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textMultiLine" 
    android:ems="10" 
    android:id="@+id/contactListEditText" 
    android:lines="8" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

Mein Problem auch, dass ich die Website für Tutorials Punkte überprüft sie nichts aus diesem Code verwendet haben. Stattdessen verwenden sie eine Datenbank-Helper-Klasse und sie verwendeten die Insert-Methoden und create .... und sie verwenden sie in anderen Klassen.

Also, was ist der Unterschied zwischen derek Banas Tutorials und Anleitungen Punkt Website und warum der Code von derek banas gab mir diesen Fehler „Datenbank fehlt“ wenn ich drücke auf die Schaltfläche Datenbank erstellen ???

+0

@Vogella als ein hervorragendes Tutorial zur Verwendung von SQLite auf Android, sollten Sie vielleicht einen Blick darauf werfen: http://www.vogella.com/tutorials/AndroidSQLite/article.html Im Allgemeinen vermeiden 'openOrCreateDatabase' und bevorzugen Lösungen mit SQLiteOpenHelper – orip

Antwort

-1

Alles sieht gut aus, aber Ihre Abfrage für Tabelle in der Datenbank zu schaffen, ist falsch und wie Sie jede Operation auf sie gerade ausführen, die Fehler

contactsDB.execSQL("CREATE TABLE IF NOT EXISTS contacts " + 
       "(id integer primary key, name VARCHAR, email VARCHAR);"); 

zeigt stattdessen, dass die Verwendung mit diesem

contactsDB.execSQL("CREATE TABLE IF NOT EXISTS contacts " + 
       "(_id INTEGER primary key, name VARCHAR, email VARCHAR);"); 

als die Art, wie Sie ID übergeben haben, ist falsch. es sollte nach Standards wie _id sein und auch ganze Zahl als INTEGER

Viel Glück

+0

'_id' ist ein Standard, aber es ist nicht notwendig. Und ich denke nicht, dass der Fall auf den Spaltentyp ankommt, also bin ich mir nicht sicher, ob Sie die Frage –

+0

@ cricket_007 beantwortet haben, danke für Ihre Anweisung. Ich habe es entsprechend meiner Android-Code-Erfahrung und der Art, wie ich es benutzt habe, beantwortet. Aber wird dies auch im Kopf behalten, danke. –

0

SQLiteOpenHelper Versionen Datenbank-Dateien verwenden, damit Sie sie über Schemaänderungen migrieren können. Es öffnet auch die Datenbankdatei für Sie.

openOrCreateDatabase() öffnet/erstellt nur die Datenbankdatei und SQLiteOpenHelper verwendet das intern.

Warum erhalten Sie "Datenbank fehlt", weil Sie erstellen/öffnen Datenbankdatei namens MyContacts, aber für das Vorhandensein einer anderen Datei MyContacts.db testen.

+0

danke mann es funktioniert. Aber jetzt ist mein neuer Fehler mit der Insert-Anweisung es stoppt die Anwendung, wenn Sie die Schaltfläche Kontakt hinzufügen drücken – Marwan

Verwandte Themen