sum(X) total(X)
返回一组中所有非空值的数值总和。如果在输入中没有非空值,则 sum() 会返回 NULL。 而 total() 会返回 00。
total() 的结果永远是浮点数。 如果所有非空的输入都是整数, sum() 的结果将是整数值。 若任何输入给 sum() 的值是除整数及 NULL 以外的值, sum() 都将返回浮点数。这可能是最接近标准 sum() 的实现方式吧。
如果输入全部是整数或 NULL,在结果溢出时 sum() 将会产生一个 "integer overflow" 异常。 而 total() 永远不会。
SQLite介绍
SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。
在android中当需要 *** 作SQLite数据库的时候需要得到一个SQLiteOpenHelper对象,而SQLiteOpenHelper是一个抽象类,用户需要继承这个类,并实现该类中的一些方法。
1、继承SQLiteOpenHelper之后就拥有了以下两个方法:
◆getReadableDatabase() 创建或者打开一个查询数据库
◆getWritableDatabase()创建或者打开一个可写数据库
◆他们都会返回SQLiteDatabase对象,用户通过得到的SQLiteDatabase对象进行后续 *** 作
2、同时用户还可以覆盖以下回调函数,再对数据库进行 *** 作的时候回调以下方法:
◆onCreate(SQLiteDatabase):在数据库第一次创建的时候会调用这个方法,一般我们在这个方法里边创建数据库表。
◆onUpgrade(SQLiteDatabase,int,int):当数据库需要修改的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据库表,并建立新的数据库表,当然是否还需要做其他的 *** 作,完全取决于应用程序的需求。
◆onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。
需要注意
1、在SQLiteOepnHelper的子类当中,必须有以下该构造函数
public DatabaseHelper(Context context, String name, CursorFactory factory, int version) { //必须通过super调用父类当中的构造函数 super(context, name, factory, version); }为了方便,也可以创建其它的构造函数,含二个参数或者三个参数的。
2、函数public void onCreate(SQLiteDatabase db)是在调用getReadableDatabase()或者是getWritableDatabase()第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法
public void onCreate(SQLiteDatabase db) { Systemoutprintln("create a Database"); //execSQL函数用于执行SQL语句 dbexecSQL("create table user(id int,name varchar(20))"); }在向数据库的表中插入记录时,需要先将数据包含在一个ContentValues中,向该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致。接着调用Databasehelper的getWritableDatabase方法来获得可以写入的Databasehelper对象,再向其中insert记录。注意调用DatabaseHelper对象的insert,update或者query方法的参数的传递。
另外执行query方法后,返回的是一个Cursor游标,游标最开始指向的是记录集合中第一行的上一行,因此首先需要先调用cursornext()将游标移动到记录集合的第一行,接着再获取数据即可。
Java代码
public class SQLiteActivity extends Activity { / Called when the activity is first created / private Button createButton; private Button insertButton; private Button updateButton; private Button updateRecordButton; private Button queryButton; @Override public void onCreate(Bundle savedInstanceState) { superonCreate(savedInstanceState); setContentView(Rlayoutmain); createButton = (Button)findViewById(RidcreateDatabase); updateButton = (Button)findViewById(RidupdateDatabase); insertButton = (Button)findViewById(Ridinsert); updateRecordButton = (Button)findViewById(Ridupdate); queryButton = (Button)findViewById(Ridquery); createButtonsetOnClickListener(new CreateListener()); updateButtonsetOnClickListener(new UpdateListener()); insertButtonsetOnClickListener(new InsertListener()); updateRecordButtonsetOnClickListener(new UpdateRecordListener()); queryButtonsetOnClickListener(new QueryListener()); } class CreateListener implements OnClickListener{ @Override public void onClick(View v) { //创建一个DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivitythis,"test_mars_db"); //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库 SQLiteDatabase db = dbHelpergetReadableDatabase(); } } class UpdateListener implements OnClickListener{ @Override public void onClick(View v) { DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivitythis,"test_mars_db",2); SQLiteDatabase db = dbHelpergetReadableDatabase(); } } class InsertListener implements OnClickListener{ @Override public void onClick(View v) { //生成ContentValues对象 ContentValues values = new ContentValues(); //想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 valuesput("id", 1); valuesput("name","zhangsan"); DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivitythis,"test_mars_db",2); SQLiteDatabase db = dbHelpergetWritableDatabase(); //调用insert方法,就可以将数据插入到数据库当中 dbinsert("user", null, values); } } //更新 *** 作就相当于执行SQL语句当中的update语句 //UPDATE table_name SET XXCOL=XXX WHERE XXXXCOL=XX class UpdateRecordListener implements OnClickListener{ @Override public void onClick(View arg0) { // TODO Auto-generated method stub //得到一个可写的SQLiteDatabase对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivitythis,"test_mars_db"); SQLiteDatabase db = dbHelpergetWritableDatabase(); ContentValues values = new ContentValues(); valuesput("name", "zhangsanfeng"); //第一个参数是要更新的表名 //第二个参数是一个ContentValeus对象 //第三个参数是where子句 dbupdate("user", values, "id=", new String[]{"1"}); } } class QueryListener implements OnClickListener{ @Override public void onClick(View v) { Systemoutprintln("aaa------------------"); Logd("myDebug", "myFirstDebugMsg"); DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivitythis,"test_mars_db"); SQLiteDatabase db = dbHelpergetReadableDatabase(); Cursor cursor = dbquery("user", new String[]{"id","name"}, "id=", new String[]{"1"}, null, null, null); while(cursormoveToNext()){ String name = cursorgetString(cursorgetColumnIndex("name")); Systemoutprintln("query--->" + name); } } } }
如果是模拟器,在android 的SDK中有一个adb组件,通过adb先连上模拟器
如果是真机,也是需要你先通过adb连接真机,之后类似linux命令行 *** 作
进入应用数据库所在目录 cd /////
sqlite3 数据库文件名
1、你在sqlite3建好库后放在assets资源文件下或者自定义文件下,拷贝到你自定义的路径然后打开,代码如下:
(1)private void copyFile() {
LogUtilsi("考呗");
//判断数据库是否拷贝到相应的目录下
if (new File(fileName)exists() == false) {//判断是否存在此文件
File dir = new File(DB_PATH);//不存在则创建文件
if (!direxists()) {
dirmkdir();
}
//复制文件
try {
InputStream is = thisgetBaseContext()getAssets()open(DB_NAME);//要拷贝的文件在assets下
// InputStream is=thisgetResources()openRawResource(
// Rrawquestion);//要拷贝的文件在raw文件夹下
OutputStream os = new FileOutputStream(fileName);
LogUtilsi("拷贝成功");
//用来复制文件
byte[] buffer = new byte[8192];
//保存已经复制的长度
int length;
//开始复制
while ((length = isread(buffer)) > 0) {
oswrite(buffer, 0, length);
}
//刷新
osflush();
//关闭
osclose();
isclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
(2)打开方法,成功打开后即可 *** 作表(真机运行需root权限,虚拟机正常)
private SQLiteDatabase db;
db = SQLiteDatabaseopenDatabase("fileName/xxxdb", null, SQLiteDatabaseOPEN_READWRITE);
package xiaohangzhimeng;
import
androidcontentContext;
import androiddatabasesqliteSQLiteDatabase;
import androiddatabasesqliteSQLiteOpenHelper;
import androiddatabasesqliteSQLiteDatabaseCursorFactory;
public class MySQLiteHelper extends SQLiteOpenHelper{
//调用父类构造器
public
MySQLiteHelper(Context context, String name, CursorFactory factory,
int
version) {
super(context, name, factory, version);
}
/
当数据库首次创建时执行该方法,一般将创建表等初始化 *** 作放在该方法中执行
重写onCreate方法,调用execSQL方法创建表
/
@Override
public void onCreate(SQLiteDatabase db)
{
dbexecSQL("create table if not exists hero_info("+ "id integer primary
key,"
+ "name varchar,"
+ "level integer)");
}
//当打开数据库时传入的版本号与当前的版本号不同时会调用该方法
@Override
public void
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
使用这个类来创建一个数据库 并对数据库进行 *** 作
MySqliteHelper myHelper = new MySQLiteHelper(this, "mydb", null, 1);
SQLiteDatabase db = myHelpergetWritableDatabase();
dbexecSQL("insert into hero_info(name,level) values('bb',0)");
execSQL()里是你的SQL语句
以上就是关于请问android sqlite3怎么样进行求和,举一简单例子全部的内容,包括:请问android sqlite3怎么样进行求和,举一简单例子、android 怎么读取sqlite数据库、android平台上怎么 *** 作sqlite数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)