android 使用SQLite的基本操作

Android操作数据库SQLite使用sql语句基本操作

1:自定义自己的SQLiteOpenHelper

public class DBHelper extends SQLiteOpenHelper {

    //重写SQLiteOpenHelper的有参构造方法
    public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, "my.db", null, 1);
        //第一个参数为Context对象,第二个参数为数据库名称,第三个设置为null,第四个为sql版本号
    }
    
    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建一张数据表并执行
        String sql="create table person(id int,name varchar(10))";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion{

    }
}

2:自定义一个javabean Person

public class Person {
    private String id;
    private String name;

    public Person(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public Person() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3:修改activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/inserttButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="插入数据"
        android:textSize="16sp" />


    <Button
        android:id="@+id/deletetButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除数据"
        android:textSize="16sp" />


    <Button
        android:id="@+id/updateButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改数据"
        android:textSize="16sp" />


    <Button
        android:id="@+id/querytButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询数据"
        android:textSize="16sp" />
</LinearLayout>

4:在MainActivity写

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button insertButton;
    private Button deletetButton;
    private Button updateButton;
    private Button queryButton;
    private SQLiteDatabase db;
    private DBHelper dbHelper;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new DBHelper(MainActivity.this, "", null, 1);
        init();
    }

    public void init() {
        insertButton = findViewById(R.id.inserttButton);
        deletetButton = findViewById(R.id.deletetButton);
        updateButton = findViewById(R.id.updateButton);
        queryButton = findViewById(R.id.querytButton);

        insertButton.setOnClickListener(this);
        deletetButton.setOnClickListener(this);
        updateButton.setOnClickListener(this);
        queryButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        db=dbHelper.getWritableDatabase();
        switch (v.getId()) {

            //添加
            case R.id.inserttButton:
                db = dbHelper.getWritableDatabase();
                db.beginTransaction();
                try{

                    db.execSQL("insert into person(id,name) values (?,?)", new String[]{"11", "黑夜"});
                    db.setTransactionSuccessful();
                } finally {
                    db.endTransaction();
                }

                Toast.makeText(MainActivity.this, "数据插入成功!", Toast.LENGTH_LONG).show();
                db.close();
                break;

                //删除

            case R.id.deletetButton:
                db = dbHelper.getWritableDatabase();
                db.beginTransaction();

                try{
                    db.execSQL("delete from person where name=?", new String[]{"黑夜"});
                    db.setTransactionSuccessful();
                } finally {
                    db.endTransaction();
                }

                Toast.makeText(MainActivity.this, "删除成功!", Toast.LENGTH_LONG).show();
                db.close();
                break;

                //更新
            case R.id.updateButton:
                db = dbHelper.getWritableDatabase();
                db.beginTransaction();
              try{
                  db.execSQL("update person set name=? where id=?", new String[]{"晓霞", "11"});
                  db.setTransactionSuccessful();
              } finally {
                  db.endTransaction();
              }

                Toast.makeText(MainActivity.this, "修改成功!", Toast.LENGTH_LONG).show();
                db.close();
                break;

                //查询
            case R.id.querytButton:
                db=dbHelper.getReadableDatabase();
                Cursor cursor=db.rawQuery("select * from person where name=?",new String[]{"黑夜"});
                ArrayList<Person> list=new ArrayList<>();

                if (cursor!=null){
                    cursor.moveToFirst();
                    while(cursor.moveToNext()){
                        String id=cursor.getString(cursor.getColumnIndex("id"));
                        String name=cursor.getString(cursor.getColumnIndex("name"));
                        list.add(new Person(id,name));
                    }
                }

                cursor.close();
                db.close();
                System.out.println(list.toString());
                Toast.makeText(MainActivity.this,list.toString(),Toast.LENGTH_LONG).show();
                break;
        }
    }
}

注意

在涉及到数据库的添加,修改,删除都要考虑到事务问题,可以参考下我的考虑流程:

//获取到数据库对象
try{
    db.beginTransaction();//开启事务
    try{db.endTransaction();
        db.execSQL("sql语句");
     	db.setTransactionSuccessful();//标记事务成功
    } finally{
        db.endTransaction();//提交事务
        db.close();//关闭数据库连接
    }
}
posted @ 2021-04-15 19:38  LilyFlower  阅读(694)  评论(0编辑  收藏  举报