当前位置:首页 » 安卓系统 » androidsqlite类

androidsqlite类

发布时间: 2022-08-15 06:01:01

⑴ 如何在android中使用sqlite数据库

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上如何使用sqlite数据库

1.打开数据库Context类的openDatabase可以打开一个已经存在的数据库,如果数据库不存在,将会抛出FileNotFoundException异常。可以通过Context类的createDatabase函数建立一个新的数据库。通过调用SQLiteDatabase 的execSQL方法,执行一条SQL语句建立一个新的数据表。代码如下:public DBHelper(Context ctx) {try {//打开已经存在的数据库 db = ctx.openDatabase(DATABASE_NAME, null); } catch (FileNotFoundException e) {try {//建立新的数据库 db = ctx.createDatabase(DATABASE_NAME, DATABASE_VERSION, 0, null); //建立数据表 db.execSQL(DATABASE_CREATE); } catch (FileNotFoundException e1) {db = null;}}}2.获取表中的数据建立一个游标类Cursor 通过SQLiteDatabase 的query方法查询一个表格。有了Cursor就可以遍历所有的记录了。代码如下:public List<row> fetchAllRows() { ArrayList<row> ret = new ArrayList<row>();try {Cursor c =db.query(DATABASE_TABLE, new String[] { "rowid", "title", "body"}, null, null, null, null, null); int numRows = c.count(); c.first();for (int i = 0; i < numRows; ++i) { Row row = new Row(); row.rowId = c.getLong(0); row.title = c.getString(1); row.body = c.getString(2); ret.add(row); c.next();}} catch (SQLException e) { Log.e("booga", e.toString());}return ret;}</row></row></row>3.添加新的记录构造一个ContentValues类,通过调用put方法,可以设置一条记录的属性。通过调用SQLiteDatabase的insert方法添加一条新的记录。代码如下:public void createRow(String title, String body) { ContentValues initialValues = new ContentValues(); initialValues.put("title", title); initialValues.put("body", body); db.insert(DATABASE_TABLE, null, initialValues); }4.删除记录直接调用SQLiteDatabase的delete方法,第二个参数是一个SQL条件表达式。代码如下:public void deleteRow(String str) {

⑶ android怎么连接sqlite数据库

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开发中如何在sqlite中创建一个的一个表和该表对应的方法类,目前最头疼的就是图标的图片存取了

下面这个文件创建了Book.db,创建了表book,另外提供两个简单的方法,里面有很多不完善的地方,没有一一写出来。时间有限,希望能帮助到你。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import java.io.ByteArrayOutputStream;

import static com.ume.myapplication.Columns.BOOK_AUTHOR;

/**
* _ Created by AlphaGo on 2017/3/11. just simple sample
*/

public class BookDbHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "Book.db";
public static final String TABLE_BOOK = "Book";
public static final int DB_VERSION = 1;

private Context mContext;

public BookDbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
mContext = context;
}

@Override
public void onCreate(SQLiteDatabase db) {

createBookmarkTbl(db);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

private void createBookmarkTbl(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_BOOK + "("
+ Columns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ BOOK_AUTHOR + " TEXT,"
+ Columns.BOOK_INTRODUCTION + " TEXT,"
+ Columns.BOOK_LABEL + " TEXT ,"
+ Columns.BOOK_NAME + " INTEGER NOT NULL DEFAULT 0,"
+ Columns.BOOK_PRICE + " FLOAT,"
+ Columns.BOOK_STOCK + " INTEGER NOT NULL,"
+ Columns.BOOK_ICON + " BLOB"
+ ");");
}

/**
* Insert Item
*/

public long insertItem(Book book) {
long id;
ContentValues initValues = new ContentValues();
ByteArrayOutputStream os = new ByteArrayOutputStream();
book.icon.compress(Bitmap.CompressFormat.PNG, 100, os);
initValues.put(BOOK_AUTHOR, book.author);
initValues.put(Columns.BOOK_INTRODUCTION, book.introction);
initValues.put(Columns.BOOK_LABEL, book.label);
initValues.put(Columns.BOOK_NAME, book.name);
initValues.put(Columns.BOOK_PRICE, book.price);
initValues.put(Columns.BOOK_STOCK, book.stock);
initValues.put(Columns.BOOK_ICON, os.toByteArray());
SQLiteDatabase db = getWritableDatabase();
id = db.insert(TABLE_BOOK, null, initValues);
db.close();
return id;
}

/**
* retrieve item by database index
*/

public Book getItemByIndex (int index){
Book book = new Book();

SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.query(TABLE_BOOK, null, "_id =?", new String[]{String.valueOf(index)}, null, null, null);
while (cursor.moveToNext()){
int id = cursor.getInt(0);
String author = cursor.getString(1);
String introction = cursor.getString(2);
String label = cursor.getString(3);
String name = cursor.getString(4);
float price = cursor.getFloat(5);
int stock = cursor.getInt(6);
byte[] bytes = cursor.getBlob(7);
Bitmap icon = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
book.icon = icon;
// TODO: 2017/3/11 one more thing
}
return book;
}

private static class Book {
public String author;
public String introction;
public String label;
public String name;
public float price;
public int stock;
public Bitmap icon;
}
}

⑸ 安卓sqlite需要有什么基础

一.基础知识: 1.SQLite的数据类型: NULL:空值。 INTEGER:带符号的整型,具体取决有存入数字的范围大小。 REAL:浮点数字,存储为8-byte IEEE浮点数。 TEXT:字符串文本。 BLOB:二进制对象。 smallint 16位元的整数。 interger 32位元的整数。 decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 float 32位元的实数。 double 64位元的实数。 char(n) n 长度的字串,n不能超过 254。 varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。 graphic(n) 和 char(n) 一样,不过其单位是两个字符 double-bytes, n不能超过127。这个形态是为了支援两个字符长度的字体,例如中文字。 vargraphic(n) 可变长度且其最大长度为 n 的双字符字串,n不能超过 2000 date 包含了 年份、月份、日期。 time 包含了 小时、分钟、秒。 timestamp 包含了 年、月、日、时、分、秒、千分之一秒。 datetime 包含日期时间格式,必须写成'2010-08-05'不能写为'2010-8-5',否则在读取时会产生错误! 2.SQLite的基本操作: ①SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。 [java] // 创建数据库 public void onCreate(SQLiteDatabase db) // 更新数据库 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打开数据库 public void onOpen(SQLiteDatabase db) // 得到一个可读SQLiteDatabase对象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一个可写SQLiteDatabase对象 public synchronized SQLiteDatabase getWriteableDatabase() // 创建数据库 public void onCreate(SQLiteDatabase db) // 更新数据库 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打开数据库 public void onOpen(SQLiteDatabase db) // 得到一个可读SQLiteDatabase对象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一个可写SQLiteDatabase对象 public synchronized SQLiteDatabase getWriteableDatabase() ②SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。 [java] execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。 columns:要查询出来的列名。相当于select语句select关键字后面的部分。 selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?” selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 groupBy:相当于select语句group by关键字后面的部分 having:相当于select语句having关键字后面的部分 orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。 //还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常设置为null ContentValues values // 待插入的数据 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的内容 String whereClause, // 选择通过哪个字段来更新 String [] whereArgs // 为whereClause字段要查询的值 ) execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。 columns:要查询出来的列名。相当于select语句select关键字后面的部分。 selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?” selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 groupBy:相当于select语句group by关键字后面的部分 having:相当于select语句having关键字后面的部分 orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。 //还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常设置为null ContentValues values // 待插入的数据 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的内容 String whereClause, // 选择通过哪个字段来更新 String [] whereArgs // 为whereClause字段要查询的值 ) ③下面为网上常用的访问数据库的一般流程: [java] public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4}); db.close(); }; public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4}); db.close(); }; 二.编程实现: 1. 界面编辑(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:text="创建数据库" android:id="@+id/ButtonCreate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="增加数据" android:id="@+id/ButtonInsert" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="更新数据" android:id="@+id/ButtonUpdate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="查询数据" android:id="@+id/ButtonQuery" android:layout_width="fill_parent" android:layout_height="wrap_content"> 定义了一个垂直方向上的线性布局,及各操作的按钮,水平方向充满父窗口,垂直方向与内容等高。 界面布局效果如下: 2. 代码编辑(srcwyfzclMyActivity.java): [java] package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相关包 import android.app.Activity; //引入相关包 import android.content.ContentValues; //引入相关包 import android.database.Cursor; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.os.Bundle; //引入相关包 import android.view.View; //引入相关包 import android.widget.Button; //引入相关包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //创建数据库按钮 private Button insertBut; //增加数据库记录按钮 private Button updateBut; //更新数据库记录按钮 private Button queryBut; //查询数据库记录按钮 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //实例化创建数据库按钮 insertBut=(Button)findViewById(R.id.ButtonInsert); //实例化插入数据库按钮 updateBut=(Button)findViewById(R.id.ButtonUpdate); //实例化更新数据库按钮 queryBut=(Button)findViewById(R.id.ButtonQuery); //实例化查询数据库按钮 createButton.setOnClickListener(new View.OnClickListener() {//创建数据库时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Toast.makeText(MyActivity.this, "创建或打开数据库", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加数据库记录时调用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues对象 cv.put("uid", 1); //放入键值对,键要与列名一致,值要与列的数据类型一致 cv.put("uname", "zcl"); //放入键值对,键要与列名一致,值要与列的数据类型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "插入记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 sld.insert("sqlitetest", null, cv);//增加数据库记录 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //创建数据库 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 ContentValues cv = new ContentValues(); //得到ContentValues对象 Toast.makeText(MyActivity.this, "更新记录", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新数据库记录 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查询数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "查询记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //打印输出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相关包 import android.app.Activity; //引入相关包 import android.content.ContentValues; //引入相关包 import android.database.Cursor; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.os.Bundle; //引入相关包 import android.view.View; //引入相关包 import android.widget.Button; //引入相关包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //创建数据库按钮 private Button insertBut; //增加数据库记录按钮 private Button updateBut; //更新数据库记录按钮 private Button queryBut; //查询数据库记录按钮 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //实例化创建数据库按钮 insertBut=(Button)findViewById(R.id.ButtonInsert); //实例化插入数据库按钮 updateBut=(Button)findViewById(R.id.ButtonUpdate); //实例化更新数据库按钮 queryBut=(Button)findViewById(R.id.ButtonQuery); //实例化查询数据库按钮 createButton.setOnClickListener(new View.OnClickListener() {//创建数据库时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Toast.makeText(MyActivity.this, "创建或打开数据库", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加数据库记录时调用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues对象 cv.put("uid", 1); //放入键值对,键要与列名一致,值要与列的数据类型一致 cv.put("uname", "zcl"); //放入键值对,键要与列名一致,值要与列的数据类型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "插入记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 sld.insert("sqlitetest", null, cv);//增加数据库记录 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //创建数据库 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 ContentValues cv = new ContentValues(); //得到ContentValues对象 Toast.makeText(MyActivity.this, "更新记录", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新数据库记录 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查询数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "查询记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //打印输出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } (.java): [java] package wyf.zcl.sqlitedb; import android.content.Context; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.database.sqlite.SQLiteOpenHelper; //引入相关包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相关包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//继承SQLiteOpenHelper的类,必须有该构造函数 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库时调用,此方法是在调用了getReadableDatabase()或getWritableDatabase()后才调用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升级数据库时掉用 } } package wyf.zcl.sqlitedb; import android.content.Context; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.database.sqlite.SQLiteOpenHelper; //引入相关包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相关包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//继承SQLiteOpenHelper的类,必须有该构造函数 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库时调用,此方法是在调用了getReadableDatabase()或getWritableDatabase()后才调用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升级数据库时掉用 } }

⑹ 有哪些比较好的 Android SQLite 开源工具类

ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent的http模块,具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能,在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。他还包括了一个手机开发中经常应用的实用工具类,如日志管理,配置文件管理,android下载器模块,网络切换检测等等工具。

目前ThinkAndroid主要有以下模块:

MVC模块:实现视图与模型的分离。
ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。
网络状态检测模块:当网络状态改变时,对网络状态进行检测。

⑺ Android开发 sqlite作用

SQLite简介
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:

1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
Android中的SQLite使用
首先创建数据库类

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DB_NAME = "mydata.db"; //数据库名称
private static final int version = 1; //数据库版本

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table user(username varchar(20) not null , password varchar(60) not null );";
db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}

}

SQLiteOpenHelper类介绍
SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。

方法名
方法描述

SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) 构造方法,一般是传递一个要创建的数据库名称那么参数
onCreate(SQLiteDatabase db) 创建数据库时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用
getReadableDatabase() 创建或打开一个只读数据库
getWritableDatabase() 创建或打开一个读写数据库
下面来介绍调用的方法
创建数据库
这里特别的地方是通过调用了SQLiteOpenHelper类的getReadableDatabase()方法来实现创建一个数据库的

1
2
3

DatabaseHelper database = new DatabaseHelper(this);//这段代码放到Activity类中才用this
SQLiteDatabase db = null;
db = database.getReadalbeDatabase();

SQLiteDatabase类为我们提供了很多种方法,而较常用的方法如下

(返回值)方法名
方法描述

(int) delete(String table,String whereClause,String[] whereArgs) 删除数据行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values) 添加数据行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法
(void) execSQL(String sql) 执行一个SQL语句,可以是一个select或其他的sql语句
(void) close() 关闭数据库
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查询指定的数据表返回一个带游标的数据集
(Cursor) rawQuery(String sql, String[] selectionArgs) 运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)
数据的添删改查分别可以通过2种途径来实现
数据的添加
1.使用insert方法

1
2
3

ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据cv.put("username","Jack Johnson");//添加用户名
cv.put("password","iLovePopMusic"); //添加密
db.insert("user",null,cv);//执行插入操作

2.使用execSQL方式来实现

1
2

String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL语句
db.execSQL(sql);//执行SQL语句

数据的删除
同样有2种方式可以实现

1
2
3

String whereClause = "username=?";//删除的条件
String[] whereArgs = {"Jack Johnson"};//删除的条件参数
db.delete("user",whereClause,whereArgs);//执行删除

使用execSQL方式的实现

1
2

String sql = "delete from user where username='Jack Johnson'";//删除操作的SQL语句
db.execSQL(sql);//执行删除操作

数据修改
同上,仍是2种方式

1
2
3
4
5

ContentValues cv = new ContentValues();//实例化ContentValues
cv.put("password","iHatePopMusic");//添加要更改的字段及内容
String whereClause = "username=?";//修改条件
String[] whereArgs = {"Jack Johnson"};//修改条件的参数
db.update("user",cv,whereClause,whereArgs);//执行修改

使用execSQL方式的实现

1
2

String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL语句
db.execSQL(sql);//执行修改

数据查询
数据查询相对前面几种方法就复杂一些了,因为查询会带有很多条件
通过query实现查询的
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
各参数说明:
table:表名称
colums:列名称数组
selection:条件子句,相当于where
selectionArgs:条件语句的参数数组
groupBy:分组
having:分组条件
orderBy:排序类
limit:分页查询的限制
Cursor:返回值,相当于结果集ResultSet
针对游标(Cursor)也提供了不少方法

方法名称
方法描述

getCount() 总记录条数
isFirst() 判断是否第一条记录
isLast() 判断是否最后一条记录
moveToFirst() 移动到第一条记录
moveToLast() 移动到最后一条记录
move(int offset) 移动到指定的记录
moveToNext() 移动到吓一条记录
moveToPrevious() 移动到上一条记录
getColumnIndex(String columnName) 获得指定列索引的int类型值
实现代码

1
2
3
4
5
6
7
8

Cursor c = db.query("user",null,null,null,null,null,null);//查询并获得游标
if(c.moveToFirst()){//判断游标是否为空
for(int i=0;i<c.getCount();i++){
c.move(i);//移动到指定记录
String username = c.getString(c.getColumnIndex("username");
String password = c.getString(c.getColumnIndex("password"));
}
}

通过rawQuery实现的带参数查询

1
2
3
4

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
String password = c.getString(c.getColumnIndex("password"));
}

⑻ 如何使用SQLite,Android上SQLite的最佳实践

前些时候看到兴趣小组里有人问“Android上SQLite的最佳实践”是什么,好奇地搜了一下,确实没有一个好一点的指导文档,平时的使用也只是简单的拷贝code,并没有深入的研究过。以下是我看到的Kevin关于其使用的心得,原文的大体的意思是:

Android例子涵盖了一些Sqlite的基本用法,但它们并没有深入地给出合理的使用方法,更重要的是,不合理的使用方法。大多数例子和文档只是涉及最基本的数据库查询,或者教你如何创建一个ContentProvider。从来不提及的地方像:

· 什么地方创建和保存SQLiteOpenHelper实例?

· 可以有多少个实例?

· 多线程同时访问数据库有没有什么要担心的?

基本的内容是,你可以任意次数地连接Sqlite数据库,而且Android系统也支持你这样做。Sqlite拥有文件级别的锁,用来同步访问和防止错误。如果你只知道这些,那么,将会给你带来很大的痛苦。开源的一个好处是,你可以深入代码一探究竟。从代码和一些测试中,我了解到以下事实:

· Sqlite拥有文件级别的锁。许多线程可以同时读,但只有一个可以写。锁阻止多个同时写入。

· Android在SQLiteDatabase中实现了一些java锁来确保动作是同步进行。

· 如果你用多个线程疯狂地访问数据库,你的数据库不会(或不应该)崩溃。

没提到的是,如果你通过多个不同的真实连接同时写数据库,其中的某个会失败,它不会等到前一个完成后继续写入。简单地,不会写入你的改变,更糟糕的是,你也得不到一个异常,只是在LogCat中输出一些message,仅此而已。

SQLiteOpenHelper类做了一些有趣的事。尽管它有方法可以获得一个只读的连接和可读写的连接,但实质上它们是同一个连接。假设没有文件写错误的话,只读的连接实质上就是一个可读写的连接。有趣吧。因此,如果你的app中使用一个helper的话,即便从多线程中使用,你也从未使用多个连接。

同样,一个helper中只有一个SQLiteDatabase的实例,这个实例中实现了一些java锁。因此,当你正在执行数据库的操作时,其它db的操作都将锁定。即便是你使用多个线程来做这些事以便优化数据库的性能,坏消息,没有什么用。

按照我的认识,SQLite工作的方式,基本上不可能会破坏你的数据库,除非代码里有bug或者有硬件问题。

因此,我推荐这样使用:创建一个SQLiteOpenHelper静态对象。什么时候去close它呢?不需要。当app关闭,它会自动释放文件引用。

但是,会不会有“close() was never explicitly called on database”异常呢?

如果你注意的话,当连接挂在那里的时候,你没有得到那个异常。你只是在连接已经建立,而你又尝试打开另一个时才会有异常。因此,你只需要打开一次连接。

像这样来使用:

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

{

private static DatabaseHelper instance;public static synchronized DatabaseHelper getHelper(Context context)

{

if (instance == null)

instance = new DatabaseHelper(context);return instance;

}

//Other stuff...

}

⑼ android怎么在手机SD卡上创建SQLite数据库

在sd卡上创建数据库
通过android的sqliteopenhelper类的源码,可以看到sqliteopenhelper类的getwritabledatabase
这个接口实际上调用的是context的openorcreatedatabase方法,而这个方法是不支持带路径的数据库名
称的,也就是说,用这个方法创建的数据库只能放在/data/data/包名称/
目录下;要想在sd卡上创建数据库
,我们可以调用sqlitedatabase类的openorcreatedatabase方法,这个方法是支持带路径的数据库名称的。

热点内容
中国联通短信提示服务密码未完善是什么意思 发布:2024-10-18 16:42:17 浏览:709
c语言中非 发布:2024-10-18 16:21:20 浏览:143
招编程人员 发布:2024-10-18 16:19:37 浏览:422
什么数据类型存储图片 发布:2024-10-18 16:19:28 浏览:749
电脑维护服务器 发布:2024-10-18 16:18:51 浏览:435
取舍算法 发布:2024-10-18 16:12:36 浏览:249
安卓数据线一般在什么价位 发布:2024-10-18 16:09:25 浏览:732
老式安卓机怎么插卡 发布:2024-10-18 15:52:35 浏览:338
pc搭建nas服务器 发布:2024-10-18 15:51:59 浏览:266
androidimei 发布:2024-10-18 15:51:56 浏览:292