【问题标题】:How to insert data into database using android studio?如何使用android studio将数据插入数据库?
【发布时间】:2019-12-05 06:33:59
【问题描述】:

我正在尝试将数据插入到 android studio 上的数据库中,代码运行没有错误,但是数据没有添加到数据库表中。 我需要传递的数据是电影的标题、复仇者联盟和放映时间 10:00

这是我的数据库助手类

package com.missouristate.bryson.finalp;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DABASE_NAME = "Movies.db";
public static final String TABLE_NAME = "movies_table";
public static final String ID = "_ID";
public static final String NAME = "Movie_Name";
public static final String SHOWTIME = "Showtime";


public DatabaseHelper(@Nullable Context context) {
    super(context, DABASE_NAME, null, 1);

}

@Override
public void onCreate(SQLiteDatabase db) {
    String sqlCreate = "CREATE TABLE " + TABLE_NAME + "( " + ID;
    sqlCreate += " integer primary key autoincrement, " + NAME;
    sqlCreate += "text, " + SHOWTIME + " text, )";
             db.execSQL(sqlCreate);


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME );
    onCreate(db);

}

public boolean addMovie( String name, String showtime) {

    ContentValues contentValues = new ContentValues();
    contentValues.put("MOVIE", name);
    contentValues.put("SHOWTIME", showtime);
    long result = getWritableDatabase().insert(TABLE_NAME, null, contentValues);
    if(result == -1)
        return false;
    else
        return true;
}
}

这是我的表演时间课

package com.missouristate.bryson.finalp;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class showtimes extends Activity {
DatabaseHelper myDB;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.showtimesview);
myDB= new DatabaseHelper(this);

myDB.addMovie(" Avengers", " 1000");
}

}

任何帮助/建议将不胜感激。谢谢!

更新日志——将 addMovie 方法更改为

    public void addMovie( String name, String showtime) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.beginTransaction();
    try {
        ContentValues contentValues = new ContentValues();
        contentValues.put("MOVIE", name);
        contentValues.put("SHOWTIME", showtime);
        db.insertOrThrow(TABLE_NAME, null, contentValues);
        db.setTransactionSuccessful();
    } catch (Exception e) {
        Log.d("insert", "Error while trying to add post to database");
    } finally {
        db.endTransaction();
    }

日志仍然显示数据没有被添加到数据库中

【问题讨论】:

  • 插入后是否检查结果标志的值?并使用 try catch 块进行与数据库相关的操作,以便万一您遇到任何异常,它将得到咳嗽
  • 我加了一个try catch和一个日志,日志显示数据没有被添加到数据库中。我不确定我是否遗漏了什么。
  • 尝试在你的 catch 块中打印 e.getMessage() ,它会给你一个带有异常代码的简短消息,这将有助于你进一步调查

标签: database sqlite android-studio


【解决方案1】:

你有一些问题。

首先你有:-

String sqlCreate = "CREATE TABLE " + TABLE_NAME + "( " + ID;
    sqlCreate += " integer primary key autoincrement, " + NAME;
    sqlCreate += "text, " + SHOWTIME + " text, )";

末尾有逗号,所以建表时会出现语法错误。

其次,您省略了 NAME 和文本之间的空格,因此列名将是 Movie_Nametext 而不是 Movie_Name。

你应该有:-

String sqlCreate = "CREATE TABLE " + TABLE_NAME + "( " + ID;
    sqlCreate += " integer primary key autoincrement, " + NAME;
    sqlCreate += " text, " + SHOWTIME + " text /*<<<<< spurious comma removed */ )";
  • 评论可以删除。

如果上面的未修复版本已经运行,那么数据库本身将被创建,因此 onCreate 方法将不会运行,你会得到一个 table not found 错误。您应该删除应用程序的数据或卸载应用程序以删除数据库,修复错误然后重新运行应用程序。

你有第三个:-

contentValues.put("MOVIE", name);` 

这将转换为将变量名中保存的值插入到名为“MOVIE”的列中。

根据表定义,没有名为MOVIE的列。

我相信你需要使用

contentValues.put("Movie_Name", name);

或者更好

contentValues.put(NAME, name);

同样适用于所有列名和表名。

在进行更改并删除数据库并重新运行后,使用以下内容进行测试:-

public class MainActivity extends AppCompatActivity {

    DatabaseHelper myDB;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myDB= new DatabaseHelper(this);
        myDB.addMovie(" Avengers", " 1000");
        DatabaseUtils.dumpCursor(
            myDB.getWritableDatabase().query(DatabaseHelper.TABLE_NAME,null,null,null,null,null,null)
        );
    }
}

日志包含:-

2019-12-05 19:01:21.441 13419-13419/? I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@44be644
2019-12-05 19:01:21.442 13419-13419/? I/System.out: 0 {
2019-12-05 19:01:21.442 13419-13419/? I/System.out:    _ID=1
2019-12-05 19:01:21.442 13419-13419/? I/System.out:    Movie_Name= Avengers
2019-12-05 19:01:21.442 13419-13419/? I/System.out:    Showtime= 1000
2019-12-05 19:01:21.442 13419-13419/? I/System.out: }
2019-12-05 19:01:21.442 13419-13419/? I/System.out: <<<<<

【讨论】:

  • 所以我做了你所说的,创建了表并且我确实收到了预期的日志,但是数据没有添加到表中。我正在使用带有 android studio 的 SQL 控制台来检查
  • @ChristianHernandez 那么很有可能我正在使用带有android studio的SQL控制台来检查这会误导你。
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2021-10-06
  • 2016-05-04
相关资源
最近更新 更多