android开发使用SQLite之写日记

使用数据库实现对数据的存储。

下面上一个小例子,写日记。

效果如下:

      
  

当LIstView中没有数据显示时,我们需要告诉用户没有数据.

方法有二:

1.

activity继承ListActivity,在布局文件中如下编写:

 <TextView
        android:id="@id/android:empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="你好懒啊,还没开始写日记呢" />

     <ListView
      <span style="white-space:pre">	</span> android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:id="@+id/android:list"/> 

2.

<span style="white-space:pre">		</span>if(adapter.isEmpty()&&textView==null){
			textView = new TextView(MainActivity.this);
			textView.setText("主人很懒,什么也没留下");
			textView.setVisibility(View.GONE);
			((ViewGroup) listView.getParent()).addView(textView);
			listView.setEmptyView(textView);

		}else{
			listView.setAdapter(simpleCursorAdapter);
		}

数据库的使用(安卓本身自带SQLite,如果想使用其他的数据库,那就得使用Web Server):

继承SQLiteOpenHelper。

public DBHelper(Context context) //数据库的名字,数据库的版本

public void onCreate(SQLiteDatabase db)////创建数据库

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)//更新数据库

具体代码如下:

cn.edu.bzu.diary.activity

MainActivity.java

public class MainActivity extends Activity {

	ListView listView;
	Cursor diaries;//游标
	TextView textView = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		listView = (ListView) findViewById(R.id.listview);
		refreshList();
		this.registerForContextMenu(listView);

	}

	/**
	 * 刷新Adapter
	 */
	public void refreshList(){
		DiaryDao diaryDao = new DiaryDao(this);
		diaries = diaryDao.getAllDairies();
		SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(
				MainActivity.this, R.layout.item, diaries, new String[] { "title",
						"created" }, new int[] { R.id.title, R.id.created });

		if(simpleCursorAdapter.isEmpty()&&textView==null){
			textView = new TextView(MainActivity.this);
			textView.setText("主人很懒,什么也没留下");
			textView.setVisibility(View.GONE);
			((ViewGroup) listView.getParent()).addView(textView);
			listView.setEmptyView(textView);

		}else{
			listView.setAdapter(simpleCursorAdapter);
		}

	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {

		menu.setHeaderTitle("操作");
		menu.add(0, 1, Menu.NONE, "编辑");
		menu.add(0, 2, Menu.NONE, "删除");

		super.onCreateContextMenu(menu, v, menuInfo);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) { // onContextItemSelected
		AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
				.getMenuInfo();

		switch (item.getItemId()) {
		case 1:
			Intent intent = new Intent();
			Bundle bundle = new Bundle();
			bundle.putInt("id", (int)menuInfo.id);
			intent.putExtras(bundle);
			intent.setClass(MainActivity.this, DiaryEditAcitivity.class);
			startActivity(intent);
			break;

		case 2:
			DiaryDao dao = new DiaryDao(MainActivity.this);
			dao.delete((int) menuInfo.id);//menuInfo.id与数据库的ID一致
			refreshList();
			break;
		}

		return super.onContextItemSelected(item);
	}

	/**
	 * 在退出日记添加中,利用生命周期刷新Adapter
	 */

	@Override
	protected void onResume() {
		super.onResume();

		refreshList();

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	/**
	 * 通过菜单进入“日记添加页面”
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.save:

			Intent intent = new Intent();
			intent.setClass(MainActivity.this, DiaryAddAcitivity.class);
			startActivity(intent);
			break;
		}
		return super.onOptionsItemSelected(item);
	}
}

DiaryAddAcitivity.java

public class DiaryAddAcitivity extends Activity {

	DiaryDao diaryDao = new DiaryDao(DiaryAddAcitivity.this);
	Button button;
	EditText editText,editText2;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.diaryadd_acitivity);

		editText = (EditText) findViewById(R.id.et_diaryadd);//标题
		editText2 = (EditText) findViewById(R.id.et02_diaryadd);//内容
		button = (Button) findViewById(R.id.but);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.diary_add_acitivity, menu);
		return true;
	}

	public void click(View view){
		String title = editText.getText().toString();
		String content = editText2.getText().toString();
		Diary diary = new Diary(title, content, Tool.dateChange(new Date()));
		DiaryDao diaryDao = new DiaryDao(this);
		diaryDao.save(diary);

		finish();

	}

}

DiaryEditAcitivity.java

public class DiaryEditAcitivity extends Activity {

	DiaryDao diaryDao = new DiaryDao(DiaryEditAcitivity.this);
	Button button;
	EditText editText,editText2;
	int id ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.diaryadd_acitivity);

		editText = (EditText) findViewById(R.id.et_diaryadd);//标题
		editText2 = (EditText) findViewById(R.id.et02_diaryadd);//内容
		button = (Button) findViewById(R.id.but);

		Bundle bundle = this.getIntent().getExtras();
		if(bundle!=null){
			id = bundle.getInt("id");
			Diary  diary =  diaryDao.getDiaryById(id);
			editText.setText(diary.getTitle());
			editText2.setText(diary.getContent());

		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.diary_add_acitivity, menu);
		return true;
	}

	public void click(View view){
		String title = editText.getText().toString();
		String content = editText2.getText().toString();
		Diary diary = new Diary(title, content, Tool.dateChange(new Date()));
		diary.setId(id);
		DiaryDao diaryDao = new DiaryDao(this);
		diaryDao.update(diary);
		finish();

	}

}

cn.edu.bzu.diary.dao

DiaryDao.java

public class DiaryDao {

	private DBHelper dbHelper;
	private SQLiteDatabase sqLiteDatabase;

	public DiaryDao(Context context) {
		dbHelper = new DBHelper(context);

	}

	/**
	 * 添加日记
	 * @param diary
	 */

	public void save(Diary diary) {
		String sql = "insert  into diary(title,content,created) values(?,?,?)";
		sqLiteDatabase = dbHelper.getWritableDatabase();
		sqLiteDatabase.execSQL(
				sql,
				new String[] { diary.getTitle(), diary.getContent(),
						diary.getDatetime() });

	}

	/**
	 * 根据id删除日记
	 *
	 * @param id
	 *            日记的id号
	 */
	public void delete(Integer id) {
		sqLiteDatabase = dbHelper.getWritableDatabase();// 得到的是同一个数据库实例
		sqLiteDatabase.execSQL("delete from diary where _id=?",
				new Object[] { id });
	}

	/**
	 * 更新日记
	 *
	 * @param diary
	 */
	public void update(Diary diary) {
		sqLiteDatabase = dbHelper.getWritableDatabase();// 得到的是同一个数据库实例
		sqLiteDatabase.execSQL(
				"update diary set title=?,content=?,created=? where _id=?",
				new Object[] { diary.getTitle(), diary.getContent(),
						diary.getDatetime(), diary.getId() });
	}

	/**
	 * 返回一个游标,也可以使用注释部分,返回一个List集合(使用SimpleAdapter),在这里使用游标,主要是因为
	 * AdapterContextMenuInfo中的ID是和数据库中一致的
	 * @return  cursor
	 */

	public Cursor getAllDairies() {
		//Diary diary = null;
		//List<Diary> diaries = new ArrayList<Diary>();
		sqLiteDatabase = dbHelper.getReadableDatabase();
		Cursor cursor = sqLiteDatabase.rawQuery("select * from diary ", null);
		/*
		 * while(cursor.moveToNext()){ String title =
		 * cursor.getString(cursor.getColumnIndex("title")); String content =
		 * cursor.getString(cursor.getColumnIndex("content")); String created =
		 * cursor.getString(cursor.getColumnIndex("created")); diary = new
		 * Diary(title, content, created); diaries.add(diary); }
		 */
		return cursor;
	}

	/**
	 * 获取记录总数
	 */
	public long count() {
		long count = 0;
		sqLiteDatabase = dbHelper.getReadableDatabase();
		Cursor cursor = sqLiteDatabase.rawQuery("select count(*) from diary ",
				null);
		cursor.moveToFirst();
		count = cursor.getLong(0);
		return count;

	}

	public Diary getDiaryById(int id) {
		sqLiteDatabase = dbHelper.getWritableDatabase();
		Diary diary = null;
		Cursor cursor = sqLiteDatabase.rawQuery(
				"select * from diary where _id= ?", new String[] { id + "" });
		if (cursor.moveToFirst()) {

			String title = cursor.getString(cursor.getColumnIndex("title"));
			String content = cursor.getString(cursor.getColumnIndex("content"));
			String created = cursor.getString(cursor.getColumnIndex("created"));

			diary = new Diary(title, content, created);

		}

		return diary;
	}

}

cn.edu.bzu.diary.db

DBHelper.java

public class DBHelper  extends SQLiteOpenHelper{

	public static final String DATABASE_NAME="diary.db";
	public static final int VERSION = 1;

	 //数据库的名字,数据库的版本
	public DBHelper(Context context) {
		super(context, DATABASE_NAME, null, VERSION);
		// TODO Auto-generated constructor stub
	}

	//创建数据库,字段:id(主键),title,content,created;
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("create table diary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),created)");

	}

	//用于数据库的更新
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}

cn.edu.bzu.diary.entity

Diary.java

public class Diary {

	private Integer id;
	private String title;
	private String content;
	private String datetime;

	public Diary(){

	}

	public Diary(String title,String content,String datetime){
		this.title = title;
		this.content = content;
		this.datetime = datetime;

	}

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getDatetime() {
		return datetime;
	}

	public void setDatetime(String datetime) {
		this.datetime = datetime;
	}

	@Override
	public String toString() {
		return "Diary [title=" + title + ", content=" + content + ", datetime="
				+ datetime + "]";
	}

}

cn.edu.bzu.diary.tools

Tool.java

public class Tool {

	/**
	 * 时间显示样式
	 * @param date
	 * @return
	 */
	public static String dateChange(Date date){

		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh时:mm分:ss秒");

		return simpleDateFormat.format(date);

	}

}

代码下载地址

时间: 2024-12-20 11:23:46

android开发使用SQLite之写日记的相关文章

Android 开发笔记 “Sqlite Cursor 使用”

使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈,加深自己和大家对Android 中使用 Cursor 的理解. 关于 Cursor 在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情: Cursor 是每行的集合. 使用 moveToFirst() 定位第一行. 使用moveToNext()定位到下一行

Android开发--adb,SQLite数据库运用

一.玩转adb  adb的全称为Android Debug Bridge,就是起到调试桥的作用.   adb有什么用?:借助adb工具,我们可以管理设备或手机模拟器的状态.还可以进行很多手机操作,如安装软件.系统升级.运行shell命令等等. 1.找到下好的eplice文件,复制这个文件路径,如我的E:\adt-bundle-windows-x86_64-20140702\sdk\platform-tools,打开cmd 发布Android程序     查看那行连接设备:adb devices

Android 开发笔记 “SQLite”

SQLite 入门与分析 1.SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分.正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性.随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复杂的传统数据库管理系统更适应.嵌入式数据库直接在应用程序进程中运行,提供了零配置(zero-configuration)运行模式,并且资源占用非常少. SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Rich

从零开始学android开发-查看sqlite数据库

C:\Users\Administrator>cd E:\ProSoft\adt-bundle-windows-x86-20140321\sdk\platform-tools

Android开发SQLite的使用

在Android 开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等

Android开发入门日记

2014.9.3 搭建开发环境: Windows 7/8 JDK ADT-Bundle Android SDK Manager --> Intel Atom x86 System Image --> AVD 2014.9.4 发现了 http://www.androiddevtools.cn ,提供墙内ADT下载. 2014.9.5 发现了很棒的学习网站 http://www.marschen.com ,用这个网站的视频开始学习. 2014.9.9 各种方法仍然无法让SDK Manager正常

C#程序员学习Android开发系列之学习路线图

通过前面的3篇博客已经简单的介绍了Android开发的过程并写了一个简单的demo,了解了Android开发的环境以及一些背景知识. 接下来这篇博客不打算继续学习Android开发的细节,先停一下,明确一下接下来的学习目标以及学习路线. 一.对Android开发的基本认识 1.Android原生开发是基于Java语言的,由于我比较擅长C#,所以对Java语言本身不太熟练,需要加强Java语言基础的练习,这一块我会穿插到具体的知识点练习当中,并且在必要的地方给出与C#语言的对比(其实基本上在语法层

Android开发系列之学习路线图

通过前面的3篇博客已经简单的介绍了Android开发的过程并写了一个简单的demo,了解了Android开发的环境以及一些背景知识. 接下来这篇博客不打算继续学习Android开发的细节,先停一下,明白一下接下来的学习目标以及学习路线. 一.对Android开发的基本认识 1.Android原生开发是基于Java语言的.因为我比較擅长C#,所以对Java语言本身不太熟练,须要加强Java语言基础的练习,这一块我会穿插到详细的知识点练习其中.而且在必要的地方给出与C#语言的对照(事实上基本上在语法

Android开发环境搭建&amp;第一个Android工程建立

我本人对安装开发环境花费的时间比较注意,一般不会很久,能满足自己当前眼下用就可以了,而不会把所有的资源全部配置上去,这样我会感觉十分浪费时间,然后全部搭建还会出现这样那样的不知所云的问题,看似一个一个解决掉对自己能力有一定的提升,然后对我来说这并没有什么卵用,我用这段时间,基本可以做到Android入门了,而有些人还在琢磨这eclipse怎么配置sdk路径的问题,百度谷歌了一大堆.下面是如何快速搭建Android开发环境,并写出第一个Android应用程序,我从来不写hello world,因为