1.一个新的数据库的创建及打开方式
关于Android数据库的创建,官方文档里面推荐的是继承SQLiteOpenHelper创建子类,重写onCreate方法来创建一个新的SQLiteDatabase。
在这里需要强调的几点有:
1).数据库在第一次创建的时候,才调用onCreate方法,也就是说一旦某一个数据库已经被创建好了,那么就不用再调用onCreate方法了。
2).在onCreate执行sql语句,创建数据库表。
3).向数据库表里面写入数据或者读取数据的时候,首先得实例化SQLiteOpenHelper子类,通过该子类调用getReadableDatabase()或者getWritadableDatabase()方法来打开数据库。
读取数据时调用getReadableDatabase(),例如对数据库数据进行查询操作。
写入数据时调用getWritadableDatabase(),例如对数据库数据进行插入、删除、更新操作。
2.以下是创建SQLiteOpenHelper子类的实现代码
1 public class MyDataBaseHelper extends SQLiteOpenHelper { 2 /* 3 * context:上下文 4 * databaseName:创建的数据库名称 5 * databaseVersion:数据库版本 6 * */ 7 public MyDataBaseHelper(Context context,String databaseName,int databaseVersion){ 8 super(context,databaseName,null,databaseVersion); 9 } 10 /* 11 * 数据库第一次创建的时候,调用onCreate;数据库已经创建成功之后,就不调用它了 12 * db就是创建的数据库 13 * db.execSQL这句是用来创建数据库表 14 * */ 15 @Override 16 public void onCreate(SQLiteDatabase db) { 17 System.out.println("数据库创建成功"); 18 db.execSQL("create table imagetable(_id integer primary key autoincrement,word varchar(255),detail varchar(255))");//执行创建表的sql语句 19 } 20 21 @Override 22 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 23 24 } 25 }
3.实践操作:创建名为image.db的数据库,创建数据库表imagetable,向数据库表插入数据,同时读取数据。
插入数据的方式有两种,一种是通过SQLiteDatabase的execSQL(String sql)方法来实现。一种是通过SQLiteDatabase已经封装好的insert()方法来实现。个人认为,为了避免由于sql语法导致的程序出错,使用的后者更加便捷。
查询数据的时候,使用的是SQLiteDatabase的query()方法,该方法返回的是一个Cursor对象,它就像是一个可移动的游标,可以指向数据库表的每一行。当cursor移动到某一列的某一行的时候,通过调用cursor的getString()、getInt()、getDouble()等方法获得该位置的数据。
另外关于SQLiteDatabase的query(table,columns,selection,selectionArgs,groups,having,orderBy,limit)方法的各参数使用在这里进行一个说明吧:
1).table:要查询的数据库表名。
2).columns:要查询的列名。为null的话,返回所有列。
3).selection:查询条件子句。相当于select语句where关键字后面的条件子句部分,在条件子句中允许使用占位符?返回符合该条件子句的行。为null的话,返回所有行。
4).selectionArg:对应seletion参数里面的占位符?的值,值在数组中的位置与占位符在语句中的位置必须一致,否则抛出异常。
5).groups,having,orderBy就分别相当于select语句里面的group By,having,order By关键字后面的部分。
6).limit:相当于select语句limit关键字后面的部分,指定偏移量和获取的记录数。
实现代码:
1 public class MainActivity extends AppCompatActivity { 2 MyDataBaseHelper myDataBaseHelper; 3 Button insertBtn; 4 Button searchBtn; 5 EditText editText1; 6 EditText editText2; 7 TextView textView; 8 String DataBase_Name="image.db"; 9 String Table_Name = "imagetable"; 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 //执行该句时,数据库不被创建 16 myDataBaseHelper = new MyDataBaseHelper(MainActivity.this, DataBase_Name, 2); 17 editText1 = (EditText) findViewById(R.id.edit1); 18 editText2 = (EditText) findViewById(R.id.edit2); 19 insertBtn = (Button) findViewById(R.id.insertBtn); 20 searchBtn = (Button) findViewById(R.id.searchBtn); 21 textView = (TextView) findViewById(R.id.textview); 22 insertBtn.setOnClickListener(new View.OnClickListener() { 23 @Override 24 public void onClick(View v) { 25 String word = editText1.getText().toString(); 26 String detail = editText2.getText().toString(); 27 ContentValues contentValues = new ContentValues(); 28 contentValues.put("word", word); 29 contentValues.put("detail", detail); 30 //插入数据:getWritableDatabase,当执行getWritableDatabase时数据库才被创建 31 SQLiteDatabase db = myDataBaseHelper.getWritableDatabase(); 32 long id = db.insert(Table_Name, null, contentValues); 33 db.close(); 34 if (id != -1) Toast.makeText(MainActivity.this, "插入成功", Toast.LENGTH_SHORT).show(); 35 else Toast.makeText(MainActivity.this, "插入失败", Toast.LENGTH_SHORT).show(); 36 } 37 }); 38 searchBtn.setOnClickListener(new View.OnClickListener() { 39 @Override 40 public void onClick(View v) { 41 //查询数据:getReadableDatabase 42 searchDataBase(myDataBaseHelper.getReadableDatabase()); 43 Toast.makeText(MainActivity.this, "搜索成功", Toast.LENGTH_SHORT).show(); 44 } 45 }); 46 } 47 48 private void searchDataBase(SQLiteDatabase db) { 49 Cursor cursor=db.query("imagetable", new String[]{"word","detail"}, null, null, null, null, null); 50 String word = ""; 51 String detail = ""; 52 for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()) { 53 word = cursor.getString(0) + "\n"; 54 detail = cursor.getString(1) + "\n"; 55 } 56 cursor.close(); 57 db.close(); 58 String s = word +detail; 59 textView.setText(s); 60 } 61 62 @Override 63 protected void onDestroy() { 64 super.onDestroy(); 65 if (myDataBaseHelper != null) 66 myDataBaseHelper.close(); 67 } 68 }