我正在尝试创建一个数据库,但我的代码没有任何问题。我知道这个问题非常基础,但我是一个新学习者,所以我无法解决我的问题,所以请帮助我。
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="employeedb";
private static final String TABLE_NAME="EMPLOYEETABLE";
private static final int DATABASE_VERSION=1;
private static final String EID="_id";
private static final String NAME="Name";
private static final String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+EID+" INTEGER PRIMARY AUTOINCREMENT, "+NAME+" VARCHAR(255))";
private static final String DROP_TABLE="DROP TABLE "+TABLE_NAME+"IF EXISTS";
private Context context;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
Message.message(context, "Constructor called.");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
Message.message(context, "onCreate called.");
db.execSQL(CREATE_TABLE);
}
catch (Exception e)
{
Message.message(context, ""+e);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Message.message(context, "onUpgrade called.");
db.execSQL(DROP_TABLE);
onCreate(db);
} catch (SQLException e) {
Message.message(context, ""+e);
}
}
}
这是Message Class只有一个方法
public class Message {
public static void message(Context context, String message){
Toast.makeText(context,message,Toast.LENGTH_SHORT);
}
}
这是MainActivity Code,我调用getWritabeDatase方法。
public class MainActivity extends Activity implements MyDialog.Communicator {
LinearLayout layout;
TextView txt;
TextView date;
DatabaseHelper dbhelper;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout = (LinearLayout) findViewById(R.id.layoutbottom);
date = (TextView) findViewById(R.id.date);
txt =(TextView) findViewById(R.id.title);
GeneralMethods generalmethods = new GeneralMethods(this,this);
dbhelper = new DatabaseHelper(this);
SQLiteDatabase sqLiteDatabase = dbhelper.getWritableDatabase();
}
public void showDialog(View v){
FragmentManager manager = getFragmentManager();
MyDialog myDialog = new MyDialog();
myDialog.show(manager,"MyDialog");
}
@Override
public void onDialogueMessage(String message) {
date.setText(message);
}
}
答案 0 :(得分:1)
首次使用帮助程序访问数据库时,将调用onCreate。
对
的任何调用getReadableDatabase() or getWritableDatabase()
将导致onCreate被触发,然后才会被触发。当您更改现有架构的数据库版本时,将触发onUpgrade。
同样根据SQLite文档,整数主键将自动增加到它自己的最大+ 1值。
添加自动增量会导致不必要的显式开销并更改rowid选择算法,并且不建议使用它。
您忘记了Message类
中toast的show()Toast.makeText(context,message,Toast.LENGTH_SHORT).show();
基本上没有show(),Toast不会显示,它只会被创建。现在,因为onCreate只被调用一次,检查它是否正常工作,卸载并重新安装应用程序或在测试前清除它的数据