SQLite数据库简介:SQLite是一种轻量级数据库,是安卓的内置数据库,它运算快,占内存小,只占几百KB的内存。比其他的数据库运行简单得多,而且无需设置用户名和密码。适用于存储数据量大,结构性复杂的数据,在这些情况下,相比较用SharedPerference数据存储,用SQLite数据库存储要便捷的多。
下面来学习一下SQLite数据库吧:
SQLite数据库由好多小环节组成,例如数据库的创建,升级数据库,添加数据,更改数据,删除数据,读取数据等。
1.数据库的创建:
数据库创建之前先来学习一下数据库的数据类型吧
text 文本型(类似字符串的都可以用这种类型)
integer 整型
real浮点型
建表语句示例:
“create table stu( //用的是括号
id integer primary key autoincrement not null,” + //逗号不要忘记
“name text,” +
“score real
)”;
建表语句下面代码中会有示例,但切记格式和内容不能写错,一方面会报错运行不了,另一方面错误还不好找。
primary key主键
autoincrement 自增长
not null 不为空
1.数据库的创建
public class ass extends SQLiteOpenHelper { //建一个数据库类,继承SQLiteOpenHelper抽象类
private Context context;
public static final String CREATE_BOOK="create table book("+"id integer primary key autoincrement," +
"name text," + //创一个数据库表
"ban text," +
"nian integer4)";
public ass(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context=context; //通过构造方法引入Activity的类名,用于下面的Toast的提示
}
@Override
public void onCreate(SQLiteDatabase db) { //onCreate方法只在创建时会调用一次,且仅此一次,除非更
//新数据库时会再次调用
db.execSQL(CREATE_BOOK); //在onCreate方法中将数据列表创建好
Toast.makeText(context,"dsfsdsdgsg",Toast.LENGTH_LONG).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// db.execSQL("drop table if exists book"); //在这里我先把这两句注释掉,为了和创建数据库区分
// onCreate(db); //当更新数据库时要把onCreate中的db.execSQL注释掉,
} //此方法升用于数据库升级更新}
public class MainActivity extends AppCompatActivity {
private ass as;
private Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
as = new ass(this, "de", null, 1);//版本号传入2时,表示升级才可调用更新,以此类推,每更新一次自加1
bt = findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
as.getWritableDatbase();//创建数据库
}
});
}
}
<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="com.example.zhang.sqlite.MainActivity">
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="100dp" />
LinearLayout>
2.实现数据库的增删改查
public class jichu extends SQLiteOpenHelper {//数据库创建这里上文有就不多加介绍了
private Context context;
String as="create table aqws("+"name text," +
"namew text)";
public jichu(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
this.context=context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(as);
Toast.makeText(context,"dfssgsgsg",Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVeq
sion) {
}
}
public class Main3Activity extends AppCompatActivity {
private EditText e1;
private EditText e2;
private EditText e3;
private jichu ji;
private Button b1;
private Button b2;
private Button b3;
private Button b4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
BinID();
ji=new jichu(Main3Activity.this,"aqws",null,1);//调用构造方法向数据库传参
ji.getWritableDatabase(); //创建数据库
//从这开始实现数据增删改查,每个按钮,实现一个功能
b1.setOnClickListener(new View.OnClickListener() {//****添加数据***
@Override
public void onClick(View v) {
SQLiteDatabase as=ji.getWritableDatabase();//在这些功能中都要实现SQLiteDatabase对象
ContentValues values=new ContentValues();
//这里使用的ContentValues,也是可以用Map的,而且Map能用的数据类型更多,那为何还要用ContentValues呢,
//其实不用Map是为了防止Map向数据库中随意添加各种类型的数据。
values.put("name",e1.getText().toString());//利用键值向对应项中添加数据
values.put("namew",e2.getText().toString());
as.insert("aqws",null,values); //将数据插入列表中
//第一个参数为列表名,第三个是ContentValues的对象
}
});
b2.setOnClickListener(new View.OnClickListener() {//*****删除数据***
@Override
public void onClick(View v) {
SQLiteDatabase as=ji.getWritableDatabase();
as.delete("aqws","name=?",new String[]{e1.getText().toString()});
//第一个参数是列表名,第二个参数是列表元素,可以用and添加多个来进行筛选,例如可写为"name=? and id>?"
//第三个是在new String[]{}的花括号里添加第二参数对应的值,添加顺序要相同
}
});
b3.setOnClickListener(new View.OnClickListener() {//******更改数据*********
@Override
public void onClick(View v) {
SQLiteDatabase as=ji.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("name",e2.getText().toString());//获取用来替换的数据
// ("name"是数据库字段名
as.update("aqws",values,"name=?",new String[]{e1.getText().toString()});
// 第一个参数是列表名,第二个参数是ContentValues对象,第三个参数是列表元素,即字段名,与删除的方法一样可以
//用and添加多个来进行筛选,例如可写为"name=? and id>?"
//第四个参数是在new String[]{}的花括号里添加第三参数对应的值,注意添加顺序要相同
}
});
b4.setOnClickListener(new View.OnClickListener() {//*****查询数据************
@Override
public void onClick(View v) {
SQLiteDatabase db=ji.getWritableDatabase();
Cursor cursor=db.query("aqws",null,null,null,null,null,null);//用SQLiteDatabase对象调用游标
if(cursor.moveToFirst()){ //用游标来浏览数据库里的数据
do{
String n=cursor.getString(cursor.getColumnIndex("name"));
e3.setText(n);//这里我是用setText来显示到EditText上,但这里我只能显示最后一个元
// 素*****????****但也可以通过log或Toast来解决
Toast.makeText(Main3Activity.this,"dfssgsgsg"+n,Toast.LENGTH_SHORT).show();//用Toast来显示
Log.e("hh111q", "onClick: "+n );//用log来显示
}while (cursor.moveToNext());//当游标还可以指向下一个时,执行循环
}cursor.close(); //最后不要忘记关掉游标
}
});
}
private void BinID() { //绑定ID
e1=findViewById(R.id.et1);
e2=findViewById(R.id.et2);
b1=findViewById(R.id.b1);
b2=findViewById(R.id.b2);
b3=findViewById(R.id.b3);
e3=findViewById(R.id.et3);
b4=findViewById(R.id.b4);
}
}
<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="com.example.zhang.sqlite.Main3Activity">
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="60dp" />
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="60dp" />
<EditText
android:id="@+id/et3"
android:layout_width="match_parent"
android:layout_height="60dp" />
<Button
android:textSize="25sp"
android:text="增"
android:id="@+id/b1"
android:layout_width="match_parent"
android:layout_height="60dp" />
<Button
android:textSize="25sp"
android:text="删"
android:id="@+id/b2"
android:layout_width="match_parent"
android:layout_height="60dp" />
<Button
android:id="@+id/b3"
android:textSize="25sp"
android:text="改"
android:layout_width="match_parent"
android:layout_height="60dp" />
<Button
android:id="@+id/b4"
android:textSize="25sp"
android:text="查"
android:layout_width="match_parent"
android:layout_height="60dp" />
LinearLayout>