2016-08-02 1 views
1

J'ai une base de données existante en cours d'exécution sur la télécommande MS SQL server, et je veux être en mesure de communiquer et d'interagir avec cette base de données de Xcode. J'écris une application pour OS X dans Swift, et les données que l'application doit utiliser, sont stockées dans cette base de données à distance.Xcode se connecter à la base de données MS SQL

Le problème est que je ne trouve aucune bibliothèque Swift pouvant se connecter à la base de données MS SQL server. Jusqu'à présent, j'ai seulement trouvé cette bibliothèque open-source: SQLClient in Objective-C, mais il est assez difficile de le régler, d'autant plus que je ne suis pas familier avec le Objective-C.

Aussi, je continue à voir cette bibliothèque Core-Data étant mentionné chaque fois qu'il y a une certaine communication avec la base de données, mais autant que je comprends Core-Data ne sait pas comment se connecter à la base de données MS SQL.

Quelqu'un a-t-il une expérience dans la connexion du Xcode Swift app à la base de données MS SQL distante? Comment devrait-on faire cela? Tout type de conseil est plus que bienvenu, parce que je suis en quelque sorte coincé avec ce problème.

+1

Vous devez préciser que vous ne voulez pas XCode de se connecter à la base de données, mais votre application, écrit à Swift – FredericP

+0

Avez-vous trouvé la solution sans service web? –

Répondre

2

L'idéal est d'écrire des webservices dans n'importe quel langage de serveur tel que php, asp etc. Les webservices communiqueront avec votre base de données mysql et votre code rapide communiquera avec les webservices.

+0

Je sais que l'idéal est d'écrire un webservice, mais le serveur SQL est distant, je n'ai que la chaîne de connexion à la base de données. Je ne suis pas sûr si je suis même capable d'écrire un webservice pour un serveur distant? Je ne connais que le domaine du serveur et les paramètres utilisateur/mot de passe. Je ne pense pas que l'écriture d'un webservice est une option ici? – zwiebl

+0

Oui, vous pouvez écrire des webservices pour une base de données distante. Le domaine du serveur est l'hôte de votre serveur et vous avez les informations d'identification –

0

Il est vraiment mauvais pour une application (mobile, web, n'importe quel client) d'avoir directement accès à n'importe quelle base de données pour des problèmes de sécurité. Les clients ne devraient pas vraiment accéder à la base de données, qui contient souvent des données très privées/sécurisées. Cela ouvre des vulnérabilités (c'est-à-dire, une attaque par injection SQL).

Un ensemble de services Web écrits en PHP ou Java ou une technologie back-end est un système plus sécurisé et évolutif. Ces services Web peuvent se connecter à la base de données et récupérer des données. Votre application iOS peut appeler les services Web et recevoir les données, par exemple sous la forme XML ou JSON.

Mieux vaut utiliser le service web.

également CoreData peut utiliser en dessous de 4 persistant magasin enter image description here

+0

La chose est que le serveur est sur un emplacement distant, je n'ai pas accès au serveur. La base de données est exécutée sur un serveur situé à l'université, et on m'a donné seulement la chaîne de connexion, c.-à-d.les paremètres pour s'y connecter. Tout ce que je sais du côté serveur est le suivant: source de données = {domaine_serveur} \ SQL2012,3000; catalogue initial = {mon_catalogue}; persistance info sécurité = Vrai; ID utilisateur = {nom d'utilisateur}; mot de passe = {mot de passe}; Est-ce que je peux encore écrire un web-service? – zwiebl

+0

ouais vous pouvez écrire votre service si vous avez la chaîne de connecion! –

2

Je suggère d'écrire un webservice avec php par exemple pour utiliser des données mysql et fournir une réponse JSON/xml: ceci est un exemple de code qui peut vous aider pour obtenir des données de base de données et l'analyser à JSON.

function getOneAdminByUserName($cin){ 

require('connect.php'); 

//fetch table rows from mysql db 
$sql = "SELECT * FROM `admin` WHERE cin= '".$cin."'"; 
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection)); 


if(mysqli_num_rows($result)>0){ 
    $myArray = array(); 
while($row =mysqli_fetch_assoc($result)) 
{ 
    array_push($myArray , $row); 
} 
return json_encode($myArray); 
//return json_encode(mysqli_fetch_assoc($result)); 
} 
else{ 
return "no"; 
} 

Ensuite, vous pouvez consommer le service sur votre application ios avec AFnetworking

NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"]; 
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(NSURLSessionTask *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}];