2010-02-13 6 views
2

Je suis en train d'apprendre prolog. J'ai une tâche à accomplir. Je dois insérer des données dans une base de données comme Db2 express c v9.7.1 en utilisant Prolog ODBC INterface. Je sais qu'il ya quelques exemples de prédicats (SWI-Prolog) par la documentation maison SWI-Prologcharger les données entre prolog et db2

open_wordnet: - odbc_connect ('WordNet', _, [utilisateur (janvier), mot de passe (xxx), alias (wordnet), ouvert (une fois) ]). Je ne sais pas exactement comment utiliser ces prédicats et montrer un exemple de travail. Quelqu'un peut-il me dire comment utiliser ces données pour insérer des données dans une base de données comme Db2 express C v9.7.1 une fois établi la connexion entre prolog et db2 de dans eclipse sdk-win 32. Ecrivez-moi à l'adresse mail intriguer @ alice. il.

Toute aide ou information serait grandement appréciée.

Merci.

Répondre

1

il y a quelques années j'ai fait quelque chose comme ça; la base de données était sur les relations académiques/info et j'ai utilisé prolog et ODBC (plus xpce pour le gui).

premier i ouvert une connexion à la base de données:

fconn(C):- 
    odbc_connect('academia_info', C, [user(academia_info_user), 
        password(secret), alias(academia_info), open(once)]). 

ouvert (une fois) est utilisé pour éviter de reconnecter à la db et C est un gestionnaire

alors j'utilisé ce prédicat pour soumettre des requêtes:

%run_statement(+SQL,-Row) 
rs(SQL, Row):- 
    fconn(Connection), 
    odbc_query(Connection, SQL, Row). 

et si je voulais toutes les solutions que je l'ai fait

%returns all solutions (findall) 
%rsall(+SQL,-Rows) 
rsall(SQL, Rows):- 
    findall(Row,rs(SQL,Row), Rows). 

par exemple:

rsall('SELECT * FROM institution', D). 

ce prédicat prépare une requête SQL:

prep(SQL, Type, Row,Values):- 
    fconn(Connection), 
    odbc_prepare(Connection, SQL, Types,Q), %uses the types of the parameters to prepare Q 
    odbc_execute(Q,Values,Row). %executes Q by replacing the parameters with their values 

par exemple:

prep('UPDATE professor SET title = ? WHERE id IN (SELECT professor.id FROM professor, researcher, "hadPosition" WHERE professor.id = researcher.id AND professor.id = "hadPosition".researcher_id AND hadPosition.title = ? AND professor.title=? GROUP BY professor.id HAVING sum("hadPosition".end_date - "hadPosition".start_date) > ?*365)', 
     [varchar,varchar,varchar, integer],_, [MT, LT,LT, Y]). 

où s sont remplacées par les valeurs [MT, LT, LT, Y]

ici je supprime quelques trucs

delete(ID,Table):- 
    swritef(S,'DELETE FROM %t WHERE id = ?', [Table]), 
    prep(S, [integer], _ , [ID]). 

préparer une déclaration à insérer de nouvelles valeurs (il est exécuté plus tard):

prep('INSERT INTO professor (id, title) VALUES (?,?)', [integer, varchar], _, [ID,T]). 

BTW odbc_query retourne une valeur avec la ligne de format suivant (D1, D2, D3, ...., Dn) alors peut-être que vous devrez le convertir en une liste.

J'espère que les exemples ci-dessus pourraient aider .. bien que je l'ai un peu oublié les détails:/ de toute façon, l'ensemble du projet peut être trouvé here mais le code n'est pas lisible si