我目前正在Android上开发一个需要读写数据库的应用程序。问题是每个使用该应用程序的人都需要读取相同的数据,因此如果一个人添加了数据,那么这只能用于他们特定的应用程序安装。
我需要的是一个解决方案,每个人都在从同一个数据库读取和写入,也许是每个人都可以连接的网络数据库,
所以我要问的是,对于每个人来说,单个数据库的最佳方法/ API是什么?
答案 0 :(得分:1)
一般情况下,你需要至少一个网站空间,例如php支持(如果sqlite插件是可用的)。一般来说,我建议使用真正的SQL或非SQL服务器(取决于你想要实现的目标)。根据我的经验,我建议使用mysql,这在网络上很常见。
对于我的解释,我将以PHP和MySQL为例。
首先确保您的服务器安装了正确的插件。您可以使用一行php脚本来检查:
<?php php_info(); ?>
在那里你应该寻找MySQLi
或更好地寻找PDO
。请注意,如果您找到了mysql
,请不要使用它。它们不再被维护and are officially deprecated。您应该学习如何使用prepared statements。如果您不确定要使用什么,请阅读this article将对您有所帮助。如果您选择PDO here is a good tutorial。
快速说明为什么不应该在服务器端使用不使用SQLite:此数据库是基于文件的,并且不能同时支持多个用户。顺便说一下,在客户端(Android)上没有问题,一次只有一个用户。
在开始之前,请确保基本了解您将获得多少用户。这一点非常重要,如果您让10k用户说出来,那么每个请求需要10秒才能让您的客户赢得使用您的应用。
在某些极少数情况下,请阅读normalization有关效率数据存储的信息,denormalization对于高性能用例也很有用。
您应该知道如何保护用户的数据,特别是如何保护用户密码,这对于保护您的用户非常重要,以防您的网站被黑客攻击。所有密码不得以纯文本形式存储!而是将所谓的散列与随机盐一起存储。举一个例子,让我们采取密码&#34; 12345678&#34; (这是最常见的方式)使用/dev/urandom
在Linux系统上生成随机哈希,另请参阅this question。如果您不想关心用户密码,也可以使用Google+ Sign-In,这是一个非常酷的功能,但这也非常复杂。
一般情况下,您还应该传输由ssl加密的所有数据,但这是非常昂贵的。如果有一些方法可以获得免费认证,例如CAcert或StartSSL。
如果你按照上面的建议使用准备好的陈述,你就不需要关心(blind) SQL injections了,但知道这一点也是有用的。
我建议将REST API与JSON格式一起实施以传输数据。要对数据进行编码,您可以使用json_encode()
,在Android上使用JSONObject
类。如果您还希望数据自动转换为类,则可以使用GSON。