SQLite数据库
一、SQLite数据库简介和基础知识
1.在Android系统中嵌入的关系数据库。
2.SQLite数据库支持SQL语言
MySQL
1.create table 表名(列名 数据类型 修饰条件,列名 数据类型 修饰条件......);
2.insert into 表名 values(数值......);
3.update 表名 set 列名=新数值,..... where 条件;
4.delete from 表名 where 条件;
5.select (列名.....) from 表名 where 条件;
3.JDBC连接数据的方式在SQLite数据库是无法使用,需要SQLite数据库的访问API.
4.SQLite数据库中的数据不受数据类型的限制。
create table 表名(id int );
insert into 表名 values('1001');
5.字段的数据长度,该字段仍然可以保存超过指定长度的内容。
create table 表名(name varchar(3));
insert into 表名 values('1001001');
6.SQLite不支持外键约束(FOREIGN KEY CONSTRAINTS)。
二、在Android中操作SQLite数据库
1. Android平台上提供了一个名为SQLiteOpenHelper的抽象类。
SQLiteOpenHelper类提供了两个重要的抽象方法
onCreate(SQLiteDatabase db) 用于初次使用软件时生成数据库表
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 用于升级软件时更新数据库表结构
方法onOpen(SQLiteDatabase db),它在每次成功打开数据库后首先被执行.
实例方法
SQLiteDatabase getWritableDatabase()方法以读写方式打开数据库
SQLiteDatabase getReadableDatabase()方法先以读方式打开数据库
方法获取用于操作数据库的SQLiteDatabase对象
2.SQLiteDatabase --- 用于操作数据库的对象
第一种操作数据库的方式(适合熟悉SQL语句的人)
execSQL(String sql)方法可以执行insert、delete、update和create table之类有更改行为的SQL语句。
rawQuery(String sql)方法可以执行select的SQL语句。方法返回Cursor对象,Cursor是结果集游标。
第二种操作数据库的方式(适合不熟悉SQL语句的人)
insert(" ,,,,,,,,");
delete(" ")
update(" ")
query(" "); 方法返回Cursor对象,Cursor是结果集游标。
3.Cursor对象
moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true
Cursor.getColunmIndex(String coloumName);根据列名称得到列的索引值。
while(Cursor . moveToNext()){
Cursor.getInt(int index);
Cursor.getInt(Cursor.getColunmIndex());
}
操作SQLite数据库的步骤
1.新建一个类继承SQLiteOpenHelper类,
并重写onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
2.编写一个子类构造方法,然后在这个构造方法中调用父类的构造方法
super(context, NAME, null, VERSION);
//Context
//String NAME---数据库的名称
//CursorFactory---游标工厂默认为null
//int VERSION---数据库的版本号 【整数】
3.在重写的onCreate(SQLiteDatabase db)中执行创建数据库表的SQL语句。
第一种操作数据库的方式(适合熟悉SQL语句的人)
execSQL(String sql)方法可以执行insert、delete、update和create table之类有更改行为的SQL语句。
//Context context----上下文对象
//String name ---数据库的名称
//CursorFactory factory---游标工厂对象
//int version---数据库版本号
private static final String NAME="test_db";
private static final int VERSION=1;
public DBOpenHelper(Context context){
super(context, NAME, null, VERSION);
}
//用于初次使用软件时生成数据库表
@Override
public void onCreate(SQLiteDatabase database) {
//准备创建的表的sql数据
String createTable="create table person(personid integer primary key autoincrement, name varchar(20), age integer);";
//由SQLiteDatabase对象调用execSQL(String sql)
database.execSQL(createTable);
}
//用于升级软件时更新数据库表结构
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}
package com.click369.sqlitedemo1;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private DBSQLiteOpenHelper dbSQLiteOpenHelper=null;
private SQLiteDatabase sqLiteDatabase=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbSQLiteOpenHelper=new DBSQLiteOpenHelper(this);
sqLiteDatabase=dbSQLiteOpenHelper.getWritableDatabase();
}
/**
* 添加数据
*/
public void addStudent(View view) {
Student student=new Student();
student.setStuname("zhangsan");
student.setStuage(23);
student.setStuaddress("xian");
String insert="insert into Student values(null,'"+student.getStuname()+
"',"+student.getStuage()+
",'"+student.getStuaddress()+"');";
System.out.println(insert);
sqLiteDatabase.execSQL(insert);
Toast.makeText(this, "添加成功", 6000).show();
}
/**
* 修改数据
*/
public void updateStudent(View view) {
Student student=new Student();
student.setStuid(1);
student.setStuname("lisi");
student.setStuage(34);
student.setStuaddress("北京");
String update="update student set stuname='"+student.getStuname()
+"',stuage="+student.getStuage()+",stuaddress='"+
student.getStuaddress()+"' where stuid="+student.getStuid()+";";
System.out.println(update);
sqLiteDatabase.execSQL(update);
Toast.makeText(this, "修改成功", 6000).show();
}
/**
* 查询数据
*/
public void selectStudent(View view) {
String select="select * from student;";
System.out.println(select);
Cursor cursor=sqLiteDatabase.rawQuery(select, null);
while(cursor.moveToNext()){
int stuid=cursor.getInt(cursor.getColumnIndex("stuid"));
String stuname=cursor.getString(cursor.getColumnIndex("stuname"));
int stuage=cursor.getInt(cursor.getColumnIndex("stuage"));
String stuaddress=cursor.getString(cursor.getColumnIndex("stuaddress"));
String info="id="+stuid+",name="+stuname+",age="+stuage+",address="+stuaddress;
System.out.println(info);
}
cursor.close();
}
/**
* 删除数据
*/
public void deleteStudent(View view) {
String delete="delete from student where stuid=1;";
System.out.println(delete);
sqLiteDatabase.execSQL(delete);
Toast.makeText(this, "删除成功", 6000).show();
}
}
第二种操作数据库的方式(适合不熟悉SQL语句的人)
insert(" ,,,,,,,,");
delete(" ")
update(" ")
query(" "); 方法返回Cursor对象,Cursor是结果集游标。
package com.click369.sqlitedemo2;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper{
private static final String NAME="person_db";
private static final int VERSION=1;
public DBOpenHelper(Context context){
super(context,NAME,null,VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
String create="create table student(stuid integer primary key autoincrement, "+
"stuname varchar(20), "+
"stuage integer, "+
"stuaddress varchar(20));";
database.execSQL(create);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stu
}
}
package com.click369.sqlitedemo2;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private DBOpenHelper dbOpenHelper=null;
private SQLiteDatabase sqLiteDatabase=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbOpenHelper=new DBOpenHelper(this);
sqLiteDatabase=dbOpenHelper.getWritableDatabase();
}
public void addStudent(View view){
Student student=new Student();
student.setStuname("zhangsan");
student.setStuage(23);
student.setStuaddress("xian");
ContentValues values=new ContentValues();
values.put("stuname",student.getStuname());
values.put("stuage", student.getStuage());
values.put("stuaddress", student.getStuaddress());
long temp=sqLiteDatabase.insert("student", null, values);
if(temp>0){
Toast.makeText(this, "添加成功", 6000).show();
}else{
Toast.makeText(this, "添加失败", 6000).show();
}
}
public void updateStudent(View view){
Student student=new Student();
student.setStuid(1);
student.setStuname("lisi");
student.setStuage(34);
student.setStuaddress("上海");
ContentValues values=new ContentValues();
values.put("stuname",student.getStuname());
values.put("stuage", student.getStuage());
values.put("stuaddress", student.getStuaddress());
long temp=sqLiteDatabase.update("student", values, "stuid=?", new String[]{String.valueOf(student.getStuid())});
if(temp>0){
Toast.makeText(this, "修改成功", 6000).show();
}else{
Toast.makeText(this, "修改失败", 6000).show();
}
}
public void selectStudent(View view){
Cursor cursor=sqLiteDatabase.query("student", null, null, null, null, null, null);
while(cursor.moveToNext()){
int id= cursor.getInt(cursor.getColumnIndex("stuid"));
String name= cursor.getString(cursor.getColumnIndex("stuname"));
int age= cursor.getInt(cursor.getColumnIndex("stuage"));
String address= cursor.getString(cursor.getColumnIndex("stuaddress"));
String info="id="+id+",name="+name+",age="+age+",address="+address;
System.out.println(info);
}
cursor.close();
}
public void deleteStudent(View view){
long temp=sqLiteDatabase.delete("student", "stuid=?", new String[]{"1"});
if(temp>0){
Toast.makeText(this, "删除成功", 6000).show();
}else{
Toast.makeText(this, "删除失败", 6000).show();
}
}
}
sqlite数据的保存位置 data/data/自己应用程序的包/databases/自己的数据库
例如:data/data/com.click369.sqlitedemo1/databases/test_db
一、SQLite数据库简介和基础知识
1.在Android系统中嵌入的关系数据库。
2.SQLite数据库支持SQL语言
MySQL
1.create table 表名(列名 数据类型 修饰条件,列名 数据类型 修饰条件......);
2.insert into 表名 values(数值......);
3.update 表名 set 列名=新数值,..... where 条件;
4.delete from 表名 where 条件;
5.select (列名.....) from 表名 where 条件;
3.JDBC连接数据的方式在SQLite数据库是无法使用,需要SQLite数据库的访问API.
4.SQLite数据库中的数据不受数据类型的限制。
create table 表名(id int );
insert into 表名 values('1001');
5.字段的数据长度,该字段仍然可以保存超过指定长度的内容。
create table 表名(name varchar(3));
insert into 表名 values('1001001');
6.SQLite不支持外键约束(FOREIGN KEY CONSTRAINTS)。
二、在Android中操作SQLite数据库
1. Android平台上提供了一个名为SQLiteOpenHelper的抽象类。
SQLiteOpenHelper类提供了两个重要的抽象方法
onCreate(SQLiteDatabase db) 用于初次使用软件时生成数据库表
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 用于升级软件时更新数据库表结构
方法onOpen(SQLiteDatabase db),它在每次成功打开数据库后首先被执行.
实例方法
SQLiteDatabase getWritableDatabase()方法以读写方式打开数据库
SQLiteDatabase getReadableDatabase()方法先以读方式打开数据库
方法获取用于操作数据库的SQLiteDatabase对象
2.SQLiteDatabase --- 用于操作数据库的对象
第一种操作数据库的方式(适合熟悉SQL语句的人)
execSQL(String sql)方法可以执行insert、delete、update和create table之类有更改行为的SQL语句。
rawQuery(String sql)方法可以执行select的SQL语句。方法返回Cursor对象,Cursor是结果集游标。
第二种操作数据库的方式(适合不熟悉SQL语句的人)
insert(" ,,,,,,,,");
delete(" ")
update(" ")
query(" "); 方法返回Cursor对象,Cursor是结果集游标。
3.Cursor对象
moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true
Cursor.getColunmIndex(String coloumName);根据列名称得到列的索引值。
while(Cursor . moveToNext()){
Cursor.getInt(int index);
Cursor.getInt(Cursor.getColunmIndex());
}
操作SQLite数据库的步骤
1.新建一个类继承SQLiteOpenHelper类,
并重写onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
2.编写一个子类构造方法,然后在这个构造方法中调用父类的构造方法
super(context, NAME, null, VERSION);
//Context
//String NAME---数据库的名称
//CursorFactory---游标工厂默认为null
//int VERSION---数据库的版本号 【整数】
3.在重写的onCreate(SQLiteDatabase db)中执行创建数据库表的SQL语句。
4.使用继承SQLiteOpenHelper类的子类对象,调用 getWritableDatabase()方法/getReadableDatabase()方法,得到SQLiteDatabase的对象。
5.使用上一步得到的SQLiteDatabase的对象,调用增删查改方法来实现对数据库表的数据操作。第一种操作数据库的方式(适合熟悉SQL语句的人)
execSQL(String sql)方法可以执行insert、delete、update和create table之类有更改行为的SQL语句。
rawQuery(String sql)方法可以执行select的SQL语句。方法返回Cursor对象,Cursor是结果集游标。
public class DBSQLiteOpenHelper extends SQLiteOpenHelper{//Context context----上下文对象
//String name ---数据库的名称
//CursorFactory factory---游标工厂对象
//int version---数据库版本号
private static final String NAME="test_db";
private static final int VERSION=1;
public DBOpenHelper(Context context){
super(context, NAME, null, VERSION);
}
//用于初次使用软件时生成数据库表
@Override
public void onCreate(SQLiteDatabase database) {
//准备创建的表的sql数据
String createTable="create table person(personid integer primary key autoincrement, name varchar(20), age integer);";
//由SQLiteDatabase对象调用execSQL(String sql)
database.execSQL(createTable);
}
//用于升级软件时更新数据库表结构
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}
package com.click369.sqlitedemo1;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private DBSQLiteOpenHelper dbSQLiteOpenHelper=null;
private SQLiteDatabase sqLiteDatabase=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbSQLiteOpenHelper=new DBSQLiteOpenHelper(this);
sqLiteDatabase=dbSQLiteOpenHelper.getWritableDatabase();
}
/**
* 添加数据
*/
public void addStudent(View view) {
Student student=new Student();
student.setStuname("zhangsan");
student.setStuage(23);
student.setStuaddress("xian");
String insert="insert into Student values(null,'"+student.getStuname()+
"',"+student.getStuage()+
",'"+student.getStuaddress()+"');";
System.out.println(insert);
sqLiteDatabase.execSQL(insert);
Toast.makeText(this, "添加成功", 6000).show();
}
/**
* 修改数据
*/
public void updateStudent(View view) {
Student student=new Student();
student.setStuid(1);
student.setStuname("lisi");
student.setStuage(34);
student.setStuaddress("北京");
String update="update student set stuname='"+student.getStuname()
+"',stuage="+student.getStuage()+",stuaddress='"+
student.getStuaddress()+"' where stuid="+student.getStuid()+";";
System.out.println(update);
sqLiteDatabase.execSQL(update);
Toast.makeText(this, "修改成功", 6000).show();
}
/**
* 查询数据
*/
public void selectStudent(View view) {
String select="select * from student;";
System.out.println(select);
Cursor cursor=sqLiteDatabase.rawQuery(select, null);
while(cursor.moveToNext()){
int stuid=cursor.getInt(cursor.getColumnIndex("stuid"));
String stuname=cursor.getString(cursor.getColumnIndex("stuname"));
int stuage=cursor.getInt(cursor.getColumnIndex("stuage"));
String stuaddress=cursor.getString(cursor.getColumnIndex("stuaddress"));
String info="id="+stuid+",name="+stuname+",age="+stuage+",address="+stuaddress;
System.out.println(info);
}
cursor.close();
}
/**
* 删除数据
*/
public void deleteStudent(View view) {
String delete="delete from student where stuid=1;";
System.out.println(delete);
sqLiteDatabase.execSQL(delete);
Toast.makeText(this, "删除成功", 6000).show();
}
}
第二种操作数据库的方式(适合不熟悉SQL语句的人)
insert(" ,,,,,,,,");
delete(" ")
update(" ")
query(" "); 方法返回Cursor对象,Cursor是结果集游标。
package com.click369.sqlitedemo2;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper{
private static final String NAME="person_db";
private static final int VERSION=1;
public DBOpenHelper(Context context){
super(context,NAME,null,VERSION);
}
@Override
public void onCreate(SQLiteDatabase database) {
String create="create table student(stuid integer primary key autoincrement, "+
"stuname varchar(20), "+
"stuage integer, "+
"stuaddress varchar(20));";
database.execSQL(create);
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stu
}
}
package com.click369.sqlitedemo2;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private DBOpenHelper dbOpenHelper=null;
private SQLiteDatabase sqLiteDatabase=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbOpenHelper=new DBOpenHelper(this);
sqLiteDatabase=dbOpenHelper.getWritableDatabase();
}
public void addStudent(View view){
Student student=new Student();
student.setStuname("zhangsan");
student.setStuage(23);
student.setStuaddress("xian");
ContentValues values=new ContentValues();
values.put("stuname",student.getStuname());
values.put("stuage", student.getStuage());
values.put("stuaddress", student.getStuaddress());
long temp=sqLiteDatabase.insert("student", null, values);
if(temp>0){
Toast.makeText(this, "添加成功", 6000).show();
}else{
Toast.makeText(this, "添加失败", 6000).show();
}
}
public void updateStudent(View view){
Student student=new Student();
student.setStuid(1);
student.setStuname("lisi");
student.setStuage(34);
student.setStuaddress("上海");
ContentValues values=new ContentValues();
values.put("stuname",student.getStuname());
values.put("stuage", student.getStuage());
values.put("stuaddress", student.getStuaddress());
long temp=sqLiteDatabase.update("student", values, "stuid=?", new String[]{String.valueOf(student.getStuid())});
if(temp>0){
Toast.makeText(this, "修改成功", 6000).show();
}else{
Toast.makeText(this, "修改失败", 6000).show();
}
}
public void selectStudent(View view){
Cursor cursor=sqLiteDatabase.query("student", null, null, null, null, null, null);
while(cursor.moveToNext()){
int id= cursor.getInt(cursor.getColumnIndex("stuid"));
String name= cursor.getString(cursor.getColumnIndex("stuname"));
int age= cursor.getInt(cursor.getColumnIndex("stuage"));
String address= cursor.getString(cursor.getColumnIndex("stuaddress"));
String info="id="+id+",name="+name+",age="+age+",address="+address;
System.out.println(info);
}
cursor.close();
}
public void deleteStudent(View view){
long temp=sqLiteDatabase.delete("student", "stuid=?", new String[]{"1"});
if(temp>0){
Toast.makeText(this, "删除成功", 6000).show();
}else{
Toast.makeText(this, "删除失败", 6000).show();
}
}
}
sqlite数据的保存位置 data/data/自己应用程序的包/databases/自己的数据库
例如:data/data/com.click369.sqlitedemo1/databases/test_db