SQLite数据库创建

时间:2017-12-27 18:45:44

标签: android android-sqlite sqliteopenhelper

我正在尝试创建一个数据库,但我的代码没有任何问题。我知道这个问题非常基础,但我是一个新学习者,所以我无法解决我的问题,所以请帮助我。

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);
    }
}

1 个答案:

答案 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只被调用一次,检查它是否正常工作,卸载并重新安装应用程序或在测试前清除它的数据