ContentValues 仅将最后一个值输入数据库
ContentValues only entering last value into database
我还是 Android Studio 的新手,我在不同的论坛上看过这个问题,但我还没有找到专门针对我的问题的问题(或者我经验不足至少能认出它。)
我创建了一个 activity,其中有人将 3 个不同的词输入到 3 个不同的 EditText 视图中,这 3 个单独的值应该插入到 "column 1" 或 "COL_1" 中创建数据库后,当然创建另一个意图并在 checking/proving 之后移动到下一个 activity,将值插入数据库。
我的问题是只有第三个词作为一行(或记录)输入到数据库中,而不是前两个词。抱歉,我说我是新手,我错过了什么?:
编辑文本ACTIVITY
package com.example.jonathan.om11;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ContributionsActivity extends AppCompatActivity {
Button goToMainPageBtn;
ContribDatabase contribDatabase;
EditText contribution1,contribution2,contribution3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contributions);
contribDatabase = new ContribDatabase(this);
contribution1 = (EditText) findViewById(R.id.contribution1);
contribution2 = (EditText) findViewById(R.id.contribution2);
contribution3 = (EditText) findViewById(R.id.contribution3);
goToMainPageBtn = (Button) findViewById(R.id.goToMainPageBtn);
goToMainPageBtn.setOnClickListener(new View.OnClickListener(){
public void onClick (View v){
boolean isInserted = contribDatabase.insertData(
contribution1.getText().toString(),
contribution2.getText().toString(),
contribution3.getText().toString());
Toast.makeText(ContributionsActivity.this, "Thank you for contributing, enjoy!", Toast.LENGTH_SHORT).show();
if(isInserted == true) {
toContribPage(v);
} else {
Toast.makeText(ContributionsActivity.this, "Oops! Contributions did not save, try again please!", Toast.LENGTH_SHORT).show();
}
}
});
}
public void toContribPage(View v) {
Intent i = new Intent("android.intent.action.TabbedView");
startActivity(i);
}
}
SQLITEOPENHELPER CLASS
package com.example.jonathan.om11;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Jonathan on 2/10/18.
*/
public class ContribDatabase extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Contributions.db";
public static final String TABLE_NAME = "Contributions_table";
// public static final String COL_1 = "ID";
public static final String COL_1 = "CONTRIBUTIONS";
public ContribDatabase(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT, CONTRIBUTIONS TEXT)");
db.execSQL("create table " + TABLE_NAME +" (CONTRIBUTIONS TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean insertData(String contribution1, String contribution2, String contribution3) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1,contribution1);
contentValues.put(COL_1,contribution2);
contentValues.put(COL_1, contribution3);
//Check for if data is inserted or not
long result = db.insert(TABLE_NAME,null,contentValues);
if(result == -1) {
return false;
} else {
return true;
}
}
// public Cursor getAllData() {
// SQLiteDatabase db = this.getWritableDatabase();
// Cursor res = db.rawQuery("select * from " + TABLE_NAME, null);
// return res;
// }
}
只有第三个是插入,因为您要为 3 个不同的值覆盖相同的 key
。
contentValues.put(COL_1,contribution1);
contentValues.put(COL_1,contribution2);
contentValues.put(COL_1, contribution3);
这里你覆盖了COL_1
3 次。
您必须在数据库中再创建 2 列 table 或将其他 2 个值与一些分隔符字符串连接起来,以便稍后拆分它们。
你的代码有问题。 insertData 方法有一些问题。用以下代码替换您的代码
public boolean insertData(String contribution1, String contribution2, String contribution3) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
ContentValues contentValues2 = new ContentValues();
ContentValues contentValues3 = new ContentValues();
contentValues.put(COL_1,contribution1);
contentValues2.put(COL_1,contribution2);
contentValues3.put(COL_1, contribution3);
//Check for if data is inserted or not
long result = db.insert(TABLE_NAME,null,contentValues);
long result2 = db.insert(TABLE_NAME,null,contentValues2);
long result3 = db.insert(TABLE_NAME,null,contentValues3);
if(result == -1 || result2 == -1 || result3 == -1) {
return false;
} else {
return true;
}
}
发生这种情况是因为插入 3 个不同的值是在同一个对象中映射不同的值。希望对您有所帮助。
您在同一个键输入中输入了 3 次数据,这就是为什么您得到最后输入的数据的原因。您有 3 个不同的数据条目 - 每个对应于每个 Edittext,因此您需要有 3 个不同的键,就像我的例子:
contentValues.put(COL_1,contribution1);
contentValues.put(COL_1,contribution2);
contentValues.put(COL_1, contribution3);
你需要这样的东西:
contentValues.put(COL_1,contribution1);
contentValues.put(COL_2,contribution2);
contentValues.put(COL_3, contribution3);
我还是 Android Studio 的新手,我在不同的论坛上看过这个问题,但我还没有找到专门针对我的问题的问题(或者我经验不足至少能认出它。)
我创建了一个 activity,其中有人将 3 个不同的词输入到 3 个不同的 EditText 视图中,这 3 个单独的值应该插入到 "column 1" 或 "COL_1" 中创建数据库后,当然创建另一个意图并在 checking/proving 之后移动到下一个 activity,将值插入数据库。
我的问题是只有第三个词作为一行(或记录)输入到数据库中,而不是前两个词。抱歉,我说我是新手,我错过了什么?:
编辑文本ACTIVITY
package com.example.jonathan.om11;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ContributionsActivity extends AppCompatActivity {
Button goToMainPageBtn;
ContribDatabase contribDatabase;
EditText contribution1,contribution2,contribution3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contributions);
contribDatabase = new ContribDatabase(this);
contribution1 = (EditText) findViewById(R.id.contribution1);
contribution2 = (EditText) findViewById(R.id.contribution2);
contribution3 = (EditText) findViewById(R.id.contribution3);
goToMainPageBtn = (Button) findViewById(R.id.goToMainPageBtn);
goToMainPageBtn.setOnClickListener(new View.OnClickListener(){
public void onClick (View v){
boolean isInserted = contribDatabase.insertData(
contribution1.getText().toString(),
contribution2.getText().toString(),
contribution3.getText().toString());
Toast.makeText(ContributionsActivity.this, "Thank you for contributing, enjoy!", Toast.LENGTH_SHORT).show();
if(isInserted == true) {
toContribPage(v);
} else {
Toast.makeText(ContributionsActivity.this, "Oops! Contributions did not save, try again please!", Toast.LENGTH_SHORT).show();
}
}
});
}
public void toContribPage(View v) {
Intent i = new Intent("android.intent.action.TabbedView");
startActivity(i);
}
}
SQLITEOPENHELPER CLASS
package com.example.jonathan.om11;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Jonathan on 2/10/18.
*/
public class ContribDatabase extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Contributions.db";
public static final String TABLE_NAME = "Contributions_table";
// public static final String COL_1 = "ID";
public static final String COL_1 = "CONTRIBUTIONS";
public ContribDatabase(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// db.execSQL("create table " + TABLE_NAME +" (ID INTEGER PRIMARY KEY AUTOINCREMENT, CONTRIBUTIONS TEXT)");
db.execSQL("create table " + TABLE_NAME +" (CONTRIBUTIONS TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean insertData(String contribution1, String contribution2, String contribution3) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1,contribution1);
contentValues.put(COL_1,contribution2);
contentValues.put(COL_1, contribution3);
//Check for if data is inserted or not
long result = db.insert(TABLE_NAME,null,contentValues);
if(result == -1) {
return false;
} else {
return true;
}
}
// public Cursor getAllData() {
// SQLiteDatabase db = this.getWritableDatabase();
// Cursor res = db.rawQuery("select * from " + TABLE_NAME, null);
// return res;
// }
}
只有第三个是插入,因为您要为 3 个不同的值覆盖相同的 key
。
contentValues.put(COL_1,contribution1);
contentValues.put(COL_1,contribution2);
contentValues.put(COL_1, contribution3);
这里你覆盖了COL_1
3 次。
您必须在数据库中再创建 2 列 table 或将其他 2 个值与一些分隔符字符串连接起来,以便稍后拆分它们。
你的代码有问题。 insertData 方法有一些问题。用以下代码替换您的代码
public boolean insertData(String contribution1, String contribution2, String contribution3) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
ContentValues contentValues2 = new ContentValues();
ContentValues contentValues3 = new ContentValues();
contentValues.put(COL_1,contribution1);
contentValues2.put(COL_1,contribution2);
contentValues3.put(COL_1, contribution3);
//Check for if data is inserted or not
long result = db.insert(TABLE_NAME,null,contentValues);
long result2 = db.insert(TABLE_NAME,null,contentValues2);
long result3 = db.insert(TABLE_NAME,null,contentValues3);
if(result == -1 || result2 == -1 || result3 == -1) {
return false;
} else {
return true;
}
}
发生这种情况是因为插入 3 个不同的值是在同一个对象中映射不同的值。希望对您有所帮助。
您在同一个键输入中输入了 3 次数据,这就是为什么您得到最后输入的数据的原因。您有 3 个不同的数据条目 - 每个对应于每个 Edittext,因此您需要有 3 个不同的键,就像我的例子:
contentValues.put(COL_1,contribution1);
contentValues.put(COL_1,contribution2);
contentValues.put(COL_1, contribution3);
你需要这样的东西:
contentValues.put(COL_1,contribution1);
contentValues.put(COL_2,contribution2);
contentValues.put(COL_3, contribution3);