【问题标题】:Data not being added to the database SQLITE数据未添加到数据库 SQLITE
【发布时间】:2019-10-25 18:32:40
【问题描述】:

我试图在 SQLITE 数据库中插入数据,但当我打开数据库时它不存在。

我正在尝试做一个能够将数据存储在数据库中的应用程序。但是当我尝试添加数据时,它不会被添加到表中。下面是数据库助手和我调用插入数据函数的活动的代码:

公共类 DatabaseHelper 扩展 SQLiteOpenHelper {

public static final String DATABASE_NAME = "Channels.db" ;
public static final String TABLE_NAME = "Channels_table" ;
public static final String COL_1 = "Channel_number" ;
public static final String COL_2 = "Channel_name" ;


public DatabaseHelper(Context context){
    super(context, DATABASE_NAME , null , 1);

}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME + " (Channel_number INTEGER PRIMARY KEY , Channel_name TEXT )");
}

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

public boolean insertData(int c_number , String c_name){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_1 , c_number);
    contentValues.put(COL_2 , c_name);

    long result = db.insert(TABLE_NAME , null , contentValues);

    if (result == -1){
        return false;
    }
    else
        return true;
}

公共类 Add_Activity 扩展 AppCompatActivity {

DatabaseHelper db;

EditText channel_name , channel_number ;
Button Add_button;

protected void onCreate (Bundle savedInstanceBundle) {
    super.onCreate(savedInstanceBundle);
    setContentView(R.layout.add_view);

    channel_name = findViewById(R.id.channel_name_textview);
    channel_number = findViewById(R.id.channel_number_textview);
    Add_button = (Button) findViewById(R.id.add_button);

    db = new DatabaseHelper(this);

    Button_tapped();

}

public void Button_tapped(){
    Add_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(channel_name.getText().toString().isEmpty() || channel_number.getText().toString().isEmpty()){
                Toast.makeText(Add_Activity.this , getText(R.string.empty_fields) , Toast.LENGTH_LONG).show();
            }
            else if (Integer.parseInt(channel_number.getText().toString()) < 0 || Integer.parseInt(channel_number.getText().toString()) > 84){
                Toast.makeText(Add_Activity.this , getText(R.string.invalid_channel_numb) , Toast.LENGTH_LONG).show();
                channel_number.setText("");
            }
            else {
                boolean insertdata = db.insertData(Integer.parseInt(channel_number.getText().toString()) , channel_name.getText().toString());

                if (insertdata){
                    Toast.makeText(Add_Activity.this , getText(R.string.successfull_insertion) , Toast.LENGTH_LONG).show();
                }
                else
                    Toast.makeText(Add_Activity.this , getText(R.string.unsuccessfull_insertion) , Toast.LENGTH_LONG).show();

                channel_number.setText("");
                channel_name.setText("");
            }
        }
    });
}

}

当我点击按钮时,我得到了插入不成功的祝酒词,并且数据没有被插入到数据库中。我需要的是能够看到插入成功的toast并在数据库中找到数据。

【问题讨论】:

  • 您要插入的值是什么?另外,您确定创建了 sqlite 文件吗?
  • @AlanDeep 我正在尝试插入一个整数的频道号和一个字符串的频道名称。是的,正在创建数据库文件,我能够找到它。
  • 我假设你没有尝试添加重复的主键,试试这个构造函数:public DatabaseHelper(@Nullable Context context,@Nullable SQLiteDatabase.CursorFactory factory){ super(context, DATABASE_NAME, factory, 1); }
  • @AlanDeep 不,我没有输入任何重复值。我已经尝试过使用这个构造函数,但是我的参数有问题,所以决定只保留我建议的上下文
  • 我找不到您的代码有什么问题。检查你的字符串资源,也许它们正在被插入,但你得到一个逻辑错误“不成功”,为什么它是“成功的”

标签: java android-studio android-sqlite


【解决方案1】:

试试这个

  db.execSQL("CREATE TABLE " + TABLE_NAME + " ( " + COL_1 + " INTEGER PRIMARY KEY, " + COL_2 + " TEXT )");

而不是

db.execSQL("create table " + TABLE_NAME + " (Channel_number INTEGER PRIMARY KEY , Channel_name TEXT )");

【讨论】:

  • 表已创建,但未添加数据
  • android 中的sqlite 是敏感的。你必须按照我告诉你的去做。尤其是这种旧的 sqlite 方式。
  • @Gabriel Chammas 进行此答案中建议的更改,然后从设备中卸载应用程序并最后重新运行。
  • @AlanDeep 我尝试进行此更改,但仍然无效。我尝试在数据库中添加一个新条目,我收到了成功的消息,但我仍然无法在数据库中看到新条目。
  • @AlanDeep 我想我找到了我的问题。这是我打开数据库文件以检查其内容的方式。似乎每次创建新条目时都需要保存数据库文件才能在数据库中看到新条目。谢谢你帮助我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多