SQLite数据库
来源:互联网 发布:吉他伴奏软件 编辑:程序博客网 时间:2024/04/28 08:50
一、main_activity.xml设计
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="insert" android:text="插入" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="select" android:text="查询" /> <ListView android:id="@+id/main_lv" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
二、dialog_layout.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" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="账号:" /> <EditText android:id="@+id/dialog_username" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="年龄:" /> <EditText android:id="@+id/dialog_age" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="性别:" /> <EditText android:id="@+id/dialog_sex" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="10dp"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="信息:" /> <EditText android:id="@+id/dialog_info" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" /> </LinearLayout></LinearLayout>
三、ListView的布局文件item_listView.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" android:orientation="horizontal"> <TextView android:id="@+id/id" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:padding="10dp" android:text="id" /> <TextView android:id="@+id/username" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:padding="10dp" android:text="username" /> <TextView android:id="@+id/age" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:padding="10dp" android:text="age" /> <TextView android:id="@+id/sex" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:padding="10dp" android:text="sex" /> <TextView android:id="@+id/info" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:padding="10dp" android:text="info" /></LinearLayout>
SQLiteOpenHelper类
package com.lwz.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Android轻量级数据库的使用 * 可以存放一些简单的数据,而且数据库的创建并不复杂,使用数据库对象直接创建表格就会产生数据库 * 它本质上其实就是文件储存,就是存放和读取的格式是数据库的形式 * 它保存的数据库文件在/data/data/<packagename>/databases 文件夹中 */public class MySqliteOpenHelper extends SQLiteOpenHelper { //构造方法 //第一个参数是上下文的意思 //第二个参数是数据库的名称 //第三个参数是游标工厂,一般使用null就可以 //第四个参数是版本号 public MySqliteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //数据库没有创建才回调这个方法 //用于数据库的表的创建 @Override public void onCreate(SQLiteDatabase db) { //创建数据库的一个使用的表 db.execSQL(SQlite.CREATE_TABLE); } //版本变化时回调的方法,要求新版本大于旧版本呢! @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //删除数据库的表,再创建数据库的表 db.execSQL(SQlite.DELETE_TABLE); onCreate(db); } //定义一个数据库的基本信息,包括一些基本的使用语句 static class SQlite { public static final String DB_NAME = "Test.db";//数据库名称 public static final String TABLE_NAME = "userInfo";//要操作的表的名称 //表格里面的数据 public static final String ID = "_id";//用户的ID public static final String USER_USERNAME = "username";//用户的姓名 public static final String USER_AGE = "age";//用户的年龄 public static final String USER_SEX = "sex";//用户的性别 public static final String USER_INFO = "info";//用户的其他信息 //创建表格使用的SQL语句 public static final String CREATE_TABLE = "create table " + TABLE_NAME + " (" + ID + " integer primary key autoincrement," + USER_USERNAME + " text not null," + USER_AGE + " integer," + USER_SEX + " varchar(1)," + USER_INFO + " text" + ")"; //删除表格使用的语句 public static final String DELETE_TABLE = "drop table if exists " + TABLE_NAME; }}
MainActivity.java文件设计
package com.lwz.sqlite;import android.content.ContentValues;import android.content.DialogInterface;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;/** * Android数据库的使用 * 使用ListView显示数据 */public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener { //定义ListView布局 ListView listView; //存放数据的集合 List<User> list = new ArrayList<>(); //定义一个数据库的对象 SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.main_lv); //实例化数据库对象 //要通过SQLiteHelper对象,这里使用的是自己定义的类 MySqliteOpenHelper helper = new MySqliteOpenHelper(this, MySqliteOpenHelper.SQlite.DB_NAME, null, 1); //获得数据库对象helper.get... //可读,并且可写---的数据库: 磁盘满的情况,写不进去,不写了,一般情况使用这个 db = helper.getReadableDatabase(); /* //可读,并且可写---的数据库:磁盘满的情况,写不进去。报错,崩溃了 db = helper.getReadableDatabase();*/ //给ListView设置适配器 listView.setAdapter(adapter); //给ListView设置监听事件 listView.setOnItemClickListener(this); listView.setOnItemLongClickListener(this); } /** * 插入数据的方法 */ public void insert(View v) { //1 插入 //ContentValues是以一种键值对的形式存储数据的 ContentValues values = new ContentValues(); values.put(MySqliteOpenHelper.SQlite.USER_USERNAME, "张三"); values.put(MySqliteOpenHelper.SQlite.USER_AGE, 58); values.put(MySqliteOpenHelper.SQlite.USER_SEX, "男"); values.put(MySqliteOpenHelper.SQlite.USER_INFO, "IT工程师---张工"); db.insert(MySqliteOpenHelper.SQlite.TABLE_NAME, null, values); //插入后进行一次查询 select(); } /** * 查询数据 */ public void select(View v) { select(); } /** * 查询数据库的具体实现 */ private void select() { //先清除页面上的数据 list.clear(); //再加载数据库的数据 //这里查询所有的数据,只需要一个表名就可以了,后面的条件可以不写,获得的是一个结果集 Cursor cursor = db.query(MySqliteOpenHelper.SQlite.TABLE_NAME, null, null, null, null, null, null); //结果集指向的表头前面.moveToNext()来指向下一个结果 while (cursor.moveToNext()) { //获取结果集里面的数据 //cursor.getColumnIndex()获取列名所在的列号 User user = new User(); //这里通过列号来获取数据 user.id = cursor.getInt(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.ID)); user.age = cursor.getInt(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_AGE)); user.username = cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_USERNAME)); user.info = cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_INFO)); user.sex = cursor.getString(cursor.getColumnIndex(MySqliteOpenHelper.SQlite.USER_SEX)); //把找到的数据添加到List集合中 list.add(user); } //刷新适配器 adapter.notifyDataSetChanged(); } /** * 适配器的创建,为了显示ListView */ BaseAdapter adapter = new BaseAdapter() { @Override public int getCount() { return list.size(); } @Override public User getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //定义ViewHolder对象 ViewHolder holder; if (convertView == null) { convertView = View.inflate(MainActivity.this, R.layout.item_listview, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //往控件上放置数据 User user = list.get(position); holder.age.setText(user.age + ""); //如果不是String类型的数据会报错ResourceNotFound holder.info.setText(user.info + ""); holder.username.setText(user.username + ""); holder.sex.setText(user.sex + ""); holder.id.setText(user.id + ""); //返回视图 return convertView; } //创建一个ViewHolder class ViewHolder { //定义控件对象 TextView id, info, sex, username, age; //通过构造方法传入控件存在的View的对象 ViewHolder(View convertView) { //实例化控件对象 id = (TextView) convertView.findViewById(R.id.id); info = (TextView) convertView.findViewById(R.id.info); sex = (TextView) convertView.findViewById(R.id.sex); username = (TextView) convertView.findViewById(R.id.username); age = (TextView) convertView.findViewById(R.id.age); } } }; //点击ListView里面的条目时触发的方法,这里修改数据 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //要修改的属性的用户对象 final User user = list.get(position); // 创建一个布局的VIew对象 View dialogView = View.inflate(this, R.layout.dailog_layout, null); //定义布局内的控件 final EditText et_name = (EditText) dialogView.findViewById(R.id.dialog_username); final EditText et_age = (EditText) dialogView.findViewById(R.id.dialog_age); final EditText et_sex = (EditText) dialogView.findViewById(R.id.dialog_sex); final EditText et_info = (EditText) dialogView.findViewById(R.id.dialog_info); //给布局内添加选择的条目的信息 et_name.setText(user.username + ""); et_age.setText(user.age + ""); et_sex.setText(user.sex + ""); et_info.setText(user.info + ""); // 创建对话框对象 new AlertDialog.Builder(this). // 设置标题 setTitle("请输入要修改信息"). // 添加输入的文本框 setView(dialogView). // 添加确定按钮 setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //或用户输入的信息并保存到数据库中 //修改使用的是ContentValues键值对put的方法 ContentValues values = new ContentValues(); user.username = et_name.getText().toString(); try { user.age = Integer.parseInt(et_age.getText().toString()); } catch (Exception e) { Toast.makeText(MainActivity.this, "你输入的年龄格式不正确!", Toast.LENGTH_SHORT).show(); } //数据的修改 user.sex = et_sex.getText().toString(); user.info = et_info.getText().toString(); values.put(MySqliteOpenHelper.SQlite.USER_USERNAME, user.username); values.put(MySqliteOpenHelper.SQlite.USER_AGE, user.age); values.put(MySqliteOpenHelper.SQlite.USER_SEX, user.sex); db.update(MySqliteOpenHelper.SQlite.TABLE_NAME, values, MySqliteOpenHelper.SQlite.ID + "=?", new String[]{user.id + ""}); adapter.notifyDataSetChanged(); } }). // 添加取消按钮 setNegativeButton("取消", null). // 产生并显示 create().show(); } //长按ListView里面的条目时触发的方法,这里删除数据 @Override public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { //弹出一个对话框,询问是否删除数据 new AlertDialog.Builder(this). setTitle("警告"). setMessage("是否确定删除信息!"). setNegativeButton("取消", null) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //点击确定后,删除信息 //获取点中的条目的用户的ID值 int id = list.get(position).id; int rows = db.delete(MySqliteOpenHelper.SQlite.TABLE_NAME, MySqliteOpenHelper.SQlite.ID + " = ?", new String[]{id + ""}); //在集合中也删除这条数据 if (rows > 0) { list.remove(position); } //刷新适配器 adapter.notifyDataSetChanged(); } }).show(); return true; } //定义一个内部类方便数据的集体存放 class User { int id; String username; String info; int age; String sex; } //页面关闭时,关闭数据库的连接 @Override protected void onDestroy() { super.onDestroy(); db.close(); }}
0 0
- SQLite---SQLite数据库简介
- Sqlite 数据库
- SQLite数据库
- SQlite 数据库
- SQLite数据库
- SQLite数据库
- SQLite数据库
- SQLite数据库
- SQLite数据库
- SQlite数据库
- sqlite数据库
- SQLite 数据库
- SQLite数据库
- SQLite数据库
- SQLite数据库
- SQLITE数据库
- SQLite数据库
- sqlite数据库
- Spring框架概念
- 2016.11.10
- pokemon shuffle 3
- HTML5 拖放事件 案例
- 文章标题
- SQLite数据库
- iOS 禁用UIWebView 加载 网页的长按事件
- Tyvj P1391 走廊泼水节
- spring MVC中的controller是单例模式,但是是多线程,各个线程之间不影响!
- hdoj-【1072 Nightmare】
- 的用途及实际应用
- 自学android的心酸历程(2016年11月10日第一篇)
- Oracle数据库权限的传递
- IOS开发 - UIWebView(用法全面介绍,含最全的JS交互)