为什么我的SQL数据库没有创建?(Android)

时间:2014-11-12 15:37:04

标签: android database sqlite

我阅读了很多教程,但对我来说仍然很难。 然后我复制一些到Eclipse尝试它不起作用 我检查文件探索数据库没有创建。 以下是我的代码。请帮助和谢谢。

这是数据库助手。

package com.example.trydb;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBHelper extends SQLiteOpenHelper {
   public static final String TABLE_NAME = "friends"; 
   public static final String NAME = "name";
   public static final String TEL = "tel";
   public static final String EMAIL = "email";  
   private final static String DATABASE_NAME = "demo.db"; 
   private final static int DATABASE_VERSION = 1;  
   public DBHelper(Context context) {
       super(context, DATABASE_NAME, null, DATABASE_VERSION);
       Log.d("Database operations","Database created ");
  }
    @Override   
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + NAME + "CHAR," + TEL + "CHAR," +     EMAIL + "CHAR);");
        Log.d("Database operations","Database created successfully");
    }
    @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME; 
            db.execSQL(DROP_TABLE);     
            onCreate(db);
    }
}

这是主要活动。

package com.example.trydb;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {
    private DBHelper dbhelper ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbhelper = new DBHelper(this);
        dbhelper.close();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

4 个答案:

答案 0 :(得分:1)

尝试更改为

    @Override   
    public void onCreate(SQLiteDatabase db) {
        String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "("
        + NAME + " CHAR,"
        + TEL + " CHAR,"
        + EMAIL + " CHAR" 
        + ")";
        db.execSQL(CREATE_TABLE);
        Log.d("Database operations","Database created successfully");
    }

答案 1 :(得分:0)

您需要在数据库帮助程序上调用getWritableDatabase()getReadableDatabase()来实际创建数据库。仅仅实例化助手是不够的。

进一步阅读:When is SQLiteOpenHelper onCreate() / onUpgrade() run?

您可能还希望在列名称及其类型之间添加空格。

答案 2 :(得分:0)

尝试在列之间添加空格。

答案 3 :(得分:0)

来自方法docsgetWritibleDatabase();

  

创建和/或打开将用于读写的数据库。第一次调用它时,将打开数据库并调用onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase,int,int)和/或onOpen(SQLiteDatabase)。

<强>因此...

  

成功打开后,数据库将被缓存,因此您可以在每次需要写入数据库时​​调用此方法。 (确保在不再需要数据库时调用close()。)错误权限或完整磁盘等错误可能导致此方法失败,但如果问题得到解决,将来的尝试可能会成功。