实现效果:
使用了SimpleCursorAdapter方便数据库和listview之间的数据传递。
MainActivity.java:
package com.henu.saveindatabase;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private ListView viewById;
private MyHelper myHelper;
private SimpleCursorAdapter adapter;
private Cursor cursor;
//SimpleCursorAdapter所需要的参数
String from[] = new String[]{"_id", "name", "age"};
int[] to = new int[]{R.id.tv_id, R.id.tv_name, R.id.tv_age};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myHelper = new MyHelper(this);
viewById = (ListView) findViewById(R.id.lv);
//进入程序时显示数据库中的数据
Show();
}
public void save(View v) {
//获得可读写数据库对象
SQLiteDatabase db = myHelper.getWritableDatabase();
ContentValues values = new ContentValues();
EditText et_name = (EditText) findViewById(R.id.et_name);
EditText et_age = (EditText) findViewById(R.id.et_age);
values.put("name", et_name.getText().toString().trim());
values.put("age", et_age.getText().toString());
long q = db.insert("information", "name", values);
Toast.makeText(this, "数据存入成功", Toast.LENGTH_SHORT).show();
//数据库发生变化时更新listview
cursor.requery();
adapter.notifyDataSetChanged();
db.close();
}
/*
当SQLite数据库中包含自增列时,会自动建立一个名为 sqlite_sequence 的表。
这个表包含两个列:name和seq。name记录自增列所在的表,seq记录当前序号(下一条记录的编号就是当前序号加1)。
如果想把某个自增列的序号归零,只需要修改 sqlite_sequence表就可以了。
*/
public void clear(View v) {
SQLiteDatabase db = myHelper.getWritableDatabase();
db.delete("information", null, null);
//使自增的_id归零
db.delete("sqlite_sequence", null, null);
Toast.makeText(this, "数据库清除成功", Toast.LENGTH_SHORT).show();
cursor.requery();
adapter.notifyDataSetChanged();
db.close();
}
//显示数据
public void Show() {
SQLiteDatabase db = myHelper.getWritableDatabase();
cursor = db.query("information", null, null, null, null, null, null);
adapter = new SimpleCursorAdapter(this, R.layout.list_item, cursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
viewById.setAdapter(adapter);
db.close();
}
}
MyHelper.java:
package com.henu.saveindatabase;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) {
super(context, "content.db", null, 1);
}
//数据库第一次创建的时候执行
@Override
public void onCreate(SQLiteDatabase db) {
//注意自增的主键名字必须是:_id
db.execSQL("CREATE TABLE information(_id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20),age varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:ignore="MissingConstraints">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
tools:ignore="MissingConstraints">
<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名:"
android:textSize="35dp"></TextView>
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入姓名"
android:textSize="25dp"></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
tools:ignore="MissingConstraints">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年龄:"
android:textSize="35dp"></TextView>
<EditText
android:id="@+id/et_age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入年龄"
android:textSize="25dp"></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="存入"
android:onClick="save"
android:textSize="25dp"></Button>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="清空数据库"
android:onClick="clear"
android:textSize="25dp"></Button>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="ID"
android:textSize="35dp"></TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="姓名"
android:textSize="35dp"></TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="年龄"
android:textSize="35dp"></TextView>
</LinearLayout>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
tools:ignore="MissingConstraints"></ListView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_id"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="35dp"
android:text="list_item"
android:gravity="center"
android:layout_weight="1"></TextView>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="35dp"
android:text="list_item"
android:gravity="center"
android:layout_weight="1"></TextView>
<TextView
android:id="@+id/tv_age"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="35dp"
android:text="list_item"
android:gravity="center"
android:layout_weight="1"></TextView>
</LinearLayout>
需要注意的一点是使用SimpleCursorAdapter适配器必须要有个自增的主键,而且名字必须是“_id”,名字必须是“_id”,名字必须是“_id”
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)