执行sql语句时发生Android Force Close Error

时间:2011-11-09 10:14:00

标签: android database sqlite

打开安装应用程序时出现强制关闭错误,此处我附上了我的代码

package my.package;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import java.util.Locale;
import android.app.ProgressDialog;
import android.content.Context;

public class ContentLoader extends Activity{

    private ProgressDialog pDialog;
    private Context cntxt;
    private static String DBPATH="data/data/my.package/databases/";
    private static String DBNAME="mydb.db";

    public void onCreate(Bundle b){
        super.onCreate(b);
        setContentView(R.layout.content_loader);
        cntxt = this.getApplicationContext();

        //pBar = (ProgressBar) findViewById(R.id.loader);
        //pBar.showContextMenu();
        pDialog = ProgressDialog.show(this, null, "Loading Application Content", true);
        final Handler handler = new Handler(){
            public void handleMessage(Message msg){
                pDialog.dismiss();
                Intent rem = new Intent(getApplicationContext(), mynextativity.class);              
                startActivityForResult(rem,0);
            }
        };

        Thread thread = new Thread(){
            public void run(){
                createDBOnFirstInstance();
                //checkDB();                
                handler.sendEmptyMessage(0);
            }
        };
        thread.start();
    }

    private boolean checkDB(){
        boolean found=true;
        String path = DBPATH + DBNAME;
        SQLiteDatabase checkDB=null;
        try{
            checkDB = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);            

        }catch(Exception e){
            found = false;
        }
        if(checkDB != null){             
            checkDB.close();
        }       
        return found;
    }

    public void createDBOnFirstInstance() throws SQLException{
        SQLiteDatabase db;
        if(checkDB()!=true){
                db = openOrCreateDatabase("mydb.db", SQLiteDatabase.CREATE_IF_NECESSARY, null);
                db.setLocale(Locale.getDefault());
                db.setVersion(1);
                db.setLockingEnabled(true);

                final String CREATE_ERR_TABLE = "CREATE TABLE Error_Log("
                                                +"Err_Id INTEGER PRIMARY KEY,"
                                                +"Err_Trace TEXT,"
                                                +"Err_Action TEXT,"
                                                +"Err_Occ_Date TEXT,"
                                                +"Err_Occ_Time TEXT)";

                db.execSQL(CREATE_ERR_TABLE);
                db.close(); 
        }   
    }   
}

当我安装我的应用程序时,它会在我第一次打开应用程序时创建一个数据库和表,因此会导致强制关闭错误。如果我在下面的代码中发表评论

final String CREATE_ERR_TABLE = "CREATE TABLE Error_Log("
                                                +"Err_Id INTEGER PRIMARY KEY,"
                                                +"Err_Trace TEXT,"
                                                +"Err_Action TEXT,"
                                                +"Err_Occ_Date TEXT,"
                                                +"Err_Occ_Time TEXT)";

                db.execSQL(CREATE_ERR_TABLE);
                db.close();

没有发生强制关闭错误,我的应用运行正常。请指导我。

2 个答案:

答案 0 :(得分:0)

你可以试试这个

final String CREATE_ERR_TABLE = "CREATE TABLE **IF NOT EXISTS** Error_Log ("
                                                +"Err_Id INTEGER PRIMARY KEY **AUTOINCREMENT**,"
                                                +"Err_Trace TEXT,"
                                                +"Err_Action TEXT,"
                                                +"Err_Occ_Date TEXT,"
                                                +"Err_Occ_Time TEXT)**;**";
                db.execSQL(CREATE_ERR_TABLE);
                db.close();

答案 1 :(得分:0)

以下是一个有用的示例:http://code.google.com/p/meneameandroid/source/browse/trunk/src/com/dcg/provider/MeneameContentProvider.java

它创建了几个表并且运行良好。