Android04-SQLite

1.SQLite

1:体积小,主要使用于嵌入式设备。
2:跨平台性。
3:使用方便,直接解压便可以使用。
4:多线程操作性能差,对SQL支持不全面。

2.SQLite创建数据库

public class MyOpenHelper extends SQLiteOpenHelper {
	
	public MyOpenHelper(Context context){
		this(context,"MySQLite.db",null,1);
	}
	
	/**
	 * 
	 * @param context 上下文的环境
	 * @param name 数据库的名称,如果传入的是null,则会在内存中创建出一个数据库
	 * @param factory 游标的工厂,如果使用系统默认的,则传入null
	 * @param version 数据库的版本号,主要用来控制数据库的升级和降级
	 */
	public MyOpenHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	/**
	 * 当数据库第一次创建的时候,会调用这个方法
	 * 在这个方法中可以进行表的创建和数据的初始化
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		//SQLite中id列使用_id表示、自增长使用autoincrement表示
		db.execSQL("create table user(_id integer " +
				"primary key autoincrement,name varchar(20)," +
				"phone varchar(20))");
		System.out.println("on Create");
	}

	/**
	 * 这个方法用来进行数据库的升级,升级之后数据库的版本应该发生变化
	 * 进行数据库中表结构的修改
	 * int oldVersion, int newVersion 产品发布之后,使用版本号确定当前版本要进行的具体操作
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		db.execSQL("alter table user add age integer");
		System.out.println("oldVersion" + oldVersion);
		System.out.println("newVersion" + newVersion);
	}
	
	/**
	 * 当数据库进行降级的时候,会调用这个方法,默认会抛出异常
	 * 所以我们应该除掉这默认的调用 编写升级的具体的操作
	 */
	@Override
	public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		//super.onDowngrade(db, oldVersion, newVersion);
        //编写数据库降级的具体操作
		System.out.println("数据库降级");
	}
}
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建数据库的实例对象,此时并没有创建数据库
        MyOpenHelper myOpenHelper = new MyOpenHelper(this);
        //调用getReadableDatabase或者getWritableDatabase之后,会返回一个数据库对象,此时创建了数据库
        //getReadableDatabase,出现错误,会返回一个只读的数据库,错误解决之后,会关闭只读的数据库,返回可读可写的数据库
        //getWritableDatabase,出现错误,则创建数据库失败
        SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
        //SQLiteDatabase writableDatabase = myOpenHelper.getWritableDatabase();
    }
 
}
使用上述程序后,会生成数据库文件,一行有两个文件。其中-journal是日志文件,一个是存储数据的文件。

3.SQLite基础增删改查

public void insert(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    String sql = "insert into user(name,phone) values ('张三','111111')";
    readableDatabase.execSQL(sql);

    sql = "insert into user(name,phone) values ('lisi','000000')";
    readableDatabase.execSQL(sql);
    readableDatabase.close();
}
    
public void query(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    String sql = "select * from user";
    //rawQuery()方法的第二个参数作为占位符使用。select * from user where id=?
    Cursor cursor = readableDatabase.rawQuery(sql, null);
    //对于Cursor的操作和ResultSet一样,如果Cursor的索引从0开始。
    while(cursor.moveToNext()){
        String name = cursor.getString(1);
        System.out.println("name" + name);
        //通过列名访问数据
        String phone = cursor.getString(cursor.getColumnIndex("phone"));
        System.out.println("phone" + phone);
    }
    readableDatabase.close();
}
    
public void delete(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    String sql = "delete from user where _id = 1";
    readableDatabase.execSQL(sql);
    readableDatabase.close();
}

public void update(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    String sql = "update user set name = 'wangwu' where _id = 2";
    readableDatabase.execSQL(sql);
    readableDatabase.close();
}

4.使用定义好的方法进行数据的增删改查操作

public void delete1(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    //要操作的表
    String table = "user";
    //where后面拼接的语句 数值使用? 表示
    String whereClause = "_id = ?";
    //sql具体的参数
    String[] whereArgs = {"5"};
    //返回之表示删除的条数
    int delete = readableDatabase.delete(table, whereClause, whereArgs);

    //Toast.makeText的第二个参数传入的是int类型的数据是,表示资源数,会在R.string中匹配对应的组件的值
    Toast.makeText(this, delete + "", Toast.LENGTH_SHORT).show();

    readableDatabase.close();
}

public void query1(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();

    String table = "user";
    String[] columns = {"name"};
    String selection = "_id = ?";
    String[] selectionArgs = {"4"};
    String groupBy = null;
    String having = null;
    String orderBy = null;
    String limit = null;
    Cursor query = readableDatabase.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
    while(query.moveToNext()){
        String name = query.getString(query.getColumnIndex("name"));
        System.out.println(name);
    }

    query.close();
    readableDatabase.close();
}

public void update1(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
    String table = "user";

    ContentValues values = new ContentValues();
    values.put("name", "zhaoliu99999");

    String whereClause = "_id = ?";
    String[] whereArgs = {"4"};
    int update = readableDatabase.update(table, values, whereClause, whereArgs);
    System.out.print(update);

    readableDatabase.close();
}

public void insert1(View v){
    SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();

    //要操作的表
    String table = "user";

    //nullColumnHack用来防止出现insert into null values null这样的sql,而导致的异常
    //此时就会将sql替换为insert into name values null
    String nullColumnHack = "name";

    //ContentValues对象中封装了要插入的一行数据
    ContentValues values = new ContentValues();
    values.put("name", "zhaoliu");
    values.put("phone", "110");

    //insert方法的返回之为-1 则表示插入数据失败
    long num = readableDatabase.insert(table, nullColumnHack, values);
    System.out.println("num" + num);
    readableDatabase.close();
}

5.事务模板

public void transaction(View v){
    SQLiteDatabase db = myOpenHelper.getReadableDatabase();
    //开始事物
    db.beginTransaction();
    try {
        //对数据库的操作
        int i = 1/0;
        //设置事物执行成功的标记
        db.setTransactionSuccessful();
    } finally {
        //关闭事物
        db.endTransaction();
        db.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值