SQLite 这是一个非常流行的嵌入式数据库。它支持 SQL 查询,和只使用很少的内存。Android 在集成实施 SQLite,所以每 Android 应用程序能够使用 SQLite 数据库。对数熟悉 SQL 的开发者来时。使用 SQLite 相当简单。

能够。因为 JDBC 不适合手机这样的内存受限设备。所以 Android 开发者须要学习新的 API 来使用 SQLite。本文以一个注冊登录Demo简介一下sqlite入门使用。

先上一下执行结果:(请忽略丑陋的界面~~)

以下贴上主要代码,后面分析:

/**
* 登录页面的activity
* @author D_xiao
*
*/
public class MainActivity extends Activity {
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button loginbtn = (Button)findViewById(R.id.loginbtn);
Button regbtn = (Button)findViewById(R.id.regbtn);
db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/android1.db3", null); //创建或打开数据库
loginbtn.setOnClickListener(new OnClickListener(){
public void onClick(View sourse){
boolean flag = false;
String userName = ((EditText)findViewById(R.id.userEditText)).getText().toString();
String userPassword = ((EditText)findViewById(R.id.passwordEditText)).getText().toString();
try{
Cursor cursor = db.rawQuery("select * from users where name = ? and password = ?",new String[]{userName,userPassword}); if(cursor.getCount()==0){
Intent intentE = new Intent(MainActivity.this,ErrorActivity.class);
startActivity(intentE);
}else{
Intent intentS = new Intent(MainActivity.this,HomeActivity.class);
intentS.putExtra("name", userName);
startActivity(intentS);
}
}catch(SQLiteException se){
Intent intentE = new Intent(MainActivity.this,ErrorActivity.class);
startActivity(intentE);
}
}
});
regbtn.setOnClickListener(new OnClickListener(){
public void onClick(View sourse){
Intent intentReg = new Intent(MainActivity.this,RegActivity.class);
startActivity(intentReg);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
/**
* 注冊Activity
* @author D_xiao
*
*/
public class RegActivity extends Activity {
SQLiteDatabase db;
ListView listView;
Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reg);
db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/android1.db3", null);
final String a = this.getFilesDir().toString();
Button regOK = (Button)findViewById(R.id.regOK);
Button backtologin = (Button)findViewById(R.id.backtologin);
regOK.setOnClickListener(new OnClickListener(){
public void onClick(View sourse){
String name = ((EditText)findViewById(R.id.name)).getText().toString();
String password = ((EditText)findViewById(R.id.password)).getText().toString();
TextView suc = (TextView)findViewById(R.id.suc);
try{
db.execSQL("insert into users values(null,? ,?)",new String[]{name,password});
suc.setText("注冊成功。请点取消button返回到登录界面");
}catch(SQLiteException se){
db.execSQL("create table users(_id integer primary key autoincrement,"
+"name varchar(20) ,"
+"password varchar(200))");
db.execSQL("insert into users values(null,?,?)",new String[]{name,password});
suc.setText("注冊成功。请点取消button返回到登录界面");
}
}
});
backtologin.setOnClickListener(new OnClickListener(){
public void onClick(View sourse){
Intent intent = new Intent(RegActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
public void onDestroy(){
super.onDestroy();
if(db!=null&&db.isOpen()){
db.close();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
/**
* 登录成功显示主页,能够发微博 并显示朋友圈
* @author D_xiao
*
*/
public class HomeActivity extends Activity {
SQLiteDatabase db;
ListView listView;
Button btn;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/android1.db3", null);
listView = (ListView)findViewById(R.id.show);
btn = (Button)findViewById(R.id.send);
btn.setOnClickListener(new OnClickListener(){
Cursor cursor = null;
public void onClick(View sourse){
String weibo = ((EditText)findViewById(R.id.newtext)).getText().toString();
Intent intent = getIntent();
String name = intent.getStringExtra("name");
try{
insertData(db,name,weibo);
//select * from weibo3
cursor = db.rawQuery("select * from weiboa", null);
inflateList(cursor);
}catch(SQLiteException se){
//primary key autoincrement
db.execSQL("create table weiboa(_id integer primary key autoincrement,"
+"name varchar(20) ,"
+"weibo varchar(200))");
insertData(db,name,weibo);
//查询
cursor = db.rawQuery("select * from weiboa", null);
inflateList(cursor);
}finally{
//cursor.close();
}
}
});
}
private void insertData(SQLiteDatabase db,String name,String weibo){
//运行插入语句
db.execSQL("insert into weiboa values(null,?,?)",new String[]{name,weibo});
}
private void inflateList(Cursor cursor){
//填充SimpleCursorAdapter
SimpleCursorAdapter adapter = new SimpleCursorAdapter(HomeActivity.this,R.layout.line,cursor,
new String[]{"name","weibo"},
new int[]{R.id.my_name,R.id.my_weibo},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(adapter);
}
public void onDestroy(){
super.onDestroy();
if(db!=null&&db.isOpen()){
db.close();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
/**
* username或password错误跳转
* @author D_xiao
*
*/
public class ErrorActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_error); Button backbtn = (Button)findViewById(R.id.Ebackbtn);
backbtn.setOnClickListener(new OnClickListener(){
public void onClick(View sourse){
Intent intentBack = new Intent(ErrorActivity.this,MainActivity.class);
startActivity(intentBack);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

通过此例,能够看出来sqlite和sql server 等数据库的差别联系:

sqlite没有图形界面,也不须要不论什么的配置安装打开连接等等的操作,几句简单的语句就能够完毕增删改查操作。使用起来还是非常方便的。并且sqlite和sql server ,MySQL是有非常多相似的地方的。除了大多数查询语句在sqlite里面都能够用以外,sqlite还有自己的api提供的方法进行查询,这个以后再叙。并且运行语句也非常相似。

比方db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/android1.db3", null);  这句相当于sql server中的建立连接,所以在使用完以后要关闭连接,都是一样的。

Cursor cursor = db.rawQuery("select * from users where name = ? and password = ?",new String[]{userName,userPassword});这句中的cursor相当于sql server 中的resultSet结思集。

没有图形界面有一点还是比較麻烦的,就是不好操作查看数据表,必需要执行cmd查看,相对来说比較麻烦。请看下篇博文:http://blog.csdn.net/frightingforambition/article/details/24439981

完整Demo:

http://download.csdn.net/detail/u011250851/7248227




版权声明:本文博客原创文章,博客,未经同意,不得转载。

Android学习-----如何使用sqlite对于后台数据交换,sqlite使用例程入门的更多相关文章

  1. Android:Activity+Fragment及它们之间的数据交换.

    Android:Activity+Fragment及它们之间的数据交换 关于Fragment与Fragment.Activity通信的四种方式 比较好一点的Activity+Fragment及它们之间 ...

  2. 【AS3】Flash与后台数据交换四种方法整理

    随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...

  3. [转]Android:Activity+Fragment及它们之间的数据交换(一)

    2014-05-18         来源:Android:Activity+Fragment及它们之间的数据交换(一)   简介: 为什么要用Fragment?使用Fragment可以在一个Acti ...

  4. Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger

    本文将要介绍的内容都是Java5中的新特性,一个是倒计时记数器---CountDownLatch,另一个是用于线程间数据交换的Exchanger. 一.CountDownLatch 1.什么是Coun ...

  5. Android:Activity+Fragment及它们之间的数据交换(一)

    简单介绍: 为什么要用Fragment?使用Fragment能够在一个Activity中实现不同的界面. Fragment与Fragment之间的动画切换,远比Activity与Activity之间的 ...

  6. Android学习笔记_37_ListView批量加载数据和页脚设置

    1.在activity_main.xml布局文件中加入ListView控件: <RelativeLayout xmlns:android="http://schemas.android ...

  7. 零基础Android学习笔记-03 窗口间的数据传递

    1.通过全局变量来传递. 新建一个全局的类继承于Application package com.example.helloworld; import android.app.Application; ...

  8. Android学习手记(3) Activity间传递数据

    1. 简单数据传递 建立两个Activity,名称分别为MainActivity和TheAty,在MainActivity中新建一个Button,id为btnStartAty.在TheAty中新建一个 ...

  9. Android学习笔记_8_使用SharedPreferences存储数据

    1.SharedPreferences介绍: Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPrefer ...

随机推荐

  1. [置顶] CSS+DIV总结

         HTML在Web飞速发展的过程中起着重要作用,有着重要地位.HTML初衷是为了表达标签(<p>.<table>)的内容信息.同时文档布局由浏览器来完成,不使用任何格式 ...

  2. activity变成Dialog的样式设置

    1.属性解析 <item name="android:windowFrame">@null</item> :Dialog的windowFrame框为无< ...

  3. Web端的Tab控件在切换Tab时Load数据出错的处理

    我们在应用Web端的Tab控件时,不管是Jquery easyui的还是Ext的Tab控件都会遇到一个问题,在Tab1正在加载数据的时候我们切换到Tab2,再切换回来,Load数据的控件就会出错,出错 ...

  4. 对背包问题(Knapsack Problem)的算法探究

    对背包问题(Knapsack Problem)的算法探究 至繁归于至简,这次自己仍然用尽可能易理解和阅读的解决方式. 1.问题说明: 假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可 ...

  5. awk 的逻辑运算字符

    既然有需要用到 "条件" 的类别,自然就需要一些逻辑运算啰-例如底下这些:运算单元代表意义> 大于小于>= 大于或等于小于或等于== 等于!= 不等于值得注意的是那个 ...

  6. 在Delphi开发的服务中调用指定应用程序

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://fxh7622.blog.51cto.com/63841/529033 在很多时候 ...

  7. android在view.requestFocus(0)返回false的解决办法

    我们有时候想让listview的第一行自动获取到焦点,我们就会使用view.requestFocus(0)来操作,而有时候并不生效,debug后显示rerurn为false. 这是因为我们获取焦点太早 ...

  8. docker学习笔记1:docke环境的查看

    本文的操作是在ubuntu操作系统下的. 一.环境检查 当登录一个安装了docker的机器后,首先我们要检查下docker环境如何. 1.命令:docker -v 上述命令返回安装的docker的版本 ...

  9. StreamWrite-StreamRead 读写文本文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. C# - 委托_ 匿名方法

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...