Android学习笔记day_03----数据库操作

一、创建数据库

1. 创建PersonDBOpenHelper类,并且继承SQLiteOpenHelper类,数据库名为person,千万记得后缀db

public class PersonDBOpenHelper extends SQLiteOpenHelper {
	public PersonDBOpenHelper(Context context) {
		//context上下文
		//name 数据库名
		//factory 游标工厂  null默认的工厂
		//version 版本最小为1 从1开始
		super(context, "person.db", null,5);
	}
	//数据库第一次创建时候调用的方法,适合数据表结构初始化
	//如果数据库已经被创建了就不会调用
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(10))");
	}
	//数据库被更新时调用的方法,当数据版本增加的时候调用
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		System.out.println("数据库更新!");
	}
}

二、一般操作数据库

添加数据

得到SQLiteDatabase可写对象,执行execSQL方法

/**
	 * 添加一条数据
	 * @param v
	 */
	public void add(View v) {
		// 得到可读数据库
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("insert into info(name,phone) values(?,?)", new String[]{"赵四"+new Random().nextInt(110),"123"+new Random(123).nextInt()});
		Toast.makeText(this, "添加成功", 0).show();
		db.close();
	}

修改数据

得到SQLiteDatabase可写对象,执行execSQL方法

	/**
	 * 修改一条数据
	 */
	public void update(View v) {
		// 得到可读数据库
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("update info set phone=? where name=?", new Object[]{"赵四91","12345"});
		Toast.makeText(this, "更新成功", 0).show();
		db.close();
	}

删除数据

/**
	 * 删除一条数据
	 * @param v
	 */
	public void delete(View v) {
		// 得到可读数据库
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("delete from info where name=?", new Object[]{"赵四70"});
		Toast.makeText(this, "删除成功", 0).show();
		db.close();
	}

查询数据

查询数据需要用到游标cursor

/**
	 * 查询全部
	 * 
	 * @param v
	 */
	public void findAll(View v) {
		// 得到可读数据库
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from info", null);
		List<Person> listPerson = new ArrayList<Person>();
		while (cursor.moveToNext()) {
			Person person = new Person();
			person.setId(cursor.getInt(0));
			person.setName(cursor.getString(1));
			person.setPhone(cursor.getString(2));
			listPerson.add(person);
			person = null;
		}
		// 关闭游标
		cursor.close();
		for (Person p : listPerson) {
			System.out.println(p.toString());
		}
		db.close();
	}

三、API操作数据库

添加数据

	/**
	 * api插入数据
	 * @param name
	 * @param phone
	 * @return
	 */
	public long add(String name,String phone){
		SQLiteDatabase db = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", name);
		values.put("phone", phone);
		long id = db.insert("person", null, values);
		db.close();
		return id;
	}

修改数据

/**
	 * API更新数据
	 * @param oldName
	 * @param newName
	 * @return
	 */
	public int update(String oldName,String newName){
		SQLiteDatabase db = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("name", newName);
		int number = db.update("person", values, "name=?", new String[]{oldName});
		db.close();
		return number;
	}

删除数据

public int delete(String name){
		SQLiteDatabase db=helper.getWritableDatabase();
		int number = db.delete("person", "name=?", new String[]{name});
		db.close();
		return number;
	}

查询数据

如果是查询全部的数据的话,用rawQuery()方法,返回的是一个cursor结果集

/**
	 * API查询一条数据
	 * @param name
	 * @return
	 */
	public boolean find(String name){
		SQLiteDatabase db = helper.getWritableDatabase();
		Cursor cursor = db.query("person", null, "name=?",new String[]{name}, null, null, null);
		boolean result = cursor.moveToNext();
		cursor.close();
		db.close();
		return result;
	}

总结:

一、一般操作数据库流程

  1. 得到可读数据库
    SQLiteDatabase db = helper.getWritableDatabase();
  2. 执行execSQL语句
    db.execSQL()
  3. 关闭数据库

二、API操作数据库流程

  1. 得到可读数据库
    SQLiteDatabase db = helper.getWritableDatabase();
  2. 1)如果是增加、修改需要获取ContentValues 对象
ContentValues **加粗样式**values = new ContentValues();
再调用相应的方法
	2)删除的话直接调用delete方法
	3)查询的话需要定义游标cursor
		Cursor cursor = db.query();
		关闭游标
  1. 关闭数据库

四、数据库内容同步显示到界面(ListView)

ListView工作原理

  • MVC的设计模式

model 数据模型
view 视图 在Android下面专用:LIstView
controller 控制器 ( Adapter)数据适配器,作用是把数据从

1.List View控件使用

  • 在activity_main.xml中添加ListView控件
<ListView 
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:id="@+id/lv">        
    </ListView>

2.常用数据适配器(Adapter)

1)BaseAdapter

  • 基本的适配器,是一个抽象类,有4个抽象方法:
	public int getCount() {}
	public View getView(int position, View convertView, ViewGroup parent) {}
	public Object getItem(int position) {}
	public long getItemId(int position) {}

2) SimpleAdapter

  • SimpleAdapter是继承了BaseAdapter,特点是SimpleAdapter只能适配Checkable、Text View、ImageView
    1.交互文件如下
private ListView lv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = findViewById(R.id.lv);
		List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
		Map<String, Object> map1 = new HashMap<String, Object>();
		map1.put("icon", R.drawable.cyddz);
		map1.put("name", "fun01");
		Map<String, Object> map2 = new HashMap<String, Object>();
		map2.put("icon", R.drawable.cykvmce);
		map2.put("name", "fun02");
		Map<String, Object> map3 = new HashMap<String, Object>();
		map3.put("icon", R.drawable.day);
		map3.put("name", "fun03");
		data.add(map1);
		data.add(map2);
		data.add(map3);
		lv.setAdapter(new SimpleAdapter(this, data, R.layout.item, new String[] { "icon", "name" },
				new int[] { R.id.iv, R.id.tv }));
	}

2.每个条目的布局如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:id="@+id/tv" />

</LinearLayout>

3.效果图如下
在这里插入图片描述

3) ArrayAdapter

  • 也是BaseAdapter的子类,只是构造方法跟SimpleAdapter不同

3.适配器的运用and创建示例

  • 1 在布局文件activity_main.xml中创建ListView组件
<ListView 
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/lv">        
    </ListView>
  • 2在界面交互代MainActivity中边写适配器代码和交互代码,主要创建内部类继承BaseAdapter,然后重写getCount和getView代码
	private ListView listView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		listView = findViewById(R.id.lv);
		listView.setAdapter(new MyAdapter());
	}

	private class MyAdapter extends BaseAdapter {
		@Override
		public int getCount() {
			return 20;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			TextView textView = new TextView(MainActivity.this);
			textView.setText("我是第+" + position + "个条目!");
			textView.setTextSize(20);
			textView.setTextColor(Color.RED);
			return textView;
		}
		@Override
		public Object getItem(int position) {
			return null;
		}
		@Override
		public long getItemId(int position) {
			return 0;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值