完整代码package com.example.database;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
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.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listView;
private SQLiteDatabase db;
private static final String DATABASE_NAME = "first.db3";
private static final String DATABASE_TABLE = "user";
// 注意创建语句表示要加上“ if not exists”
private static final String DATABASE_CREATE = "create table if not exists"
+ DATABASE_TABLE
+ "(id integer primary key autoincrement,name varchar(20),password varchar(20))";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建数据库,默认位置data/data/包名/databases
db = openOrCreateDatabase(DATABASE_NAME, Activity.MODE_PRIVATE, null);
//创建表
db.execSQL(DATABASE_CREATE);
listView = (ListView) findViewById(R.id.listView1);
// 增
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ContentValues values = new ContentValues();
values.put("name", "user1");
values.put("password", "1234");
db.insert("user", null, values);
values.put("name", "user2");
values.put("password", "1234");
db.insert("user", null, values);
values.put("name", "user3");
values.put("password", "1234");
db.insert("user", null, values);
}
});
// 删
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 第一种方法
db.delete("user", "id=?", new String[] { "1" });
// 第二种方法
// for(int i=2;i<16;i++){
// db.delete("user", "id="+i, null);
// }
}
});
// 改
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ContentValues values = new ContentValues();
values.put("name", "cl");
values.put("password", "1234");
db.update("user", values, "id=?", new String[] { "2" });
}
});
// 查
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// Cursor cursor= db.query("user", new
// String[]{"name","password"} , "id=?", new String[]{"2"},
// null, null,"id asc");
// while (cursor.moveToNext()) {
// String name=cursor.getString(0);
// String password=cursor.getString(1);
// Toast.makeText(MainActivity.this, name+"-"+password,
// 2000).show();
// }
Cursor cursor = db.rawQuery(
"select id as _id,name,password from user", null);
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(
MainActivity.this, R.layout.dataitem, cursor,
new String[] { "_id", "name", "password" }, new int[] {
R.id.txtId, R.id.txtname, R.id.txtpassword });
listView.setAdapter(cursorAdapter);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
一、创建数据库
1、为了代码清晰,把数据库名,表名,sql语句单独定义
数据库名等的单独定义private SQLiteDatabase db;
private static final String DATABASE_NAME = "first.db3";
private static final String DATABASE_TABLE = "user";
// 注意创建语句表示要加上“ if not exists”
private static final String DATABASE_CREATE = "create table if not exists"
+ DATABASE_TABLE
+ "(id integer primary key autoincrement,name varchar(20),password varchar(20))";
注意:创建表语句要加上“if not exists”判断是否已经存在表,存在及不创建,不存在再创建。否则在程序第二次启动的时候就会直接崩溃。
二、插入数据
插入数据 ContentValues values = new ContentValues();
values.put("name", "user1");
values.put("password", "1234");
db.insert("user", null, values);
values.put("name", "user2");
values.put("password", "1234");
db.insert("user", null, values);
values.put("name", "user3");
values.put("password", "1234");
db.insert("user", null, values);
1、ContentValues键对值,相当于map。
2、 SqliteDatabase insert(String table, String nullColumnHack,ContentValues values)
String nullColumnHack用于指定空值字段的名称.如果第三个参数values 为Null或者元素个数为0,由于Insert()方法要求必须添加一条除了主键之外其它字段为Null值的记录,为了满足SQL语法的需要, insert语句必须给定一个字段名,如:insert into person(name)values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person()
values (),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,执行类似insert into person(personid) values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。
三、删除数据
删除数据db.delete("user", "id=?", new String[] { "1" });
调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法,参数一是表名称,参数二是删除条件,参数三是删除条件值数组;
四、修改数据
修改数据ContentValues values = new ContentValues();
values.put("name", "cl");
values.put("password", "1234");
db.update("user", values, "id=?", new String[] { "2" });
调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法。参数是表名称,参数是更行列ContentValues类型的键值对(Map),参数是更新条件(where字句),参数是更新条件数组。
五、查询数据
查询数据 Cursor cursor= db.query("user", new
String[]{"name","password"} , "id=?", new String[]{"2"},
null, null,"id asc");
while (cursor.moveToNext()) {
String name=cursor.getString(0);
String password=cursor.getString(1);
Toast.makeText(MainActivity.this, name+"-"+password,
2000).show();
在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
各个参数的意义说明:
①table:表名称
②columns:列名称数组
③selection:条件字句,相当于where
④selectionArgs:条件字句,参数数组
⑤groupBy:分组列
⑥having:分组条件
⑦orderBy:排序列
⑧limit:分页查询限制
⑨Cursor:返回值,相当于结果集ResultSet
Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
Cursor游标常用方法
方法名称
|
方法描述
|
getCount()
|
获得总的数据项数
|
isFirst()
|
判断是否第一条记录
|
isLast()
|
判断是否最后一条记录
|
moveToFirst()
|
移动到第一条记录
|
moveToLast()
|
移动到最后一条记录
|
move(int offset)
|
移动到指定记录
|
moveToNext()
|
移动到下一条记录
|
moveToPrevious()
|
移动到上一条记录
|
getColumnIndexOrThrow(String columnName)
|
根据列名称获得列索引
|
getInt(int columnIndex)
|
获得指定列索引的int类型值
|
getString(int columnIndex)
|
获得指定列缩影的String类型值
|