今天实例讲解一个数据库的例子
200px
布局activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TableRow >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="书籍名:"
android:textSize="15sp"
android:textColor="#f00"
/>
<EditText
android:id="@+id/bookname"
android:layout_width="200px"
android:layout_height="wrap_content"
>
</EditText>
</TableRow>
<TableRow >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="作者名:"
android:textSize="15sp"
android:textColor="#f00"
/>
<EditText
android:id="@+id/author"
android:layout_width="200px"
android:layout_height="wrap_content"
>
</EditText>
</TableRow>
</TableLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="数据库信息:"
android:textSize="15sp"
android:textColor="#f00"
/>
<ListView
android:id="@+id/bookslist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</ListView>
</LinearLayout>
java 代码 MysqlOpenHelp
package com.example.sqlitedemo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
//继承 SQLiteOpenHelper,别忘了
public class MysqlOpenHelp extends SQLiteOpenHelper {
private final static String TABLE_NAME = "bookinfo"; //表名
public final static String BOOK_ID = "bookid"; // id列
public final static String BOOK_NAME = "bookname"; //数据名列
public final static String BOOK_AUTHOR = "bookauthor"; //数据作者类
public MysqlOpenHelp(Context context, String name, CursorFactory factory,
int version) {
super(context, "Book.db", null, 1);//参数1,上下文,参数2,数据库名,参数3,游标工程一般null,参数4,版本
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
String sql=
"CREATE TABLE " + TABLE_NAME + " (" + BOOK_ID
+ " INTEGER primary key autoincrement, " + BOOK_NAME + " text, "+ BOOK_AUTHOR +" text);";
//大家一定要注意这些数据字母别少写了,多写点,我以前写错一个找个一上午,原来少个标点符号。
arg0.execSQL(sql);//执行
}
//更新数据库
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
String sql="if not exists "+"bookinfo";
arg0.execSQL(sql);
onCreate(arg0);
}
//查询数据
public Cursor select() {
SQLiteDatabase db=this.getWritableDatabase();
Cursor cursor=db.query("bookinfo", null,null, null, null, null, null);//数据库查询很多种方法,建议这种。
return cursor;//返回数据
}
//插入数据 注意形参参数
public long insert(String name,String author){
SQLiteDatabase db=this.getWritableDatabase();//写数据库
ContentValues values=new ContentValues();//使用ContentValues
values.put("bookname", name);//往数据库bookname列添加姓书名
values.put("bookauthor", author);往数据库bookauthor列添加作者名
long row=db.insert("bookinfo", null, values);//插入数据
return row;//返回插入的数据
}
//删除数据,一般删除数据都是删除id就行了 注意参数
public void delete(int id){
SQLiteDatabase db=this.getWritableDatabase();//写数据库
String where="bookid"+"=?";
String[] idvalues={Integer.toString(id)};//转换一下
db.delete("bookinfo", where,idvalues);//删除字符串组的id
}
//更新数据,id name author都要变,也就是添加和id删除的合并
public void Update(int id ,String name,String author){
SQLiteDatabase db=this.getWritableDatabase();
String where="bookid"+"=?";
String[] idvalues={Integer.toString(id)};
ContentValues values=new ContentValues();
values.put("bookname", name);
values.put("bookauthor", author);
db.update("bookinfo", values, where, idvalues);
}
}
MainActivity
package com.example.sqlitedemo;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
//借口实现时间监听
public class MainActivity extends Activity implements AdapterView.OnItemClickListener {
private MysqlOpenHelp mBooksDB;//声明数据库辅助类
private Cursor mCursor;//声明Cursor cursor指的是每一个数据
private EditText BookName;//声明 BookName, BookAuthor, BookList
private EditText BookAuthor;
private ListView BooksList;
private int id = 0;
//用到菜单,你可以用按钮,我明天给带来一个按钮的事件
protected final static int MENU_ADD = Menu.FIRST;
protected final static int MENU_DELETE = Menu.FIRST + 1;
protected final static int MENU_UPDATE = Menu.FIRST + 2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setUpViews();//更新view视图
}
public void setUpViews(){
mBooksDB = new MysqlOpenHelp(this,"Book.db" , null,1 );//实例化
mCursor = mBooksDB.select();//调用查询
//实例化BookName, BookAuthor, BookList
BookName = (EditText)findViewById(R.id.bookname);
BookAuthor = (EditText)findViewById(R.id.author);
BooksList = (ListView)findViewById(R.id.bookslist);
BooksList.setAdapter(new BooksListAdapter(this, mCursor));
BooksList.setOnItemClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//菜单操作
menu.add(Menu.NONE, MENU_ADD, 0, "ADD");
menu.add(Menu.NONE, MENU_DELETE, 0, "DELETE");
menu.add(Menu.NONE, MENU_UPDATE, 0, "UPDATE");
return true;
}
//菜单事件监听
public boolean onOptionsItemSelected(MenuItem item)
{
super.onOptionsItemSelected(item);
//item.getid,获取按钮id
switch (item.getItemId())
{
case MENU_ADD:
add();//添加数据,调用add
break;
case MENU_DELETE:
delete();//删除数据,调用delete
break;
case MENU_UPDATE:
update();//更新数据,调用update
break;
}
return true;
}
public void add(){
String name = BookName.getText().toString();
String author = BookAuthor.getText().toString();
//书名和作者都不能为空,或者退出
if (name.equals("") || author.equals("")){
return;
}
mBooksDB.insert(name, author);//调用MysqlOpenHelp插入类
mCursor.requery();//同步更新游标
BooksList.invalidateViews();//动态更新
BookName.setText("");
BookAuthor.setText("");
Toast.makeText(this, "Add Successed!", Toast.LENGTH_SHORT).show();
}
public void delete(){
//如果数据为0,返回空,应为id从1开始
if (id== 0) {
return;
}
mBooksDB.delete(id);//调用MysqlOpenHelp删除类
mCursor.requery();//同步更新游标
BooksList.invalidateViews();//动态更新
BookName.setText("");
BookAuthor.setText("");
Toast.makeText(this, "Delete Successed!", Toast.LENGTH_SHORT).show();
}
//这个和前面两个差不多
public void update(){
String bookname = BookName.getText().toString();
String author = BookAuthor.getText().toString();
//书名和作者都不能为空,或者退出
if (bookname.equals("") || author.equals("")){
return;
}
mBooksDB.Update(id, bookname, author);
mCursor.requery();
BooksList.invalidateViews();
BookName.setText("");
BookAuthor.setText("");
Toast.makeText(this, "Update Successed!", Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mCursor.moveToPosition(position);
id = mCursor.getInt(0);
BookName.setText(mCursor.getString(1));
BookAuthor.setText(mCursor.getString(2));
}
//使用BaseAdapter
public class BooksListAdapter extends BaseAdapter{
private Context mContext;
private Cursor mCursor;
public BooksListAdapter(Context context,Cursor cursor) {
mContext = context;
mCursor = cursor;
}
@Override
public int getCount() {
return mCursor.getCount();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView mTextView = new TextView(mContext);
mCursor.moveToPosition(position);// 移动光标到一个绝对的位置
mTextView.setText(mCursor.getString(1) + "___" + mCursor.getString(2));//显示书名和作者名
return mTextView;
}
}
}
效果图
第一次在csdn写博文,我也是菜鸟,更学android满3个月,希望记住自己学习的日子,也希望给新手解除迷惑。
写的不好,大家多多见谅。明天我将修改用button实现。希望大家多多关注!