1.我们写一个DBHelper继承自SQLiteOpenHelper
public class DBHelper extends SQLiteOpenHelper{ //数据库的版本 private final static int DB_VERSION = 1; //数据库名 private final static String DB_NAME = "ladeng.db"; private Context mContext; //我们直接用super调用父类的构造方法,这样我们在实例化DBHelper的时候只需要传入一个上下文参数就可以了 public DBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); this.mContext = context; } //数据库不存在的时候,调用这个方法 @Override public void onCreate(SQLiteDatabase db) { createTables(db,0,0); } //版本号发生变化的时候,调用这个方法 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //1.删除原来的表 //2.调用onCreate重新创建数据库 } /** * 建表语句,只需要一行就能建一个表 */ private void createTables(SQLiteDatabase db, int oldVersion, int newVersion) { //createTable(Movie.class)返回的是sql建表语句 //db.execSQL(sql) 执行这条建表语句 db.execSQL(createTable(Movie.class)); } /** * 如果没传表明的话,默认使用类名作为表明 * @param clazz 实体类 * @return */ private String createTable(Class clazz){ return createTable(clazz, clazz.getSimpleName()); } /** * 真正的建表方法 * @param clazz 实体类 * @param tableName 表明 * @return sql建表语句 */ private String createTable(Class clazz , String tableName){ //实例化一个容器,用来拼接sql语句 StringBuffer sBuffer = new StringBuffer(); //sql语句,第一个字段为_ID 主键自增,这是通用的,所以直接写死 sBuffer.append("create table if not exists "+ tableName + " "+ "(_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"); //得到实体类中所有的公有属性 Field[] fields = clazz.getFields(); //遍历所有的公有属性 for(Field field : fields){ //如果属性不为_id的话,说明是新的字段 if (!field.getName().equals("_id")) { //得到属性的基本数据类型 String type = field.getType().getSimpleName(); //如果是String类型的属性,就把字段类型设置为TEXT if (type.equals("String")) { sBuffer.append(field.getName()+" TEXT,"); //如果是int类型的属性,就把字段类型设置为INTEGER }else if (type.equals("int")) { sBuffer.append(field.getName()+" INTEGER,"); } } } //将最后的逗号删除 sBuffer.deleteCharAt(sBuffer.length()-1); //替换成); 表明sql语句结束 sBuffer.append(");"); //返回这条sql语句 return sBuffer.toString(); } }
2.Movie实体类,实体类中的属性就是表中的字段
public class Movie { public String title; public int rating; public String year; public String genre; public String country; public int price;}
3.在MainActivity.java中添加如下代码
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化我们的DBHelper DBHelper dbHelper = new DBHelper(this); //调用了这个方法后,DBHelper中的onCreate才会执行 dbHelper.getReadableDatabase(); }}
4.我们在data/data/包名/databases/ladeng.db中查看表是否已经建好