0

我正在尝试为我的 android 应用程序创建一个 SQLite Db,我尝试了很多在线教程,但没有一个对我有用!我在下面发布了我的代码:

public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "usersManager";

    // Contacts table name
    private static final String TABLE_CONTACTS = "users";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

        // Create tables again
        onCreate(db);
    }



import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;


public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DatabaseHandler db = new DatabaseHandler(this);

我在我的代码中看不到错误,但是当我签入位置时应该创建 db 什么都没有。

4

6 回答 6

4

除了避免长单行连接字符串:

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = 
            "CREATE TABLE " + TABLE_CONTACTS + 
            "(" + 
                KEY_ID   + " INTEGER PRIMARY KEY," + 
                KEY_NAME + " TEXT" + //--last value has no comma--
            ")";

    db.execSQL(CREATE_CONTACTS_TABLE);
}

调用getWritableDataBase()打开数据库,如果它不存在,它将被创建。

于 2013-02-03T17:55:35.777 回答
3

尝试这个

public class DataBase extends SQLiteOpenHelper{


    static String createBDSQL = "CREATE TABLE Notas (id integer primary key autoincrement, title TEXT)";

    public DataBase(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(createBDSQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS Notas");
            db.execSQL(createBDSQL);
    }
}

在 MainActivity.java

DataBase notasdb = new DataBase(this, "DBSample.db", null, 1);
SQLiteDatabase db = notasdb.getWritableDatabase();
于 2013-02-03T23:10:02.390 回答
1

SQLiteOpenHelper 是惰性的。除非必要,否则它不会执行任何操作。因此,只有当您尝试访问其中的数据(或插入新数据)时,才会创建您的数据库。

于 2013-02-03T17:49:11.477 回答
0

在你的主要活动中

SQLiteDatabase sql;
sql=db.getWritableDatabase(); (where db is DB Handler)
于 2014-02-09T16:42:35.030 回答
0

在创建要执行的查询时必须小心。特别是使用空格和逗号。

更改此行

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);

白衣:

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + " (" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_NAME + " TEXT)";
        db.execSQL(CREATE_CONTACTS_TABLE);
于 2013-02-03T17:50:37.573 回答
0

你真的没有创建数据库,你只创建了 SQLiteOpenHelper 的实例,但要创建或打开数据库,你必须使用 getWritableDatabase() 或 getReadableDatabase() 方法。

SQLiteDatabase db = new DataBaseHandler(this).getWritableDatabase();

于 2013-02-03T18:03:51.850 回答