在尝试创建数据库时获取DATABASE MISSING

时间:2015-11-08 12:22:16

标签: android sqlite

我使用SQLite数据库创建了我的简单项目。根据我的代码,应用程序应该在我点击“创建数据库”时显示数据库创建,但它显示数据库缺失。我已经检查过logcat,但我没有收到任何错误。

MainActivity

package com.maka.sujan.sqllitedatabase;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;

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
            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();
    }

}

activity_main

<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" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

将扩展名放在行中:

let branchListViewController = (self.viewControllers[0] as? UINavigationController)?.topViewController as? BTBranchTableViewController

branchListViewController?.branches = self.branches

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

答案 1 :(得分:0)

您对openOrCreateDatabase()的来电创建了一个文件名为MyContacts的数据库。

您拨打getDatabasePath()的电话会搜索名称不同的文件,即MyContacts.db