第四章:Android之本地数据库使用所要考虑的技术

习惯上,将自己的应用与数据库扯上关系总是显得“高大上”(only a joke)。

为了能将数据持久化,都需要本地或者网络存储措施,包括但不限于文本、应用服务器、数据库服务器。

而其中关于数据库服务器的使用又大分为本地和网络,而本地由分为应用本身自带和运行环境(PC)提供。

在本章接下来的部分,将介绍的就属于运行环境(PC)提供范畴。

第四章:Android之本地数据库使用所要考虑的技术

沿袭前辈们的习惯,使用一个具体的示例--登录 作为使用数据库案例

效果图:

在很简单的一个样例:输入已经注册(后台数据库已有的)的用户名与密码,登录后会有相应的提示或者界面跳转(自定义)。

涉及技术点

1、本地数据库的选择(涉及驱动包和sql语法的差异)

2、Android的真机与模拟设备差异

3、连接策略的选择(JDBC、Web Service、Socket)

4、连接数据库安全的保障(目标地址的端口及数据库本身的信息隐藏)

围绕以上的技术点,我们来一一探讨

1、本地数据库的选择(涉及驱动包和sql语法的差异)

如果是Unix/Linux平台开发,只能选择mysql或者oracle进行调试,为了简单演示,所以暂且定为mysql。

如果是基于Windows平台的开发,可选sqlserver(甚至Access都可以)。

笔者推荐的是最符合系列开发工具配合准则,而不是强调数据库之间的优劣。

选择好既定的数据库类型后,需要下载JDBC的驱动包,这个对于Mysql的用户来说可能已经习以为常,

但是对于SQLServer用户群可能会有混淆的地方在于与ODBC的差别,因为Windows的自我生态圈做的相对完善,

所以windows自我实现了连接数据库的一种方式(即ODBC),它的配置过程超出本文介绍内容的范畴,

因此仅介绍一下存在的差别,简而言之:

JDBC:Java访问数据库的一套规则,由数据库厂商(或授权发行商)提供的一套实现访问控制的API,采用Java语言实现。

ODBC:由微软为支持的数据库提供的一套访问接口,需要本地配置资源池(详细了解可以搜索相关知识),非Java实现。

2、Android的真机与模拟设备差异

由于真机与模拟设备存在网络连接的差异,

真机有自己的硬件支持网络协议进行网络访问控制(GPRS、WIFI);模拟设备仅依赖本地PC进行连接,使用的是本地网卡。

因此在进行调试的过程中两者是存在根本的差异,这就决定了在选择连接数据库的策略中使用方式。

3、连接策略的选择(JDBC、Web Service、Socket)

当前常用的连接数据库的方式有3种:JDBC、Web Service、Socket

JDBC:没啥好说的,3板斧(URL配置、ClassDriver加载、SQL语句的执行)的老套路

Web Service:通过访问应用服务器(简单的通讯可以采用Servlet,也可以使用Action之类的框架),

                           根据应用服务器访问数据库服务器放回的结果,再将结果反馈给应用端,其中需要解决的是数据解析的问题

Socket:这个是现在网络编程最常用的技术,在本地访问中也可以采用该技术,因为本地的IP地址也是网络的一种。

                实现过程可以是把应用端的请求包装成socket包,发送服务端,等待响应后的返回值(或者状态)作为展现结果的依据,

                如果是需要实时的能力(类似QQ),则需要增加心跳技术,保证“时刻”监听在线情况。

因为采用的是模拟设备进行调试,所以首选JDBC;

如果是真机调试,那笔者首选Web Service方式;

更进一步,如果是做成可发布的产品,首选Socket。

以上这些策略的选择都无法完全避免一个实际的问题:信息安全

JDBC:有能力的技术人员可以根据你的产品进行反编译,从而获得你的数据库相关信息(端口号,ip,数据库名和表名)

Web Service:可以通过网络抓取的方式,以相同的http请求方式获取返回结果,利用多次结果,可推测出请求和返回数据格式

(相较于JDBC更加困难,但是目前的工具还有很多)

Socket:可以通过抓包工具,获取网络传输的消息序列,利用现有的协议类型获取和工具得出请求数据与返回消息内容,破解关键信息

根据以上存在的问题,需要做到保障数据库的连接安全,起码不能采用“裸跑”(明文编码和传输)的方式。

4、连接数据库安全的保障(目标地址的端口及数据库本身的信息隐藏)

连接数据库的信息不能采用硬编码的方式存在与应用中,容易被反编译,解决这样的问题常用的方式有使用框架和加密

框架:指采用特定的通讯流程,将关键信息配置在某个(或几个)文件中,在运行时读取,并且不随着产品打包在源码文件中,而是被二进制化(或者web化),

从而要么反编译代价高,要么常规办法无法获取特定信息文件。

加密:利用数学算法将明文部分进行加密,在应用读取时进行动态解密,传输过程根据信道的安全程度决定是否再加密,总之,一般手段即使获取的关键信息也是密文结果

无法直接正常使用,提高信息隐藏的安全性。

小结

本文介绍了一个连接数据库应用需要考虑的问题,当然这些考虑不能概括所有方面,只是抛砖引玉,

希望借此来将自己的思路能够扩展,提高应用本身的合理和安全性。

后续会对实现细节展示出来,同时将期间遇到的问题以及解决办法(原因)详细介绍。


敬请期待,未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值