Android开发教程sql语句(SQLite)使用详解

 更新时间:2016年9月20日 19:59  点击:2231
sql语句是指我们在安卓开发中会经常碰到有大量的地方要查询数据库了,下面我来介绍在安卓中使用sql语句吧。

SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它


SQLite的特点:

轻量级

SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态 库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。

不需要"安装"

SQLite的核心引擎本身不依赖第三方的软件,使用它也不需要"安装"。有点类似那种绿色软件。

单一文件 

数据库中所有的信息(比如表、视图等)都包含在一个文件内。这个文件可以自由复制到其它目录或其它机器上。

跨平台/可移植性

除了主流操作系统 windows,linux之后,SQLite还支持其它一些不常用的操作系统。

弱类型的字段

同一列中的数据可以是不同类型

开源

这个相信大家都懂的!

 3.SQLite数据类型

一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:

NULL: 这个值为空值

VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。

CHAR(n):长度固定为n的字串,n不能超过 254。

INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.

REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改  变格式。

DATA :包含了 年份、月份、日期。

TIME: 包含了 小时、分钟、秒。

相信学过数据库的童鞋对这些数据类型都不陌生的!!!!!!!!!!

一、创建/删除表

 代码如下 复制代码

String sql="Create table "+TABLE_NAME+"("+FIELD_ID+" integer primary key autoincrement,"  +FIELD_TITLE+" text );";

db.execSQL(sql);

String sql=" DROP TABLE IF EXISTS "+TABLE_NAME;

db.execSQL(sql);

 

二、查询

从表中查询数据(in)   SELECT * FROM meta where media_id in (1,2,9);

 

三、插入

 代码如下 复制代码

SQLiteDatabase db=this.getWritableDatabase();

ContentValues cv=new ContentValues();

cv.put(FIELD_TITLE, Title);

long row=db.insert(TABLE_NAME, null, cv);

 

四、更新

 代码如下 复制代码

SQLiteDatabase db=this.getWritableDatabase();

String where=FIELD_ID+"=?";

String[] whereValue={Integer.toString(id)};

ContentValues cv=new ContentValues();

cv.put(FIELD_TITLE, Title);

db.update(TABLE_NAME, cv, where, whereValue);

 

五、删除

 代码如下 复制代码

SQLiteDatabase db=this.getWritableDatabase();

String where=FIELD_ID+"=?";

String[] whereValue={Integer.toString(id)};

db.delete(TABLE_NAME, where, whereValue);

有时我们需要换手机时我们需要把手机中联系导入SIM卡中,这样换手机也就方便了许多,下面我来给大家介绍手机导出到SIM卡方法。

具体步骤

1. 在手机中我们点击【联系人】如图所示。

 

 2. 然后点击如下图的【联系人】菜单。

 

 3. 在手机的【菜单】键,选择【导入/导出】。

  

4. 点击【导出到SIM卡】菜单。

  

5. 因为要备份所以我点击【全选】为例,选择好后,点击屏幕右上角的【完成】。

  

6. 最后点击【确定】按钮。

  

7. 屏幕上显示复制进度,结束后显示“已复制”。

友情提示

其它三星安卓系统手机都可以把手机中联系人导出到SIM卡了,大家都可参照操作,这里就不介绍了。

昨天在做一个安卓小应用程序,要实现调用系统相机程序实现拍照,然后把拍的照片返回给我的程序进行剪辑功能,我们主要是用到了Camera类,下面我总结了一些操作方法,下面分享给大家。

调用系统照相机拍照并剪辑


在Android开发过程中,很多时候我们都需要调用照相机拍照,尤其在发布微博的时候。

自己继承Camera类写一个拍照功能显然不是最好的方案,因为我们不能考虑的非常全面。

这个时候,调用系统的照相机无疑是一个很好的解决方法。

下面,我们就写一个调用系统照相机拍照并对照片进行剪辑。

 

 代码如下 复制代码

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory()+"/","temp.jpg")));

 startActivityForResult(intent, 1);

 

上面的代码就是调用系统照相机拍照,并保存到sdcard目录下temp.jpg

但这个时候还不够,因为通常情况,照相机拍的照片尺寸都很大,显然不能用于上传,我们需要对照片进行剪辑。

 

 代码如下 复制代码

 public void startPhotoZoom(Uri uri) {

 Intent intent = new Intent("com.android.camera.action.CROP");

 intent.setDataAndType(uri, IMAGE_UNSPECIFIED);

 intent.putExtra("crop", "true");

 // aspectX aspectY 是宽高的比例

 intent.putExtra("aspectX", 1);

 intent.putExtra("aspectY", 1);

 // outputX, outputY 是裁剪图片宽高

 intent.putExtra("outputX", 250);

 intent.putExtra("outputY", 250);

 intent.putExtra("return-data", true);

 startActivityForResult(intent, PHOTORESOULT);

 }

 

上面的代码实现了图片的剪辑,我们只需要传入相应的Uri即可,接下来我们传入Uri。

 

 代码如下 复制代码

 File picture = new File(Environment.getExternalStorageDirectory()+"/" + "temp.jpg");

 startPhotoZoom(Uri.fromFile(picture));

 

当然,剪辑完了,我们肯定要拿到剪辑后的照片。

 

 代码如下 复制代码

 if (requestCode == PHOTORESOULT) {

 Bundle extras = data.getExtras();

 if (extras != null) {

 Bitmap photo = extras.getParcelable("data");

 ByteArrayOutputStream stream = new ByteArrayOutputStream();

 if(photo!=null){

 photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 – 100)压缩文件

 pic.setImageBitmap(photo);

 }

 }

 }

 


android调用系统照相机拍照并剪辑


这样,我们就通过调用系统照相机,实现拍照并剪辑图片的功能。


1.调用系统的照相机程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 startActivityForResult(intent, TAKE_PHOTO_WITH_DATA);

2.在onActivityResult中处理返回的data
final Bitmap photo = data.getParcelableExtra("data");
如果不需要做剪切处理就可以直接使用图片了,比如输出到ImageView上
imageView.setImageBitmap(photo);
如果需要做剪切处理,就继续向下执行

3.做剪切处理

 代码如下 复制代码
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setType("image/*");
        intent.putExtra("data", data);
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", 128);
        intent.putExtra("outputY", 128);
        intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);

4.在onActivityResult中处理
与第二步相同。

完整代码:

 代码如下 复制代码

public class SdCardUriTestActivity extends Activity {
    /** Called when the activity is first created. */
    private Button btnTake = null;
    private ImageView lblImage = null;
  
    private static final int PHOTO_PICKED_WITH_DATA = 3021;
    private static final int CAMERA_WITH_DATA = 3023;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
      
        btnTake = (Button)findViewById(R.id.btnTake);
        lblImage = (ImageView)findViewById(R.id.lblImage);
        btnTake.setOnClickListener(new View.OnClickListener() {
          
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, CAMERA_WITH_DATA);
            }
        });
      
    }
  
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if(resultCode!=RESULT_OK)
            return;
        switch(requestCode){
        case CAMERA_WITH_DATA:
            final Bitmap photo = data.getParcelableExtra("data");
            if(photo!=null){
                doCropPhoto(photo);
            }
        case PHOTO_PICKED_WITH_DATA:
            Bitmap photo1 = data.getParcelableExtra("data");
            if(photo1!=null){
                lblImage.setImageBitmap(photo1);
            }
          
        }
    }
  
    protected void doCropPhoto(Bitmap data){
        Intent intent = getCropImageIntent(data);
        startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);
    }
  
    public static Intent getCropImageIntent(Bitmap data) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setType("image/*");
        intent.putExtra("data", data);
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", 128);
        intent.putExtra("outputY", 128);
        intent.putExtra("return-data", true);
        return intent;
    }
}

布局文件略

退出程序很多朋友建议调用System.exit(0)退出应用,但是它未真正的退出并消除内存哦,下面我来给各位同学分析一下真正退出应用程序的实现过程,各位朋友可参考。

虽然文档里没有明确说明,但假如这是常用功能,应该有简便的方法实现,而实际上要靠代码"退出"一个应用并非易事。以下总结了能够模拟退出效果的两个方案:

方案1:打开系统主屏来模拟应用退出的效果,这和用户按Home键没有什么区别。

 

 代码如下 复制代码
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

方案2:直接杀掉当前应用进程。这个方法太暴力了,我找到一段iOS开发文档,上面强烈不建议使用杀进程的方式来退出应用,原因也适用于Android系统:这样退出的效果容易让用户以为应用崩溃了。

 代码如下 复制代码

int pid=android.os.Process.myPid();
android.os.Process.killProcess(pid);

此外,有人建议调用System.exit(0)退出应用,实际测试发现这个方法常常只能关闭当前Activity,或是根本不起作用。

由此可以看出,Android系统的设计里本来就没有"退出应用"的机制,当用户按下Home键或在应用首页里按下Back键后,应用被置于后台,而何时要彻底杀掉应用进程则由系统决定。Android和iOS都已抛弃了"退出应用"这个概念,对手机用户来讲,他只需要知道"启动应用"——概念越少越简单。


但作为一个好的应用,应该有自己的退出功能。

"应用退出"一般有以下几种方式:

 一、退出起始的Activity,这样后面的Activity系统会自己destory。(通常需要很长时间)

 二、为每一个Activity覆写OnKeyDown()方法,当每次按返回键的时候,finish掉当前的Activity。(通常所有的Activity都会继承一个BaseActivity,这样,只需要写一遍就好)

 三、利用List,每次调用新的Activity时,保存当前的Activity,当应用退出时,一次性finish所有的Activity。(较为理想的解决方案)

 

今天,我们就利用第三种方式来为我们的应用添加"退出"功能。

1.编写一个class继承Application

 代码如下 复制代码

public class AppClose extends Application {

 

    private List<Activity> mainActivity = new ArrayList<Activity>();

    public List<Activity> MainActivity() {

            return mainActivity;

    }

    public void addActivity(Activity act) {

            mainActivity.add(act);

    }

    public void finishAll() {

            for (Activity act : mainActivity) {

                    if (!act.isFinishing()) {

                            act.finish();

                    }

            }

            mainActivity = null;

    }

}

 

2.在Activity 中的oncreate方法中添加

 代码如下 复制代码

 AppClose appState = (AppClose)this.getApplication();

        appState.addActivity(this);

       // setContentView(R.layout.main);

 

3.//设定点击事件

 代码如下 复制代码

button.setonclick….(){

 

AppClose appState = (AppClose)getApplicationContext();

                 appState.finishAll();

}

 

4.在注册清单文件中

给application添加属性  android:name=".AppClose"

 

本文章来给大家介绍Android获取手机ip程序代码,在做Android开发的时候,我们经常会需要获取手机的ip地址或者mac地址,下面2段代码能帮助你获取手机的ip和mac地址。

实例

 代码如下 复制代码

public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("ifo", ex.toString());
}
return "";
}

public String getLocalMacAddress(Context context) {
WifiManager wifi = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
}

安卓4.0系统的手机,按上面的方法默认会先获取到ipv6的地址,有时候我们只想要ipv4的地址

 

 代码如下 复制代码
 /**
  * 用来获取手机拨号上网(包括CTWAP和CTNET)时由PDSN分配给手机终端的源IP地址。
  *
  * @return
  * @author SHANHY
  */
 public static String getPsdnIp() {
  try {
   for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
    NetworkInterface intf = en.nextElement();
    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
     InetAddress inetAddress = enumIpAddr.nextElement();
     if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
     //if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) {
      return inetAddress.getHostAddress().toString();
     }
    }
   }
  } catch (Exception e) {
  }
  return "";
 }
[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • mysql中获取一天、一周、一月时间数据的各种sql语句写法

    创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • PHP扩展开发教程(总结)

    PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行。1、线...2015-11-08
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
  • Android开发中布局中的onClick简单完成多控件时的监听的利与弊

    本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20