Erro ao criar o banco

Galera, estou com alguns erros… e estou com uma certa dificuldade em fazer um projeto com banco de dados no android…

segue meu codigo e meu erro:

Classe principal:

package br.com;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity implements OnClickListener{

    Button enviar;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        enviar = (Button) findViewById(R.id.botao);
        enviar.setOnClickListener(this);
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        String[] from = { BookDbHelper.C_ID, BookDbHelper.C_TITULO, BookDbHelper.C_AUTOR }; // mapeia o retorno do cursor
        int[] to = {R.id.tid, R.id.ttitulo, R.id.tautor }; // lista onde serao exibidos
        
        Cursor livros = managedQuery(BookProvider.CONTENT_URI, null, null, null, null); // retorna todos os registros cadastrados
            
        CursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.activity_main1, livros, from, to);
            
        ListView list = (ListView) findViewById(R.id.lslViewList);
        
        list.setAdapter(adapter);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent (this, SalvarActivity.class);
        startActivity(intent);
    }
}
package br.com;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class BookDbHelper extends SQLiteOpenHelper{

    static final String DB_NAME = "books.db";
    static final int DB_VERSION = 1;
    static final String TABLE = "livros";
    static final String C_ID = "_id";
    static final String C_TITULO = "titulo";
    static final String C_AUTOR = "autor";
    
    public BookDbHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            String sql = "CREATE TABLE " + TABLE + "(" + 
                          C_ID + "integer primary key autoincrement, " + 
                          C_TITULO + "text, "+ 
                          C_AUTOR + "text)";
            db.execSQL(sql);
        } catch (Exception e) {
            Log.e("onCreate", e.getMessage()); 
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        try {
            db.execSQL("drop table if exists " + TABLE);
            this.onCreate(db);
        } catch (Exception e) {
            Log.e("onUpgrade", e.getMessage()); 
        }
    }
}
package br.com;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;

public class BookProvider extends ContentProvider{

    public static final String AUTHORITY = "br.com.treinaweb.livros";
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
    public static final String ID_PATH = "id/*";
    public static final String TITULO_PATH = "titulo/*";
    public static final String AUTOR_PATH = "autor/*";
    
    public static final int BOOKS = 1;
    public static final int BY_ID = 2;
    public static final int BY_TITULO = 3;
    public static final int BY_AUTOR = 4;
    
    private BookDbHelper dbHelper;
    
    static final UriMatcher mather = new UriMatcher(UriMatcher.NO_MATCH);
    
    static {
        mather.addURI(AUTHORITY, null, BOOKS);
        mather.addURI(AUTHORITY, ID_PATH, BY_ID);
        mather.addURI(AUTHORITY, TITULO_PATH, BY_TITULO);
        mather.addURI(AUTHORITY, AUTOR_PATH, BY_AUTOR);
        mather.addURI(AUTHORITY, "#", BOOKS);
    }
    
    @Override // EXCLUI O REGISTRO  
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        
        int match = mather.match(uri); 
        
        if (match == 1){
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            return db.delete(BookDbHelper.TABLE, selection, selectionArgs);
        } else {
            return 0;
        }
    }

    @Override // RETORNA O TIPO DA URI INFORMADA
    public String getType(Uri uri) {
        int match = mather.match(uri);
        
        if (match == 1){
            return "vnd.android.cursor.dir/vnd.treinaweb.livros";
        } else {
            return "vnd.android.cursor.item/vnd.treinaweb.livros";
        }
    }

    @Override // INSERE UM NOVO REGISTRO
    public Uri insert(Uri uri, ContentValues values) {
        int match = mather.match(uri);
        
        long newID = 0;
        
        if (match != 1){ // verifica se a uri esta correta
            throw new IllegalArgumentException("Wrong Uri " + uri.toString());
        }
        
        if (values != null){
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            newID = db.insert(BookDbHelper.TABLE, null, values);
            return Uri.withAppendedPath(uri, String.valueOf(newID));
        }
        
        return null;
    }

    @Override // CHAMADO QUANDO O PROVEDOR ESTA SENDO INICIADO
    public boolean onCreate() {
        dbHelper = new BookDbHelper(getContext());
        if (dbHelper == null){
            return false;
        } else {
            return false;   
        }
    }

    @Override // RECEBE UM PEDIDO DO CLIENTE E RETORNA O OBJETO DO TIPO CURSOR
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        SQLiteDatabase db = dbHelper.getWritableDatabase(); // abre conexao
        Cursor result = null;
        String order = null;
        
        if (sortOrder != null){
            order = sortOrder;
        }
        
        int match = mather.match(uri);
        
        //try {
            switch (match) {
            case BOOKS:
                result = db.query(BookDbHelper.TABLE, projection, selection, selectionArgs, null, null, order);
                break;
            
            case BY_ID:
                result = db.query(BookDbHelper.TABLE, projection, BookDbHelper.C_ID + "=?", new String[]{uri.getLastPathSegment()}, null, null, order);
                break;
            
            case BY_TITULO:
                result = db.query(BookDbHelper.TABLE, projection, BookDbHelper.C_TITULO + "=?", new String[]{uri.getLastPathSegment()}, null, null, order);
                break;
                
            case BY_AUTOR:
                result = db.query(BookDbHelper.TABLE, projection, BookDbHelper.C_AUTOR + "=?", new String[]{uri.getLastPathSegment()}, null, null, order);
                break;  
            }
        /*} catch (Exception e) {
            Log.i("Error provider", e.getMessage());
        } finally {
            db.close();
        }
            */
        
        return result;
    }

    @Override // ATUALIZA O REGISTRO
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        int match = mather.match(uri);
        
        int rows = 0;
        
        if (match != 1){ // verifica se a uri esta correta
            throw new IllegalArgumentException("Wrong Uri " + uri.toString());
        }
        
        if (values != null){
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            rows = db.update(BookDbHelper.TABLE, values, selection, selectionArgs);
        }
        
        return rows;
    }
}
package br.com;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class SalvarActivity extends Activity implements OnClickListener {

    Button salvar, voltar;
    EditText autor, titulo;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inserir);
        
        salvar = (Button) findViewById(R.id.bt_salvar);
        voltar = (Button) findViewById(R.id.bt_voltar);
        salvar.setOnClickListener(this);
        voltar.setOnClickListener(this);
        
        autor = (EditText) findViewById(R.id.ed_autor);
        titulo = (EditText) findViewById(R.id.ed_titulo);
        
    }

    @Override
    public void onClick(View v) {
        
        switch (v.getId()) {
        case R.id.bt_voltar:
            finish();
            break;
            
        case R.id.bt_salvar:
            
            ContentValues values = new ContentValues();
            values.put(BookDbHelper.C_TITULO, titulo.getText().toString());
            values.put(BookDbHelper.C_AUTOR, autor.getText().toString());
            
            ContentResolver provedor = getContentResolver();
            provedor.insert(BookProvider.CONTENT_URI, values);
            
            //Intent intent = new Intent(this, MainActivity.class);
            //startActivity(intent);
            
            break;
        }
    }
}

Logo quando eu executo o projeto já aparece este erro:

07-23 14:47:03.372: E/AndroidRuntime(316): Uncaught handler: thread main exiting due to uncaught exception
07-23 14:47:03.382: E/AndroidRuntime(316): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com/br.com.MainActivity}: android.database.sqlite.SQLiteException: no such table: livros: , while compiling: SELECT * FROM livros
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.os.Looper.loop(Looper.java:123)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.ActivityThread.main(ActivityThread.java:4363)
07-23 14:47:03.382: E/AndroidRuntime(316):  at java.lang.reflect.Method.invokeNative(Native Method)
07-23 14:47:03.382: E/AndroidRuntime(316):  at java.lang.reflect.Method.invoke(Method.java:521)
07-23 14:47:03.382: E/AndroidRuntime(316):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-23 14:47:03.382: E/AndroidRuntime(316):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-23 14:47:03.382: E/AndroidRuntime(316):  at dalvik.system.NativeStart.main(Native Method)
07-23 14:47:03.382: E/AndroidRuntime(316): Caused by: android.database.sqlite.SQLiteException: no such table: livros: , while compiling: SELECT * FROM livros
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1221)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1108)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1066)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1143)
07-23 14:47:03.382: E/AndroidRuntime(316):  at br.com.BookProvider.query(BookProvider.java:104)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.content.ContentProvider$Transport.query(ContentProvider.java:130)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.content.ContentResolver.query(ContentResolver.java:202)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.Activity.managedQuery(Activity.java:1495)
07-23 14:47:03.382: E/AndroidRuntime(316):  at br.com.MainActivity.onStart(MainActivity.java:32)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.Activity.performStart(Activity.java:3723)
07-23 14:47:03.382: E/AndroidRuntime(316):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2468)

Alguem sabe como resolver isso!?