SQLiteDatabase类

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

是不是很棒

你可能感兴趣的:(SQLiteDatabase类)