Android一般采用sqlite数据库作为数据存储方案。
通常的数据库有关系型数据如:ms
ql
,mysql,oracle等,非关系型nosql数据库
如mongodb,redis
android作为手机端的手机 *** 作系统,是无法直接 *** 作大型的关系型或是no
sql类型的数据库的。
从你的应用描述中景点等信息都可以选择存储在sqlite中。
但是这些信息还是建议你存储到服务器上,以文件的形式存储。
还有一种方式是在服务器中使用任何的关系型和非关系型数据库存储你的所有数据,但是你的android应用需要通过api去访问你的景点信息。
SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite
Android 开发中使用 SQLite 数据库
Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。
创建数据库
Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
android 中SQliteDatabase数据库使用SQLiteOpenHelper辅助类来创建SQLite数据库视图,如下代码:
create view 表名 as 定义
SQLiteOpenHelper类是一个辅助类,用于创建或打开数据库。
该类的使用方法一般是自定义一个子类,继承自SQLiteOpenHelper,并覆写其中最关键的两个方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。当新建一个数据库时会调用前者,一般在里面做一些创建表或视图的 *** 作。数据库版本升级时则会调用后者。
定义好子类后(假如叫SqlHelper),只要调用SqlHelper对象的getReadableDatabase()方法或getWritableDatabase()方法即可返回一个SQLiteDatabase对象。如果是第一次调用,则会创建数据库。随后可使用SQLiteDatabase对象的方法进行数据 *** 作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。
Android数据库 *** 作类实例
实体类:UserInfojava
package mydb;
import javaioSerializable;
import androidgraphicsdrawableDrawable;
public class UserInfo implements Serializable {
public static final String ID = "_id";
public static final String USERID = "userId";
public static final String TOKEN = "token";
public static final String TOKENSECRET = "tokenSecret";
public static final String USERNAME = "userName";
public static final String USERICON = "userIcon";
private String id;
private String userId; // 用户id
private String token;
private String tokenSecret;
private String userName;
private Drawable userIcon;
//getter and setter省略
}
SqliteHelper类:
package mydb;
import androidcontentContext;
import androiddatabasesqliteSQLiteDatabase;
import androiddatabasesqliteSQLiteDatabaseCursorFactory;
import androiddatabasesqliteSQLiteOpenHelper;
import androidutilLog;
public class SqliteHelper extends SQLiteOpenHelper{
//用来保存UserID、Access Token、Access Secret的表名
public static final String TB_NAME= "users";
public SqliteHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
//创建表
@Override
public void onCreate(SQLiteDatabase db) {
dbexecSQL( "CREATE TABLE IF NOT EXISTS "+
TB_NAME+ "("+
UserInfo ID+ " integer primary key,"+
UserInfo USERID+ " varchar,"+
UserInfo TOKEN+ " varchar,"+
UserInfo TOKENSECRET+ " varchar,"+
UserInfo USERNAME+ " varchar,"+
UserInfo USERICON+ " blob"+
")"
);
Log e("Database" ,"onCreate" );
}
//更新表
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
dbexecSQL( "DROP TABLE IF EXISTS " + TB_NAME );
onCreate(db);
Log e("Database" ,"onUpgrade" );
}
//更新列
public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){
try{
dbexecSQL( "ALTER TABLE " +
TB_NAME + " CHANGE " +
oldColumn + " "+ newColumn +
" " + typeColumn
);
} catch(Exception e){
eprintStackTrace();
}
}
}
CRUD类DataHelper:
package mydb;
import javaioByteArrayInputStream;
import javaioByteArrayOutputStream;
import javautilArrayList;
import javautilList;
import androidcontentContentValues;
import androidcontentContext;
import androiddatabaseCursor;
import androiddatabasesqliteSQLiteDatabase;
import androidgraphicsBitmap;
import androidgraphicsdrawableDrawable;
import androidutilLog;
public class DataHelper {
// 数据库名称
private static String DB_NAME = "weibodb";
// 数据库版本
private static int DB_VERSION = 2;
private SQLiteDatabase db;
private SqliteHelper dbHelper;
public DataHelper(Context context) {
dbHelper = new SqliteHelper(context, DB_NAME, null, DB_VERSION );
db = dbHelpergetWritableDatabase();
}
public void Close() {
dbclose();
dbHelperclose();
}
// 获取users表中的UserID、Access Token、Access Secret的记录
public List<UserInfo> GetUserList(Boolean isSimple) {
List<UserInfo> userList = new ArrayList<UserInfo>();
Cursor cursor = dbquery(SqliteHelper TB_NAME, null, null , null, null,
null, UserInfo ID + " DESC");
cursormoveToFirst();
while (!cursorisAfterLast() && (cursorgetString(1) != null )) {
UserInfo user = new UserInfo();
usersetId(cursorgetString(0));
usersetUserId(cursorgetString(1));
usersetToken(cursorgetString(2));
usersetTokenSecret(cursorgetString(3));
if (!isSimple) {
usersetUserName(cursorgetString(4));
ByteArrayInputStream stream = new ByteArrayInputStream(cursorgetBlob(5));
Drawable icon = DrawablecreateFromStream(stream, "image");
usersetUserIcon(icon);
}
userListadd(user);
cursormoveToNext();
}
cursorclose();
return userList;
}
// 判断users表中的是否包含某个UserID的记录
public Boolean HaveUserInfo(String UserId) {
Boolean b = false;
Cursor cursor = dbquery(SqliteHelper TB_NAME, null, UserInfoUSERID
+ "=", new String[]{UserId}, null, null, null );
b = cursormoveToFirst();
Log e("HaveUserInfo", btoString());
cursorclose();
return b;
}
// 更新users表的记录,根据UserId更新用户昵称和用户图标
public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId) {
ContentValues values = new ContentValues();
valuesput(UserInfo USERNAME, userName);
// BLOB类型
final ByteArrayOutputStream os = new ByteArrayOutputStream();
// 将Bitmap压缩成PNG编码,质量为100%存储
userIconcompress(BitmapCompressFormat PNG, 100, os);
// 构造SQLite的Content对象,这里也可以使用raw
valuesput(UserInfo USERICON, ostoByteArray());
int id = dbupdate(SqliteHelper TB_NAME, values, UserInfoUSERID + "=" , new String[]{UserId});
Log e("UpdateUserInfo2", id + "");
return id;
}
// 更新users表的记录
public int UpdateUserInfo(UserInfo user) {
ContentValues values = new ContentValues();
valuesput(UserInfo USERID, usergetUserId());
valuesput(UserInfo TOKEN, usergetToken());
valuesput(UserInfo TOKENSECRET, usergetTokenSecret());
int id = dbupdate(SqliteHelper TB_NAME, values, UserInfoUSERID + "="
+ usergetUserId(), null);
Log e("UpdateUserInfo", id + "");
return id;
}
// 添加users表的记录
public Long SaveUserInfo(UserInfo user) {
ContentValues values = new ContentValues();
valuesput(UserInfo USERID, usergetUserId());
valuesput(UserInfo TOKEN, usergetToken());
valuesput(UserInfo TOKENSECRET, usergetTokenSecret());
Long uid = dbinsert(SqliteHelper TB_NAME, UserInfoID, values);
Log e("SaveUserInfo", uid + "");
return uid;
}
// 添加users表的记录
public Long SaveUserInfo(UserInfo user, byte[] icon) {
ContentValues values = new ContentValues();
valuesput(UserInfo USERID, usergetUserId());
valuesput(UserInfo USERNAME, usergetUserName());
valuesput(UserInfo TOKEN, usergetToken());
valuesput(UserInfo TOKENSECRET, usergetTokenSecret());
if(icon!= null){
valuesput(UserInfo USERICON, icon);
}
Long uid = dbinsert(SqliteHelper TB_NAME, UserInfoID, values);
Log e("SaveUserInfo", uid + "");
return uid;
}
// 删除users表的记录
public int DelUserInfo(String UserId) {
int id = dbdelete(SqliteHelper TB_NAME,
UserInfo USERID + "=", new String[]{UserId});
Log e("DelUserInfo", id + "");
return id;
}
public static UserInfo getUserByName(String userName,List<UserInfo> userList){
UserInfo userInfo = null;
int size = userListsize();
for( int i=0;i<size;i++){
if(userNameequals(userListget(i)getUserName())){
userInfo = userListget(i);
break;
}
}
return userInfo;
}
}
android系统自带了sqlite数据库,但这是一个小型桌面数据库,不太适合做服务器数据库。若是开发一个客户机/服务器系统,数据库是安装在服务器端的,任何一种数据库都是可以的。
如果是手机端的话 只能是SQLite数据库 就看你的数据量大不大了 如果数据量非常大的话 那肯定是要存在 服务器端了 毕竟是手机开发SQLite 是个轻量级的数据库 不是PC开发 内存是有限制的。。希望可以帮助到楼主噢 ~哇咔咔!!
以上就是关于Android一般采用什么数据库全部的内容,包括:Android一般采用什么数据库、android上如何使用sqlite数据库、如何在android中使用sqlite数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)