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<Student> select = tool.select();
//      editText3.setText(select.toString());
//      ---------------方式二------------------
    Editable text = editText1.getText();
        ArrayList<Student> select = util.select(text.toString());
        editText3.setText(select.toString());
}
}

主xml写了两个编辑框和4个按钮

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" 
        android:hint="姓名">

         <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

       
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="增加" 
        android:onClick="add"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"
        android:onClick="delete" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改"
        android:onClick="updata" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查看"
        android:onClick="select" />

    <TextView
        android:id="@+id/editText3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       />

</LinearLayout>

还要再建一个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<Student> select(String name){
    ArrayList<Student> arrayList = new ArrayList<Student>();
    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

是不是很棒

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容