连接到Adobe AIR中的远程数据库

时间:2013-07-09 13:27:53

标签: actionscript-3 sqlite air adobe

我正在开发AIR移动应用程序。我使用Sqlite作为我的本地数据库。现在我必须在一个位于远程服务器中的集中式数据库中维护一些数据,即,我必须将一些数据从我的移动应用程序推送到远程数据库以及进行重新扫描。

我的问题是

  1. 我可以使用sqlite作为集中式数据库吗?

  2. 如何连接到位于服务器中的数据库。

  3. 先谢谢。

2 个答案:

答案 0 :(得分:1)

我会尝试总结这个问题的答案。 SQLite并非设计为服务,因此可以用作远程数据库,除非您只需要读取它。

如果您只需要它来读取数据,您可以从服务器下载它,另存为文件,然后将其用作本地数据库。这个方法在这里有更好的解释:Link

但是如果你想用它来编写和阅读你会遇到很多并发和数据使用的问题,所以在这里使用SQLite数据库不是一个选择。这里有更好的解释:Link

执行此操作的正确方法是使用后端(服务器脚本或服务器程序),该后端侦听您的请求并根据它们执行操作。

例如,如果您要对用户进行身份验证,可以将以下内容发送到服务器:

username: "Gio"
password: "123"
action: "login"

在Actionscript 3中,调用将如下所示:

import flash.net.URLVariables;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.IOErrorEvent;
import flash.events.Event;
import flash.net.URLRequestMethod;

// create a URLLoader to POST data to the server
var loader:URLLoader = new URLLoader();
// server address where your script is listening
var request:URLRequest = new URLRequest("http://example.com");

// create and set the variables passed to the server script
var params:URLVariables = new URLVariables();
params.username = "Gio";
params.password = "123";
params.action = "login";
request.data = params;

// set the request type to POST as it's more secure and can hold more data
request.method = URLRequestMethod.POST;

loader.addEventListener(Event.COMPLETE, onPostComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, onPostFailed);
loader.load(request);

function onPostFailed(e:Event):void
{
// happens if the server is unreachable
trace("I/O Error when sending a POST request");
}

function onPostComplete(e:Event):void
{
// loader.data will hold the response received from the server
trace(e.target.data);
}

在服务器端,我建议使用PHP,因为它更容易学习,简单并且适用于MySQL。

在PHP中你有这样的东西来处理请求:

<?php

$host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
if($_POST['action'] == "login")
{
    $receivedUsername=$_POST['username']; 
    $receivedPassword=$_POST['password']; 

    $sql="SELECT * FROM $tbl_name WHERE username='$receivedUsername' and password='$receivedPassword'";
    $result=mysql_query($sql);

    // Mysql_num_row is counting table row
    $count=mysql_num_rows($result);

    // If result matched $receivedUsername and $receivedPassword, table row must be 1 row
    if($count==1){
        echo "Authentication success";
    }
    else {
        echo "Wrong Username or Password";
    }
}
?>

一开始看起来有点复杂,但实际上并没有什么大不了的。您将不得不阅读有关PHP的更多信息以及如何设置它,因为我无法完成本文中的所有细节。

答案 1 :(得分:0)

我在服务器端使用AMFPHP。 在Flash中您在服务器上调用服务:

_net_connection = new NetConnection();
_net_connection.addEventListener(NetStatusEvent.NET_STATUS, connectionStatusHandler);
_net_connection.connect(_server_url);
_responder = new Responder(loginResult, null);
_net_connection.call("userSerivce2/login", _responder, _user_login, _user_passwword);

private function loginResult(result_object:Object):void {
    save_log('loginResult (' + result_object.status + ")");
    //rest of code
}

响应者 - 是AS3中的功能,您将在呼叫后执行 userSerivce2 / login - 类userSerivce2,方法登录 在这种情况下,您可以添加响应者(_responder)和其他参数,例如_user_login,_user_passwword。

服务器PHP:

public function login($user_name, $user_password) {
    //SELECT blablabla
    try {
        if ($logged) {
            $this->call_result['status'] = 0;
            throw new mysqli_sql_exception("Pomyślnie zalogowano."); 
        } else {
            $this->call_result['status'] = 3;
            throw new mysqli_sql_exception("Błąd logowania. Wprowadź poprawny login, oraz hasło."); 
        }
    } catch(Exception $e) {
        $this->call_result['error_message'] = $e->getMessage();
        return $this->call_result;
    }
    return $this->call_result; //method will return object
}