android学习之通过sqlite数据库实现记事本

最近学习了数据库,于是写了一个记事本来体验了一下数据库因为最近的事情比较多,所以界面或者有些设计不是那么完美,但是作为一个可扩展的笔记本demo也已经是足够了,这个例子实现的是,可以注册多个用户,然后每个用户都对应有一个记事本记录,ok,代码:

package com.example.logindemo2;

import com.jk.dao.SqlistBase;

import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Note;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	SqlistBase mdatabase;
	SQLiteDatabase db;
	ContentValues cv;
	Button btn_login, btn_register;
	EditText et_name, et_pwd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 创建数据库对象
		init();
	}

	private void init() {
		//找到对应的控件对应的id
		btn_login = (Button) findViewById(R.id.btn_login);
		btn_register = (Button) findViewById(R.id.btn_register);
		et_name = (EditText) findViewById(R.id.name);
		et_pwd = (EditText) findViewById(R.id.key);
		//初始化SqlistBase对象
		mdatabase = new SqlistBase(this);
		//得到对应的数据库读写对象
		db = mdatabase.getWritableDatabase();
		//获得一个可以储存数据的对象
		cv = new ContentValues();
		//设置监听事件
		btn_login.setOnClickListener(this);
		btn_register.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		//对点击事件进行判断
		switch (v.getId()) {
		case R.id.btn_login:
			login();
			break;
		case R.id.btn_register:
			register();
			break;
		}

	}

	private void register() {
		Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
		startActivity(intent);

	}

	private void login() {
		//通过控件获得输入的文本信息
		String name=et_name.getText().toString();
		String pwd=et_pwd.getText().toString();
		//查询的键的封装
		String col[]={SqlistBase.ACCOUNT,SqlistBase.PWD};
		//获得遍历的游标
		Cursor cur=db.query(SqlistBase.USER_TABLE_NAME, col, null, null, null, null, null);
		while(cur.moveToNext()){
			//通过游标获得数据库里面的数据
			String namedata=cur.getString(0);
			String pwddata=cur.getString(1);
			//判断是否和数据库里面的内容是否相等
			if((namedata.equals(name))&&(pwddata.equals(pwd))){
				Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
				Bundle bundle=new Bundle();
				bundle.putString(SqlistBase.ACCOUNT,namedata);
				//在不同的包下面跳转需要加上包名
				Intent intent=new Intent(this,com.jk.note.Note.class);
				intent.putExtras(bundle);
				startActivity(intent);

			}
		}

	}
}
package com.example.logindemo2;

import com.jk.dao.SqlistBase;

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class RegisterActivity extends Activity {
	//声明一个可以读写的数据库
	SQLiteDatabase db;
	//申明自己定义的数据库创建的对象
	SqlistBase mdatabase;
	//获得一个可以储存数据的ContentValues封装对象
	ContentValues myContentValus;
	Button btn_register_check;
	EditText et_name_register,et_pwd_register,et_checkpwd_register;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_register);
		init();
		btn_register_check.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				//通过控件获得文本的输入的信息
				String name=et_name_register.getText().toString();
				String pwd=et_pwd_register.getText().toString();
				String checkpwd=et_checkpwd_register.getText().toString();
				if(name.equals("")){
					Toast.makeText(RegisterActivity.this,"账户名不能为空", Toast.LENGTH_SHORT).show();
				}else if(pwd.equals("")){
					Toast.makeText(RegisterActivity.this,"密码不能为空", Toast.LENGTH_SHORT).show();
				}else if(!pwd.equals(checkpwd)){
					Toast.makeText(RegisterActivity.this,"两次输入的密码不同", Toast.LENGTH_SHORT).show();
				}else if(pwd.equals(checkpwd)){
					Toast.makeText(RegisterActivity.this,"注册成功", Toast.LENGTH_SHORT).show();
					//将合法的数据写入数据库
					//获得自己写的数据库的对象
					mdatabase=new SqlistBase(RegisterActivity.this);
					//获得可以的数据库
					db=mdatabase.getWritableDatabase();
					//获得可以保存数据的ContentValues对象。
					myContentValus=new ContentValues();
					myContentValus.put(SqlistBase.ACCOUNT,name);
					myContentValus.put(SqlistBase.PWD,pwd);
					db.insert(SqlistBase.USER_TABLE_NAME, null, myContentValus);
					ContentValues myContentValus1 = new ContentValues();
					//写入完成以后关闭数据库
					db.close();
					RegisterActivity.this.finish();
				}

			}
		});
	}
	private void init() {
		//找到对应控件的id
		btn_register_check=(Button) findViewById(R.id.btn_register_check);
		et_name_register=(EditText) findViewById(R.id.name_register);
		et_pwd_register=(EditText) findViewById(R.id.key_register);
		et_checkpwd_register=(EditText) findViewById(R.id.check_key_register);
	}

}
package com.jk.note;

import java.util.Calendar;

import com.example.logindemo2.R;
import com.jk.dao.SqlistBase;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class Note extends ListActivity implements OnItemLongClickListener {
	//设置数据库里面对应的字段的名字
	public static final String TITLE = "title";
	public static final String BODY = "body";
	public static final String TIME = "created";
	public static final String NTID = "_id";
	//申明一个数据库
	public  static SQLiteDatabase db;
	//一个游标
	public Cursor cursor;
	//当前的用户
	public static String currentAccount;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_note);
		//得到当前登录的账户
		String account = getIntent().getExtras().getString(SqlistBase.ACCOUNT);
		//将当前的账户的名字设置为标题
		setTitle(account);
		//构建当前用户的表名
		currentAccount = "diary" + account;
		//获得数据库对象
		db = Note.this.openOrCreateDatabase("userdatabase.db", MODE_PRIVATE,
				null);
		//读取列表
		readlist();
		//实例化ListView
		ListView lv = this.getListView();
		//为lv设置长按监听事件
		lv.setOnItemLongClickListener(this);

	}

	public void readlist() {
		try {
			//如果数据库中存在当前对象,那么就查询
			cursor = db.query(true, currentAccount, new String[] { NTID, TITLE,
					BODY, TIME }, null, null, null, null, null, null);
		} catch (Exception e) {
		//如果数据库中不存在当前对象就创建
			String sql2 = "create table " + currentAccount + "(" + NTID
					+ " integer primary key autoincrement, " + TITLE
					+ " text not null, " + BODY + " text not null, " + TIME
					+ " text not null" + ");";
			db.execSQL(sql2);
			cursor = db.query(true, currentAccount, new String[] { NTID, TITLE,
					BODY, TIME }, null, null, null, null, null, null);
		}
		//将cursor和系统连接起来
		startManagingCursor(cursor);

		//需要查询的数据
		String[] from = new String[] { TITLE, TIME };
		//查询的数据的显示格式
		int[] to = new int[] { R.id.tv_title, R.id.tv_time };
		SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
				R.layout.note_row, cursor, from, to);
		setListAdapter(adapter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		//为菜单添加一个点击按钮的
		menu.add(0, 0, 0, "添加日记");
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		//响应事件
		if (item.getItemId() == 0) {
			createDiary();
		}
		return true;
	}

	private void createDiary() {
		//创建一个日志,主要是跳转到编辑界面
		Intent intent = new Intent(this, NoteEdit.class);
		startActivity(intent);

	}

	public void createDiary(String title, String body) {
		//获得一个cv来保存数据
		ContentValues cv = new ContentValues();
		cv.put(TITLE, title);
		cv.put(BODY, body);
		Calendar calendar = Calendar.getInstance();
		String time = calendar.get(Calendar.MONTH + 1) + "月"
				+ calendar.get(Calendar.DAY_OF_MONTH) + "日"
				+ calendar.get(Calendar.HOUR_OF_DAY) + "时";
       cv.put(TIME, time);
       //将数据写入数据库之中
       db.insert(currentAccount, null, cv);

	}
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    	// TODO Auto-generated method stub
    	super.onListItemClick(l, v, position, id);
    	//获得游标
    	Cursor mycursor=cursor;
    	//将目标移动到点击的位置
    	mycursor.move(position);
    	Intent intent=new Intent(this,NoteEdit.class);
    	intent.putExtra(NTID, id);
    	intent.putExtra(TITLE, mycursor.getString(mycursor.getColumnIndexOrThrow(TITLE)));
    	intent.putExtra(BODY, mycursor.getString(mycursor.getColumnIndexOrThrow(BODY)));
       //用带有数据的intent启动activity
    	startActivityForResult(intent,1);
    }
	@Override
	public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
			long arg3) {
		//长按以后直接删除,这里本来应该是弹出对话框的,但是最近事情有点多,朋友就自己去添加吧
		db.delete(currentAccount, NTID+"="+arg3,null);
		//刷新
		readlist();

		return false;
	}

	public void updataDiary(Long rowid, String title2, String body2) {
		ContentValues cv = new ContentValues();
	//同样创一个cv来保存数据
		cv.put(TITLE, title2);
		cv.put(BODY, body2);
		Calendar calendar = Calendar.getInstance();
		String time = calendar.get(Calendar.MONTH + 1) + "月"
				+ calendar.get(Calendar.DAY_OF_MONTH) + "日"
				+ calendar.get(Calendar.HOUR_OF_DAY) + "时";
       cv.put(TIME, time);
       //更新数据库
       db.update(currentAccount, cv, NTID+"="+rowid,null);

	}

}
package com.jk.note;

import com.example.logindemo2.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class NoteEdit extends Activity {
	//申明需要的一些控件
	EditText et_title,et_body;
	Button btn_confirm,btn_cancle;
	public Note currentNote;
	String title,body;
	public Long rowid;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.noto_edit);
		//初始化
		init();
	}
	public void init(){
		//实例化一个Note对象
		currentNote=new Note();
		//绑定控件
		et_title=(EditText) findViewById(R.id.et_title);
		et_body=(EditText) findViewById(R.id.et_body);
		btn_confirm=(Button) findViewById(R.id.btn_confirm);
		btn_cancle=(Button) findViewById(R.id.btn_cancle);
		//如果bundle不为空,得到数据并显示在界面
		Bundle bundle=getIntent().getExtras();
		if(bundle!=null){
		title=bundle.getString(Note.TITLE);
		body=bundle.getString(Note.BODY);
		if(title!=null){
			et_title.setText(title);
		}
		if(body!=null){
			et_body.setText(body);
		}
		//得到传入的id
		rowid=bundle.getLong(Note.NTID);
		}

	}
//对不同的事件进行不同的响应
	public void onMyClick(View v){
		switch(v.getId()){
		case R.id.btn_confirm:
			save();
			break;
		case R.id.btn_cancle:
			finish();
			break;
		}
	}

//
	private void save() {
		String title=et_title.getText().toString();
		String body=et_body.getText().toString();
		if(rowid!=null){
			//如果id不为空,那么就更新
			currentNote.updataDiary(rowid,title,body);
		}else{
			//如果id为空,那么就创建
		currentNote.createDiary(title, body);
		}
		Intent mintent=new Intent();
		setResult(RESULT_OK, mintent);
		finish();
	}

}

布局:

主界面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="用户名"/>
   <EditText
       android:id="@+id/name"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入用户名"/>
   </LinearLayout>
      <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="密码"/>
   <EditText
       android:id="@+id/key"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入密码"/>
   </LinearLayout>
   <LinearLayout
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:orientation="horizontal">
       <Button
           android:id="@+id/btn_login"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:onClick="onMyClick"
           android:text="登陆"/>
        <Button
            android:id="@+id/btn_register"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:onClick="onMyClick"
           android:text="注册"/>
   </LinearLayout>

</LinearLayout>

注册界面:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="用户名"/>
   <EditText
       android:id="@+id/name_register"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入用户名"/>

   </LinearLayout>
      <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="密码"/>
   <EditText
       android:id="@+id/key_register"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入密码"/>
   </LinearLayout>

      <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="密码"/>
   <EditText
       android:id="@+id/check_key_register"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请确认密码"/>
   </LinearLayout>
        <Button
            android:id="@+id/btn_register_check"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:onClick="onMyClick"
           android:text="注册"/>

</LinearLayout>

显示记事本的list

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<ListView
    android:id="@+id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ></ListView>
<TextView
    android:id="@+id/android:empty"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="你还没有开始写日记,点击menu添加你的第一篇日记"/>    

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <TextView
        android:id="@+id/tv_title"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="第一组"/>
       <TextView
        android:id="@+id/tv_time"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="199年"/>

</LinearLayout>

记事本的编辑框:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/et_title"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:hint="请输入标题"
        />
       <EditText
        android:id="@+id/et_body"
        android:layout_height="300dp"
        android:layout_width="match_parent"
        android:hint="请输入内容"
        />
       <LinearLayout
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:orientation="horizontal"
           >
           <Button
               android:id="@+id/btn_confirm"
                android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:onClick="onMyClick"
               android:text="确定"/>
             <Button
               android:id="@+id/btn_cancle"
                android:layout_height="wrap_content"
               android:layout_width="wrap_content"
                              android:onClick="onMyClick"
               android:text="取消"/>
       </LinearLayout>

</LinearLayout>

代码稍微有点多,大家耐心看一下。

时间: 2024-08-02 15:11:04

android学习之通过sqlite数据库实现记事本的相关文章

Android学习笔记(42):SQLite数据库

(1)SQLite数据库 先简单介绍一下SQLite数据库: 2000年由D.Richard Hipp发布. 是一款轻型.开源嵌入式关系数据库,占用资源非常低.目前用于很多嵌入式产品中,在嵌入式设备中,SQLite可能只需要几百K的内存就够了. 与Mysql.PostgreSQL这两款开源世界著名的数据库管理系统相比,它的处理速度更快. 在Android平台下,除了可以在Android程序中操作SQLite数据库之外,还可以在命令行模式下进行各种数据库的操作,包括表的各种操作,对数据的增加.删除

Android学习笔记之SQLite数据库的使用及常用的增删改查方法、无sql语句的DRUD方法汇总

(1)目录结构如下: (2)链接数据库的文件:DBHelper.java要继承SQLiteOpenHelper类 package com.lc.sqlite_demo1.db; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLit

Android 查看和管理sqlite数据库

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databases中. 使用DDMS导出sqlite数据库. 1.首先打开android项目的调试模式,然后找到显示DDMS: 选择DDMS 2.切换到DDMS,显示File Explorer窗口,找到/data/data/ 然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了.选择将

Android——使用SQLiteDatabase操作SQLite数据库

除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n).char(n).decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型. SQLite最大的特点是

通过adb shell操作android真机的SQLite数据库

要通过命令行直接操作android真机上的SQLite数据库,可以直接通过adb shell来完成,不过,前提是必须获得root权限. 另外,android系统其实就是linux的shell,这个应该大家都知道,不过一般情况下,在/system/xbin/目录下, 没有sqlite3命令,需要手动copy一个进去,通常情况下,需要两个文件 sqlite3.libncurses.so 解压后两个文件都有了,比如解压到:~/Downloads/sqlite3/ 然后就是通过下面的这些个命令,一步一步

Android开发之通过Android的API对sqlite数据库的操作以及数据库事务的练习

一.通过Android的API对sqlite数据库的操作 通过已有的ContentValues类,实例一个对象value来调用其中内部的方法来操作sqlite数据库 代码: package com.example.databasedemo; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sql

Android数据存储之SQLite 数据库学习

Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库 (3) File文件,通过读取写入方式生成文件存放数据 (4) ContentProvider,主要用于让其他应用程序使用保存的数据 (5)通过网络获取数据和写入数据到网络存储空间 SQLite 数据库介绍 SQLite 是一款轻量级的关系型数据库,它的运算速度非常快,占

cocos2d-x 2.1 Win32+Android开发中的sqlite数据库加密技术探讨

注意:本博客转移自本人约一年前的ITPUB博客文章,为的是便于学员参考之用. 很显然,cocos2d-x编程中只了解基本的sqlite数据库操作技术只是一个开头,真正把此数据库数据应用于实际中不使用一定的加密及解密技术几乎是不行的. 这个问题尽早会来到我面前,这不?现在就来了.一开始,自然想使用最省工的了:但是,这样的好事并不多,极少极少...... 于是,我先搜罗了一些现成的文章拿来一阅. 1,Sqlite数据库加密解密 SRC: http://blog.sina.com.cn/s/blog_

android之存储篇——SQLite数据库

转载:android之存储篇_SQLite数据库_让你彻底学会SQLite的使用 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么. 例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值. 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误. 另外, SQLite 在解析CREATE TABLE 语句时