SQListDatabase等同于JDBC中的connection和statement的结合体.
SQLiteDatabase即代表与数据库的连接,又能用于执行sql语句操作.
操作 SQLite 数据库的步骤
创建SQListDatabase对象,它代表与数据库的连接
链接上才会创建数据库走oncreate如果已经有了此数据库,那么就不会再走哦那create了
代码主一种是手打的SQLite语句第二种是系统提供
package com.example.sqlitedatabase_text;
import java.util.ArrayList;
import com.example.sqlitedatabase_text.data.DataTool;
import com.example.sqlitedatabase_text.data.DataUtil;
import com.example.sqlitedatabase_text.data.Database;
import android.R.integer;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.util.Base64;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText editText1;
private EditText editText2;
private TextView editText3;
private DataTool tool;
private DataUtil util;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = (EditText) findViewById(R.id.editText1);
editText2 = (EditText) findViewById(R.id.editText2);
editText3 = (TextView) findViewById(R.id.editText3);
tool = new DataTool(this);
util = new DataUtil(this);
}
public void add(View v){
Editable text = editText1.getText();
Editable text2 = editText2.getText();
// ---------------方式一------------------
// tool.add(text.toString(),text2.toString());
// ---------------方式二------------------
boolean b = util.addnew(text.toString(), Integer.parseInt(text2.toString()));
if(b){
Toast.makeText(this, "添加成功", 1).show();
}else{
Toast.makeText(this, "添加失败", 1).show();
}
}
public void delete(View v){
Editable text = editText1.getText();
// ---------------方式一------------------
// tool.delete(text.toString());
// ---------------方式二------------------
boolean delete = util.delete(text.toString());
if(delete){
Toast.makeText(this, "删除成功", 1).show();
}else{
Toast.makeText(this, "删除失败", 1).show();
}
}
public void updata(View v){
Editable text = editText1.getText();
Editable text2 = editText2.getText();
// ---------------方式一------------------
// tool.updata(Integer.parseInt(text2.toString()), text.toString());
// ---------------方式二------------------
boolean delete = util.updata(text.toString(), text2.toString());
if(delete){
Toast.makeText(this, "修改成功", 1).show();
}else{
Toast.makeText(this, "修改失败", 1).show();
}
}
public void select(View v){
// ---------------方式一------------------
// ArrayList select = tool.select();
// editText3.setText(select.toString());
// ---------------方式二------------------
Editable text = editText1.getText();
ArrayList select = util.select(text.toString());
editText3.setText(select.toString());
}
}
主xml写了两个编辑框和4个按钮
还要再建一个Databas类继承SQLiteOpenHelper来调用新建方法和版本提升方法,重写构造
package com.example.sqlitedatabase_text.data;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class Database extends SQLiteOpenHelper{
public Database(Context context) {
super(context, "1710.db", null, 3);
}
// 只有没有此数据库时调用,通过getReadableDatabase();开启
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.e("tag","onCreate");
db.execSQL("create table student(_id integer primary key autoincrement ,name varchar(200))");
}
//版本更新累加时
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("tag","onUpgrade");
db.execSQL("alter table student add num int");
}
}
工具一DataTool因为他在构造里面new Database 而Database 继承了SQLiteOpenHelper所以可以调关于数据库的方法
package com.example.sqlitedatabase_text.data;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class Database extends SQLiteOpenHelper{
public Database(Context context) {
super(context, "1710.db", null, 3);
}
// 只有没有此数据库时调用,通过getReadableDatabase();开启
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.e("tag","onCreate");
db.execSQL("create table student(_id integer primary key autoincrement ,name varchar(200))");
}
//版本更新累加时
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("tag","onUpgrade");
db.execSQL("alter table student add num int");
}
}
工具二DataUtil类同样他也需要new出Database
package com.example.sqlitedatabase_text.data;
import java.util.ArrayList;
import com.example.sqlitedatabase_text.Student;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DataUtil {
private final static String nametab="student";
private Database database;
public DataUtil(Context context){
database = new Database(context);
}
public boolean addnew(String name,int num){//int可以是String
SQLiteDatabase database2 = database.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("name", name);//参数1是字段名 ,2是字段值
values.put("num", num);//int/String数据库中是int类型传的不是数字的看成都是0
//参数1是表名,2是如果3没有值会走自动填写null,3是添加的值ContentValues类型
long l = database2.insert(nametab, null, values);
if(l!=-1){
database2.close();
database.close();
return true;
}
database2.close();
database.close();
return false;
}
public boolean delete(String name){
SQLiteDatabase database2 = database.getReadableDatabase();
//参数2是判断条件,3是条件的值
int i = database2.delete(nametab, "name=?", new String[]{name});
if(i!=0){//删除失败返回0
database2.close();
database.close();
return true;
}
database2.close();
database.close();
return false;
}
public boolean updata(String name,String num){
SQLiteDatabase database2 = database.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("num", num);
int i = database2.update(nametab, values, "name=?", new String[]{name});
if(i!=0){
database2.close();
database.close();
return true;
}
database2.close();
database.close();
return false;
}
public ArrayList select(String name){
ArrayList arrayList = new ArrayList();
SQLiteDatabase database2 = database.getReadableDatabase();
// 参数2是要查询的字段,如果要查看所有填写null,3是查询的条件,4是查询条件的参数 5是分组,传null不分组 6是分组查询,传null代表不需要分组查询 7是排序,传desc降序 asc升序
//除了表名全部传null是查看所有 Cursor query = database2.query(nametab, null, null, null, null, null, null);
Cursor query = database2.query(nametab, null, "name=?", new String[]{name}, null, null, "_id desc");
query.moveToFirst();
query.moveToPrevious();
while(query.moveToNext()){
int id = query.getInt(0);
String name2 = query.getString(1);
int num = query.getInt(2);
Student student = new Student(id, name2, num);
arrayList.add(student);
}
database2.close();
database.close();
return arrayList;
}
}
也可以这样写
String sql="select * from "+UserAccountTable.TABLE_NAME+" where "+UserAccountTable.COL_HXID+" =?";
Cursor cursor = readableDatabase.rawQuery(sql, new String[]{hxid});
UserInfo userInfo =null;
if(cursor.moveToNext()){//判断有没有数据
//同过字段名获取ID再获取值
String hxid2 = cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_HXID));
userInfo = new UserInfo();
}
集合里面的学生类
package com.example.sqlitedatabase_text;
public class Student {
int id;
String name ;
int num ;
public Student(int id, String name, int num) {
super();
this.id = id;
this.name = name;
this.num = num;
}
@Override
public String toString() {
return "id=" + id + ", 姓名=" + name + ", 年龄=" + num+"\n";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
image.png
是不是很棒