在数据库android studio中插入数据的问题
Problem with inserting data in database andoid studio
我有一个相当小的应用程序,但它不起作用
public class AddTemplateActivity extends AppCompatActivity {
EditText heightET, descpET;
Button addButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_template);
heightET = (EditText) findViewById(R.id.etHeight);
descpET = (EditText) findViewById(R.id.etDescription);
addButton = (Button) findViewById(R.id.addButton);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDataBaseHelper myDB = new MyDataBaseHelper(AddTemplateActivity.this);
myDB.addTemplate(descpET.getText().toString(), Integer.valueOf(heightET.getText().toString()));
}
});
}
}
这个 activity 应该在我的 SQLite 数据库中插入数据。我创建 class
public class MyDataBaseHelper extends SQLiteOpenHelper {
private Context context;
private static final String DATABASE_NAME = "TemplatesLibrary.db";
private static final int DATABASE_VERSION = 2;
private static final String TABLE_NAME = "templates_categories";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_DESCRIPTION = "template_description";
private static final String COLUMN_HEIGHT = "template_height";
public MyDataBaseHelper(@Nullable Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase database) {
String query = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_DESCRIPTION + " TEXT, " + COLUMN_HEIGHT + " INTEGER NOT NULL);";
database.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
database.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(database);
}
public void addTemplate(String description, int height) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_DESCRIPTION, description);
cv.put(COLUMN_HEIGHT, height);
long res = db.insert(COLUMN_DESCRIPTION, null, cv);
if(res == -1){
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(context, "Added!", Toast.LENGTH_SHORT).show();
}
}
}
但是当我点击添加按钮时,我收到了
android.database.sqlite.SQLiteException: no such table: template_description (code 1 SQLITE_ERROR): , while compiling: INSERT INTO template_description(template_height,template_description) VALUES (?,?)
请给我一个解决方案。谢谢!
您需要将 table 而不是列名传递给 insert()
。
改变
long res = db.insert(COLUMN_DESCRIPTION, null, cv);
到
long res = db.insert(TABLE_NAME, null, cv);
您的 table 名称是:templates_categories 但在 addTemplate 方法中使用了 template_description .
也许你是初学者,也许你想了解 sqlite 和基础工作,但请继续使用 Room 来处理数据库
我有一个相当小的应用程序,但它不起作用
public class AddTemplateActivity extends AppCompatActivity {
EditText heightET, descpET;
Button addButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_template);
heightET = (EditText) findViewById(R.id.etHeight);
descpET = (EditText) findViewById(R.id.etDescription);
addButton = (Button) findViewById(R.id.addButton);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDataBaseHelper myDB = new MyDataBaseHelper(AddTemplateActivity.this);
myDB.addTemplate(descpET.getText().toString(), Integer.valueOf(heightET.getText().toString()));
}
});
}
}
这个 activity 应该在我的 SQLite 数据库中插入数据。我创建 class
public class MyDataBaseHelper extends SQLiteOpenHelper {
private Context context;
private static final String DATABASE_NAME = "TemplatesLibrary.db";
private static final int DATABASE_VERSION = 2;
private static final String TABLE_NAME = "templates_categories";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_DESCRIPTION = "template_description";
private static final String COLUMN_HEIGHT = "template_height";
public MyDataBaseHelper(@Nullable Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase database) {
String query = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_DESCRIPTION + " TEXT, " + COLUMN_HEIGHT + " INTEGER NOT NULL);";
database.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
database.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(database);
}
public void addTemplate(String description, int height) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_DESCRIPTION, description);
cv.put(COLUMN_HEIGHT, height);
long res = db.insert(COLUMN_DESCRIPTION, null, cv);
if(res == -1){
Toast.makeText(context, "Failed", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(context, "Added!", Toast.LENGTH_SHORT).show();
}
}
}
但是当我点击添加按钮时,我收到了
android.database.sqlite.SQLiteException: no such table: template_description (code 1 SQLITE_ERROR): , while compiling: INSERT INTO template_description(template_height,template_description) VALUES (?,?)
请给我一个解决方案。谢谢!
您需要将 table 而不是列名传递给 insert()
。
改变
long res = db.insert(COLUMN_DESCRIPTION, null, cv);
到
long res = db.insert(TABLE_NAME, null, cv);
您的 table 名称是:templates_categories 但在 addTemplate 方法中使用了 template_description .
也许你是初学者,也许你想了解 sqlite 和基础工作,但请继续使用 Room 来处理数据库