На днях мне пришлось подключится к внешней БД MySQL в Android приложении, которое бы использовало ресурсы готового сервиса, так вот в данном уроке я покажу как я это сделал.
В данном уроке мы с вами сделаем простое Android-приложения, который будет вызывать PHP скрипт для выполнения основных CRUD (Create, Read, Update, Delete) операций.
Android приложение будет вызывать PHP скрипт, который будет подключается к базе данных MySQL и выполнить какие то операции.
Что вам потребуется?
1) WEB-сервер для PHP. Будем использовать сборку DenWer.
2) MySQL база данных.
3) Android Emulator.
Шаг 1. Установка WEB-сервера.
Так как мы будем работать со сборкой Denwer, то для начала скачиваем её тут http://www.denwer.ru/
После того как вы его установили и проверили, что он работает, переходим к следующему шагу.
Шаг 2. Создание БД
Так как мы подняли WebServer Denwer в нем уже вшита MySQL база данных, давайте создадим базу и таблицу (products) в ней.
Создание таблиц в БД:
CREATE TABLE products( pid int(11) primary key auto_increment, name varchar(100) not null, price decimal(10,2) not null, description text, created_at timestamp default now(), updated_at timestamp );
В конце видео создания БД я не зря показал локальный IP, так как я использую виртуальную ОС для удобства. В вашем случае вы будите обращаться к localhost или же 127.0.0.1 .
Шаг 3. Подключение к MySQL базе с помощью PHP
Давайте создадим PHP класс, который будет отвечать за подключение к БД. Основная цель этого класса – открытие и закрытие соединения с БД.
Но, для того что бы подключатся к БД нам нужно где то хранить требуемые параметры для подключения к БД для этого создадим [C:\WebServers\home\devserver.com\www\db_config.php] со следующим содержимым:
<?php define('DB_USER', "root"); //логин админа БД define('DB_PASSWORD', "root"); // пароль админа БД define('DB_DATABASE', "devcolibri"); // база данных define('DB_SERVER', "localhost"); // сервер 'localhost' ?>
А теперь создадим в той же директории файл [C:\WebServers\home\devserver.com\www\db_connect.php] со следующим содержимым:
<?php class DB_CONNECT { function __construct() { $this->connect(); } function __destruct() { $this->close(); } function connect() { require 'db_config.php'; $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error()); $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error()); return $con; } function close() { mysql_close(); } } ?>
Шаг 4. Базовые CRUD операции в PHP
В этом уроке я покрываю основные CRUD (Create, Read, Update, Delete) операций для MySQL с помощью PHP.
Запись строки в БД
Создадим в нашем PHP проекте новый файл create_product.php который будет обеспечивать возможность записи продукта в БД.
<?php $response = array(); if (isset($_POST['name']) && isset($_POST['price']) && isset($_POST['description'])) { $name = $_POST['name']; $price = $_POST['price']; $description = $_POST['description']; require 'db_connect.php'; $db = new DB_CONNECT(); $result = mysql_query("INSERT INTO products(name, price, description) VALUES('$name', '$price', '$description')"); if ($result) { $response["success"] = 1; $response["message"] = "Product successfully created."; echo json_encode($response); } else { $response["success"] = 0; $response["message"] = "Oops! An error occurred."; echo json_encode($response); } } else { $response["success"] = 0; $response["message"] = "Required field(s) is missing"; echo json_encode($response); } ?>
Для приведенного выше кода JSON ответ будет примерно таким:
Когда POST параметр(ы) отсутствует:
{ "success": 0, "message": "Обязательное поле(я) отсутствует" }
Когда продукт успешно добавлен:
{ "success": 1, "message": "Продукт успешно создана." }
Когда ошибка при добавлении данных в БД:
{ "success": 0, "message": "Error! По каким-то причинам продукт не был добавлен." }
Чтение строки с БД
Создадим новый PHP файл в нашем проекте и назовем его get_product_details.php со следующим содержанием:
<?php $response = array(); require 'db_connect.php'; $db = new DB_CONNECT(); if (isset($_GET["pid"])) { $pid = $_GET['pid']; $result = mysql_query("SELECT *FROM products WHERE pid = $pid"); if (!empty($result)) { if (mysql_num_rows($result) > 0) { $result = mysql_fetch_array($result); $product = array(); $product["pid"] = $result["pid"]; $product["name"] = $result["name"]; $product["price"] = $result["price"]; $product["description"] = $result["description"]; $product["created_at"] = $result["created_at"]; $product["updated_at"] = $result["updated_at"]; $response["success"] = 1; $response["product"] = array(); array_push($response["product"], $product); echo json_encode($response); } else { $response["success"] = 0; $response["message"] = "No product found"; echo json_encode($response); } } else { $response["success"] = 0; $response["message"] = "No product found"; echo json_encode($response); } } else { $response["success"] = 0; $response["message"] = "Required field(s) is missing"; echo json_encode($response); } ?>
Ответ JSON для вышеупомянутого файла будет следующим.
При успешном получении продукта:
{ "success": 1, "product": [ { "pid": "1", "name": "iPHone 5", "price": "500.00", "description": "iPhone 5 white", "created_at": "2013-04-27 01:22:56", "updated_at": "0000-00-00 00:00:00" } ] }
Когда продукт не найден:
{ "success": 0, "message": "Продукт не найден." }
Получение всех продуктов с БД
Для того чтобы вывести весь список продуктов на устройство нам нужно получить все продукты с БД.
Создадим get_all_products.php со следующим содержимым:
<?php $response = array(); require 'db_connect.php'; $db = new DB_CONNECT(); $result = mysql_query("SELECT *FROM products") or die(mysql_error()); if (mysql_num_rows($result) > 0) { $response["products"] = array(); while ($row = mysql_fetch_array($result)) { $product = array(); $product["pid"] = $row["pid"]; $product["name"] = $row["name"]; $product["price"] = $row["price"]; $product["created_at"] = $row["created_at"]; $product["updated_at"] = $row["updated_at"]; array_push($response["products"], $product); } $response["success"] = 1; echo json_encode($response); } else { $response["success"] = 0; $response["message"] = "No products found"; echo json_encode($response); } ?>
JSON ответ выше приведенного кода будет таким:
{ "products": [ { "pid": "1", "name": "iPhone 5", "price": "500.00", "created_at": "2013-04-27 02:04:02", "updated_at": "0000-00-00 00:00:00" }, { "pid": "2", "name": "Macbook Pro", "price": "600.00", "created_at": "2012-04-29 02:04:51", "updated_at": "0000-00-00 00:00:00" }, { "pid": "3", "name": "Macbook Air", "price": "800.00", "created_at": "2013-04-27 02:05:57", "updated_at": "0000-00-00 00:00:00" }, { "pid": "4", "name": "OS X Lion", "price": "100.00", "created_at": "2013-04-27 02:07:14", "updated_at": "0000-00-00 00:00:00" } ], "success": 1 }
Когда продукт не найден:
{ "success": 0, "message": "Продуктов нет в БД!" }
Обновление продукта в БД
Создайте файл с именем update_product.php со следующим содержимым:
<?php $response = array(); if (isset($_POST['pid']) && isset($_POST['name']) && isset($_POST['price']) && isset($_POST['description'])) { $pid = $_POST['pid']; $name = $_POST['name']; $price = $_POST['price']; $description = $_POST['description']; require 'db_connect.php'; $db = new DB_CONNECT(); $result = mysql_query("UPDATE products SET name = '$name', price = '$price', description = '$description' WHERE pid = $pid"); if ($result) { // successfully updated $response["success"] = 1; $response["message"] = "Product successfully updated."; echo json_encode($response); } else { } } else { $response["success"] = 0; $response["message"] = "Required field(s) is missing"; echo json_encode($response); } ?>
Ответ JSON выше кода, когда продукт успешно обновлены будет следующим:
{ "success": 1, "message": "Продукт удачно обновлен!" }
Удаление продукта с БД
Последняя операция удаления из базы данных. Создайте новый файл назовите delete_product.php и вставьте следующий код:
<?php $response = array(); if (isset($_POST['pid'])) { $pid = $_POST['pid']; require 'db_connect.php'; $db = new DB_CONNECT(); $result = mysql_query("DELETE FROM products WHERE pid = $pid"); if (mysql_affected_rows() > 0) { $response["success"] = 1; $response["message"] = "Product successfully deleted"; echo json_encode($response); } else { $response["success"] = 0; $response["message"] = "No product found"; echo json_encode($response); } } else { $response["success"] = 0; $response["message"] = "Required field(s) is missing"; echo json_encode($response); } ?>
Когда продукт удачно будет удален то JSON ответ будет таким:
{ "success": 1, "message": "Продукт удачно удален!" }
Когда продукт не найден, то таким:
{ "success": 0, "message": "Продукт не найден!" }
Теперь наконец-то мы можем приступить к программированию на Android. То что мы описали выше на PHP будем использовать как API слой. И наше приложение будет общаться с MySQL сервером по средством JSON формата и GET, POST запросов.
Шаг 5. Создаем Android приложение
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
21 комментариев к статье "Как работать с MySQL в Android? Часть 1"