我只是简单地做了一个插入形式,它将三个数字作为输入存储在数据库中(请注意,我正在使用sqlite数据库)。 因此,最主要的是,当我单击“提交”时,它将通过一个错误,指出没有这样的表:-messgae_table。 我试图找到我的代码有什么问题,但对我来说什么都没有解决! 请帮助我。......
Main Activity.java页面:-
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try{
DatabaseQueries db=new DatabaseQueries(Main2Activity.this);
Log.e("data",editText1.getText().toString());
long result=db.addMessageNumber(editText1.getText().toString(),editText2.getText().toString(),editText3.getText().toString());
if (result>0){
Toast.makeText(Main2Activity.this, "Inserted", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(Main2Activity.this, "Not Inserted", Toast.LENGTH_SHORT).show();
}
}
catch (Exception e){
e.getMessage();
e.printStackTrace();
}
DatabaseColumn.java:-
public static final String MESSAGE_TABLE = "message_table";
public static final String MESSAGE_NUMBERONE = "message_numberone";
public static final String MESSAGE_NUMBERTWO = "messgae_numbertwo";
public static final String MESSAGE_NUMBERTHREE = "message_numberthree";
数据库创建:-
public class DatabaseCreation extends SQLiteOpenHelper {
private static String DB_NAME = "secure.db";
private static int DB_VERSION = 1;
private String message_table = "CREATE TABLE " + DatabaseColumn.MESSAGE_TABLE + " ( " + DatabaseColumn.MESSAGE_NUMBERONE + " TEXT, " + DatabaseColumn.MESSAGE_NUMBERTWO + " TEXT, " + DatabaseColumn.MESSAGE_NUMBERTHREE + " TEXT )";
public DatabaseCreation(Context context){
super(context, DB_NAME,null,DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(contact_table);
sqLiteDatabase.execSQL(message_table);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
数据库查询:-
public long addMessageNumber(String numberone, String numbertwo, String numberthree){
SQLiteDatabase sqLiteDatabase2=db.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(DatabaseColumn.MESSAGE_NUMBERONE,numberone);
cv.put(DatabaseColumn.MESSAGE_NUMBERTWO,numbertwo);
cv.put(DatabaseColumn.MESSAGE_NUMBERTHREE,numberthree);
long result=sqLiteDatabase2.insert(DatabaseColumn.MESSAGE_TABLE,null,cv);
sqLiteDatabase2.close();
return result;
}
答案 0 :(得分:0)
您的代码(除sqLiteDatabase.execSQL(contact_table);
行外,在组合在一起时似乎可以正常工作。
因此,您的问题可能是您习惯于在每次运行应用程序时 onCreate
运行。即活动开始时。 但是,SQLiteOpenHelper
的 onCreate
方法仅在创建数据库后运行一次。其他任何时间(即数据库存在时)都不会运行。
这样,您可能会因为未创建表而未找到该表,因为您已将代码添加到onCreate
(用于创建表)而未删除数据库。
FIX 将执行以下一项操作:-
完成上述操作之一后,请重新运行该应用程序,这可能会让您越过表格未找到错误。
DatabaseColumn.java
public class DatabaseColumn {
public static final String MESSAGE_TABLE = "message_table";
public static final String MESSAGE_NUMBERONE = "message_numberone";
public static final String MESSAGE_NUMBERTWO = "messgae_numbertwo";
public static final String MESSAGE_NUMBERTHREE = "message_numberthree";
}
DatabaseCreation.java
public class DatabaseCreation extends SQLiteOpenHelper {
private static String DB_NAME = "secure.db";
private static int DB_VERSION = 1;
private String message_table =
"CREATE TABLE " + DatabaseColumn.MESSAGE_TABLE + " ( " +
DatabaseColumn.MESSAGE_NUMBERONE + " TEXT, " +
DatabaseColumn.MESSAGE_NUMBERTWO + " TEXT, " +
DatabaseColumn.MESSAGE_NUMBERTHREE + " TEXT )";
public DatabaseCreation(Context context){
super(context, DB_NAME,null,DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//sqLiteDatabase.execSQL(contact_table); //<<<<<<<< ?????????
sqLiteDatabase.execSQL(message_table);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
-注意注释掉的行(您可能不必注释掉)
DatabaseQueries.java
public class DatabaseQueries {
DatabaseCreation db;
public DatabaseQueries(Context context) {
db = new DatabaseCreation(context);
}
//!!!!!!!!!! Code other than this block has been assumed
public long addMessageNumber(String numberone, String numbertwo, String numberthree){
SQLiteDatabase sqLiteDatabase2=db.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(DatabaseColumn.MESSAGE_NUMBERONE,numberone);
cv.put(DatabaseColumn.MESSAGE_NUMBERTWO,numbertwo);
cv.put(DatabaseColumn.MESSAGE_NUMBERTHREE,numberthree);
long result=sqLiteDatabase2.insert(DatabaseColumn.MESSAGE_TABLE,null,cv);
sqLiteDatabase2.close();
return result;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
Button button;
EditText editText1,editText2,editText3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = this.findViewById(R.id.button);
editText1 = this.findViewById(R.id.edittext1);
editText2 = this.findViewById(R.id.edittext2);
editText3 = this.findViewById(R.id.edittext3);
//!!!!!!!!!! Code other than this block has been assumed
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
//!!!!!!!!!! view.getContext() used instead of Main2Activity.this (code is easier to copy elsewhere)
DatabaseQueries db = new DatabaseQueries(view.getContext());
Log.e("data", editText1.getText().toString());
long result = db.addMessageNumber(
editText1.getText().toString(),
editText2.getText().toString(),
editText3.getText().toString()
);
if (result > 0) {
Toast.makeText(view.getContext(), "Inserted", Toast.LENGTH_SHORT).show();
Log.e("INSERTINFO","Row inserted."); //<<<<<<<<< ADDED FOR TESTING
} else {
Toast.makeText(view.getContext(), "Not Inserted", Toast.LENGTH_SHORT).show();
Log.e("INSERTINFO","Row NOT inserted."); //<<<<<<<<< ADDED FOR TESTING
}
} catch (Exception e) {
e.getMessage();
e.printStackTrace();
}
}
});
}
}
在三个EditText中输入T1,T2和T3后,单击CLICKME按钮,日志将包含:-
2019-11-29 07:13:49.056 E/data: T1 2019-11-29 07:13:49.093 E/INSERTINFO: Row inserted.