Android SQLite的连接和基本操作
来源:互联网 发布:阿里云备案客服电话 编辑:程序博客网 时间:2024/05/24 02:37
欢迎转载,转载请标明出处,谢谢
每一个Android手机都自带一个sqlite数据库,用来保存来自网络的数据及手机上的数据,但要怎么连接,怎么进行增删改查呢?这就是本文的重点。
我将结合实例代码进行介绍,其中代码注释也算详细:
类:
1:用户类:UserInfor
用户的基本信息:id,username,pwd,age
等
2:数据库类:SQLiteUtil
继承SQLiteOpenHelper
,完后对数据库额建立和表的创建
3:数据库操作类:UserDao
类中实例化SQLiteUtil
,完成对数据库的各种操作
4:调用类(测试activity): 实例化UserDao
,完成对数据库具体的各种操作
1:创建类继承SQLiteOpenHelper
连接数据库是靠系统提供的SQLiteOpenHelper
这个类,用户创建类并继承SQLiteOpenHelper
实现onCreate()
和onUpgrade()
方法。
import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by Administrator on 2016/4/27. */public class SQLiteUtil extends SQLiteOpenHelper { //定义数据库的各种常量,如数据库名,表名,表的字段 private static final String DBNAME = "user.db"; private static final String TABLE_NAME = "user_info"; private static final String TABLE_INFO_COLUM_ID = "_id";//主键前面一般都带下划线,也可不带 private static final String TABLE_INFO_COLUM_NAME = "name"; private static final String TABLE_INFO_COLUM_PWD = "pwd"; private static final String TABLE_INFO_COLUM_AGE = "age"; private static final String TABLE_INFO_COLUM_IMG = "imgUrl"; //本类的构造方法 public SQLiteUtil(Context context, int version) { /** 创建构造方法时,默认是以下构造方式,可根据个人需要修改 public SQLiteUtil(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } */ //上面定义了数据库名,故可直接写死DBNAME super(context, DBNAME, null, version); } @Override public void onCreate(SQLiteDatabase db) { //创建表,使用StringBuffer代替String减少内存消耗 StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("CREATE TABLE IF NOT EXISTS "); stringBuffer.append(TABLE_NAME + "("); stringBuffer.append(TABLE_INFO_COLUM_ID+" integer primary key autoincrement ,"); stringBuffer.append(TABLE_INFO_COLUM_NAME+" varchar(10),"); stringBuffer.append(TABLE_INFO_COLUM_PWD+" varchar(10),"); stringBuffer.append(TABLE_INFO_COLUM_AGE+" varchar(10),"); stringBuffer.append(TABLE_INFO_COLUM_IMG+" varchar(10))"); //执行操作 db.execSQL(stringBuffer.toString()); } //重写的onUpgrade方法。当数据库结构修改,优化后,需要更新版本时,执行该方法,具体就是将旧的数据库删除,重写创建数据库。以达到更新的目的。方法中的oldVersion和newVersion分别对应新旧版本,可以用户自己定义,系统会自动回调该方法并判断版本是否发生变化 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "drop table if exists " +TABLE_NAME; db.execSQL(sql); onCreate(db); }}
2:实现对数据库的操作方法
该类是对数据库操作的具体实现类,类中的方法可在任意地方调用,以达到对数据库的操作
import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.inext.test.sqlitetest.dbutil.SQLiteUtil;import com.inext.test.sqlitetest.entry.UserInfo;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2016/4/27. */public class UserDao { //定义之前刚完成的SQLiteUtil private SQLiteUtil sqLiteUtil; //该类构造方法 public UserDao(Context context){ //实例SQLiteUtil ,并将参数传入,1为版本号,可自定义 sqLiteUtil = new SQLiteUtil(context,1); } /** * 获取数据库有两种:getWritableDatabase()和getWritableDatabase(),均返回SQLiteDatabase * 前者用来对数据库的插入,修改等有改变值得操作,后者用来查询等无改变值的操作 * 数据库操作:增删改查 * 有两种方式:系统自己封装好的各种方法,如rawQuery(),insert(),update(),delete()等 * 也可以自己写sql语句,并通过execSQL()执行语句 */ //查询方法 public List search(){ //创建list用来存放对象 List list = new ArrayList(); //通过getReadableDatabase()获取可读的数据库 SQLiteDatabase db = sqLiteUtil.getReadableDatabase(); //执行语句,获取返回类型为Cursor 的结果集 Cursor cursor = db.rawQuery("select * from user_info ", null); UserInfo userInfo = null; //循环得到结果集里的对象 while (cursor.moveToNext()){ int id = cursor.getInt(cursor.getColumnIndex("_id")); String username = cursor.getString(cursor.getColumnIndex("name")); String pwd = cursor.getString(cursor.getColumnIndex("pwd")); String age = cursor.getString(cursor.getColumnIndex("age")); String imgUrl = cursor.getString(cursor.getColumnIndex("imgUrl")); userInfo = new UserInfo(); userInfo.setId(id); userInfo.setUsername(username); userInfo.setPwd(pwd); userInfo.setAge(age); userInfo.setImgUrl(imgUrl); list.add(userInfo); } cursor.close(); db.close(); return list; } //添加 public void insert(UserInfo userInfo){ //通过getWritableDatabase()获取可写的数据库 SQLiteDatabase db = sqLiteUtil.getWritableDatabase(); //ContentValues 用来存放数据,类似Map ContentValues contentValues = new ContentValues(); contentValues.put("name",userInfo.getUsername()); contentValues.put("pwd",userInfo.getPwd()); contentValues.put("age", userInfo.getAge()); contentValues.put("imgUrl",userInfo.getImgUrl()); //执行插入 db.insert("user_info", null, contentValues); db.close(); } //删除 public void del(int id){ //通过getWritableDatabase()获取可写的数据库 SQLiteDatabase db = sqLiteUtil.getWritableDatabase(); db.delete("user_info", "_id = ?", new String[]{String.valueOf(id)}); db.close(); } //更新 public void update(UserInfo userInfo){ //通过getWritableDatabase()获取可写的数据库 SQLiteDatabase db = sqLiteUtil.getWritableDatabase(); String sql = "update user_info set name = ? where _id = ?"; db.execSQL(sql,new Object[]{userInfo.getUsername(),userInfo.getId()}); db.close(); }}
3:调用数据库的操作方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button button1,button2,button3,button4; private TextView textView1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init(){ button1 = (Button)findViewById(R.id.search); button2 = (Button)findViewById(R.id.insert); button3 = (Button)findViewById(R.id.update); button4 = (Button)findViewById(R.id.del); textView1 = (TextView)findViewById(R.id.show); button1.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); button4.setOnClickListener(this); } @Override public void onClick(View v) { UserDao userDao = new UserDao(getBaseContext()); int id = v.getId(); switch (id){ case R.id.search: Log.d("----","这里是查询"); List list = userDao.search(); if (list.size()==0){ return; } UserInfo user = null; StringBuffer stringBuffer = null; StringBuffer show = new StringBuffer(); for (int i = 0;i<list.size();i++){ user = (UserInfo) list.get(i); stringBuffer = new StringBuffer(); stringBuffer.append("ID:"+user.getId()); stringBuffer.append("用户名:"+user.getUsername()); stringBuffer.append("密码:"+user.getPwd()); stringBuffer.append("年龄:"+user.getAge()); stringBuffer.append("图片地址:" + user.getImgUrl()+"\n"); show.append(stringBuffer); } textView1.setText(show.toString()); break; case R.id.insert: Log.d("----","这里是插入"); UserInfo userInfo = new UserInfo(); userInfo.setUsername("肖盛"); userInfo.setPwd("admin"); userInfo.setAge("20"); userInfo.setImgUrl("图片地址"); userDao.insert(userInfo); break; case R.id.update: Log.d("----","这里是更新"); UserInfo userInfo1 = new UserInfo(); userInfo1.setId(6);//设置id userInfo1.setUsername("石国国"); userInfo1.setPwd("123"); userInfo1.setAge("21"); userInfo1.setImgUrl("另一个地址"); userDao.update(userInfo1);//更新id为6的数据 break; case R.id.del: Log.d("----","这里是删除"); userDao.del(0);//删除一条id为0的数据 break; } }}
以上就是对Android数据库的基本操作。如有补充,会继续更新。
0 0
- Android SQLite的连接和基本操作
- Android的SQLite基本操作
- Android SQLite的基本操作
- Android 的 Sqlite基本操作
- Android 的 Sqlite基本操作
- Android如何连接和操作SQLite数据库
- android---sqlite基本操作
- Android SQLite基本操作
- android SQLite基本操作
- Android: Sqlite基本操作
- Android的SQLite数据库基本操作
- Sqlite的基本操作
- Sqlite的基本操作
- sqlite的基本操作
- SQLite的基本操作
- Android中SQLite基本操作
- Android sqlite 基本操作 详解
- Android 操作SQLite基本用法
- Compressed Sparse Column format(CSC)
- WAMP本地环境配置多站点虚拟目录教程(详细)
- java运行本地命令
- HTTP:Web基础
- 【小松教你手游开发】【unity实用技能】foreach为什么在unity不建议用
- Android SQLite的连接和基本操作
- java日志commons-logging/log4j/slf4j/logBack需要知道的几件事
- iOS的基础网络编程
- Java图片处理的类库:SimpleImage
- JQuery总结
- elasticsearch scripts of type [inline], operation [update] and lang [groovy] are disabled
- echo off
- Servlet
- Eclipse黑色风格全局界面