当前位置: 首页 > 知识库问答 >
问题:

创建数据库时将数据添加到sqlite数据库

越英韶
2023-03-14

我是< code>sqlite数据库的新手,在我的项目中,我需要在创建数据库后添加数据。我尝试了这种方式,这是我的代码。

公共类主要活动扩展活动 {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView v = (TextView)findViewById(R.id.textView1);

    MySqlHelper helper = new MySqlHelper(this); 
    v.setText(helper.getBird(2));
}

@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;
}

}

我创建了另一个类来打开sqlite数据库。

公共类MySqlHelper扩展SQLiteOpenHelper{

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "BirdDB";
    private static final String TABLE_BIRDS = "birds";

    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";

    private static final String[] COLUMNS = {KEY_ID,KEY_NAME};

public MySqlHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    String CREATE_TABLE = "CREATE TABLE birds ( " +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "name TEXT )";
    db.execSQL(CREATE_TABLE);
    db.close();

    SQLiteDatabase dbase = this.getWritableDatabase();
    dbase.insert(TABLE_BIRDS, null, addBirdData("Sri Lanka Jungle Flowl"));
    dbase.insert(TABLE_BIRDS, null, addBirdData("Red Faced Mal Koha"));
    dbase.close();
}

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS birds");
    this.onCreate(db);
}


public ContentValues addBirdData(String birdName){

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, birdName);
    return values;
}

公共字符串getBird(int id){

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor =
            db.query(TABLE_BIRDS, // a. table
            COLUMNS, // b. column names
            " id = ?", // c. selections
            new String[] { String.valueOf(id) }, // d. selections args
            null, // e. group by
            null, // f. having
            null, // g. order by
            null); // h. limit

    if (cursor != null)
        cursor.moveToFirst();


    String name = cursor.getString(1);
    db.close();

    return name;
}

它给我java.lang.IllegalStateException:(conn#0)已经关闭异常

帮助我避免这种情况,并在创建数据库后立即插入数据。

共有2个答案

杭泉
2023-03-14
匿名用户

您不能从onCreate回调中关闭数据库;调用方仍有一个活动事务。

只需对所有数据库操作使用< code>db参数。

扈阳辉
2023-03-14

在数据库帮助程序 onCreate() 中,不能调用可写数据库 ()。相反,请在作为方法参数传入的 db 上执行插入。不要在上面调用关闭()

修改数据库助手onCreate()后,卸载应用程序,以便删除旧的数据库文件,并运行onCreate。

 类似资料:
  • 问题内容: 首次启动应用程序后,我需要向SQLite数据库添加初始值。我该怎么办? 问题答案: 在DBAdapter.java类文件中,您可以执行此操作。 喜欢这种类型。

  • 主要内容:语法,实例,.dump 命令SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库。您不需要任何特殊的权限即可创建一个数据。 语法 sqlite3 命令的基本语法如下: 通常情况下,数据库名称在 RDBMS 内应该是唯一的。 另外我们也可以使用 .open 来建立新的数据库文件: 上面的命令创建了数据库文件 test.db,位于 sqlite3 命令同一目录下。 打开已存在数据库也是用 .open 命令,

  • 创建数据库之后,如何执行DDL语句来创建表?

  • 主要内容:语法,实例假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个。SQLite 的 ATTACH DATABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 SQLite 语句将在附加的数据库下执行。 语法 SQLite 的 ATTACH DATABASE 语句的基本语法如下: 如果数据库尚未被创建,上面的命令将创建一个数据库,如果数据库已存在,则把数据库文件名称与逻辑数据库 '

  • 问题内容: 我正在使用http://code.google.com/p/sqlite- jdbc/wiki/Introduction中 的SQLite驱动程序。 上述文档中显示的示例显示了如何连接现有数据库。 在我的应用程序中,我需要创建一个SQLite数据库。怎么做?创建具有扩展名的文件是否足够?还有一个叫做的函数。如果可以,如何使用?我用谷歌搜索,没有人给出明确的答案。 问题答案: 如果文件不

  • 然而,敬虔加上知足的心便是大利了,因为我们没有带什么到世上来,也不能带什么去,只要有衣有食,就当知足。但那些想要发财的人,就陷在迷惑、落在网罗和许多无知有害的私欲里,叫人沉在败坏和灭亡中。贪财是万恶之根。有人贪恋钱财,就被引诱离了真道,用许多愁苦把自己刺透了。(1 TIMOTHY 6:6-10) SQLite数据库 SQLite是一个小型的关系型数据库,它最大的特点在于不需要服务器、零配置。前面的