在android中我们通常会用到SQLiteOpenHelper来建立数据库,因为他书写简单,并且可以快速的升级数据库的版本。 下面我们对SQLiteOpenHelper进行一一解答:
继承SQLiteOpenHelper
public class MySQLiteOpenHelper extends SQLiteOpenHelper { //这里的bank是数据库的表名;而"banke.db"是整个数据库的文件名; PRivate static final String sql = "create table bank(id integer primary key autoincrement ,name varchar , money integer)"; private static final String TAG = MySQLiteOpenHelper.class.getSimpleName(); public MySQLiteOpenHelper(Context context) { //第二个参数是数据库文件名; //第三个参数为 factory 游标工厂,null 表示使用默认的工厂; //version 为版本号; super(context, "banke.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { Log.d(TAG, "onCreate: enter"); db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}sql语句:
增:String sql = "insert into bank (name , money ) values(?,?)"; database.execSQL(sql, new Object[]{"apple", 1800});删:String sql = "delete from bank where name = ?"; database.execSQL(sql, new Object[]{"apple"});改:String sql = "update bank set money = ? where name =?"; database.execSQL(sql,new Object[]{1000,"apple"});查:String sql = "select (money) from bank where name = ?"; Cursor cursor1 = database.rawQuery(sql, new String[]{"apple"});使用方法有两种:每次使用时都要得到
MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);SQLiteDatabase mDatabase = mySql.getWritableDatabase();//第一种方法:/* insert(String table, String nullColumnHack, ContentValues values); String table 表示是数据表的表名(数据库的文件名不等于数据表的表名这点得弄清楚) String nullColumnHack 当下面的values为null时有效这个参数才有效,表示强行插入null值 ContentValues values */ ContentValues values = new ContentValues(); values.put("name", "apple"); values.put("money", 4999); mDatabase.insert("bank", null, values);//第二种方法://sql语句中的bank时数据库的表名,values(?,?)里面的?号为占位符,这里的结果由execSQL中的new Object[]{}传入; String sql = "insert into bank (name , money ) values(?,?)"; mDatabase.execSQL(sql, new Object[]{"apple", 1800});mDatabase.close();同样也是两种方法;
MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);SQLiteDatabase mDatabase = mySql.getWritableDatabase();//第一种:/* String table 数据表的表名 String[] columns, 要查询出来的列名; String selection, 相当于select语句where 后面的部分,可提供占位符, String[] selectionArgs,为上一个占位符提供参数, String groupBy, String having, String orderBy */Cursor cursor = mDatabase.query("bank", new String[]{"money"}, "name = ?", new String[]{"HUAWEI"}, null, null, null);//第二种://sql中 select 表示要查的内容 from 数据库表 where name = ? "?"号代表占位符; 下面这句话表示查询name为 ?的一整行数据;String sql = "select (money) from bank where name = ?"; Cursor cursor1 = mDatabase.rawQuery(sql, new String[]{"apple"}); while (cursor1.moveToNext()) { //int apple = cursor.getInt(cursor.getColumnIndex("money")); int huawei = cursor1.getInt(cursor1.getColumnIndex("money")); Log.d(TAG, "query: huawei = " + huawei); } cursor.close();mDatabase.close();//如果是要查询整张表那么select语句后面的where部分就不需要了,如下;//查询整张表的所有内容;String sql = "select * from bank";Cursor cursor = database.rawQuery(sql, null);新闻热点
疑难解答