2010-09-14 4 views
0

Mise en place d'une application Web Java pour une interaction utilisateur en ligne. Décidé d'utiliser une base de données MySql pour le stockage de données. J'ai déjà créé les tables avec les types de données correctes/attendues. Ma question est que j'ai toujours pensé que la prochaine étape serait de créer des procédures stockées comme Search/Add/Delete/etc .. que l'utilisateur pourrait invoquer de la page. Donc, dans mon code java je pourrais appeler la procédure ex:Création d'une application Web Java/application MySql

CallableStatement cs; 
Try 
{ 
    String outParam = cs.getString(1);  // OUT parameter 

    // Call a procedure with one in and out parameter 
    cs = connection.prepareCall("{call SearchIt(?)}"); 
    cs.registerOutParameter(1, Types.VARCHAR); 
    cs.setString(1, "a string"); 
    cs.execute(); 
    outParam = cs.getString(1);  
} 
catch (SQLException e) { 
} 

mais si ma demande n'a pas été dans la nécessité de procédures stockées parce que les actions de l'utilisateur seraient assez simples pour exécuter des requêtes simples fastidieuses. Comment pourrais-je configurer mon code Java et Sql pour gérer cela. Pourrais-je simplement avoir les instructions "Select" ou "Update" dans mon code pour manipuler les données dans ma base de données MySQL. Si oui, à quoi ressemblerait cette syntaxe? Utilisez simplement Statement ou PreparedStatement.

+0

Pas de réponse directe, mais vous pourriez envisager de regarder dans l'aide de l'API JPA (Java Persistence) au lieu de codage manuel de vos interactions de base de données avec SQL . Hibernate est une bonne option pour un outil qui implémente la spécification JPA. –

Répondre

1

Cette URL contient de la documentation sur l'utilisation des instructions préparées que vous voulez utiliser pour éviter les failles de sécurité (SQL Injection et autres).

http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html

est ici un exemple de cette page

PreparedStatement updateSales = connection.prepareStatement(
     "UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? "); 
updateSales.setInt(1, 75); 
updateSales.setString(2, "Colombian"); 
updateSales.executeUpdate(): 
0

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html

De façon similaire à ce que vous avez fait, il suffit d'appeler:

Statement stm = Connection.createStatement(); 

puis exécutez votre SQL:

stm.execute("SELECT * FROM MYTABLE"); 

saisir et vérifier ResultSet les résultats.

Méfiez-vous cependant - c'est mauvais mauvais en ce qui concerne la sécurité - comme d'autres l'ont mentionné, PreparedStatements sont un bit plus sûr, mais toujours pas 100%.

Pour être honnête, bien que JDBC de base soit assez simple, je déteste vraiment toutes les chaînes SQL jonchées autour de votre code. Si vous voulez quelque chose d'un peu plus élégant, jetez un coup d'œil à hibernate - il cache tout le caractère haineux de vous et est également très facile à installer.

+1

Vous devriez également montrer l'utilisation des objets PreparedStatement ... – atk

+0

Je suis d'accord avec atk, vous devriez utiliser PreparedStatement et ajouter des paramètres en utilisant les méthodes "set" prévues à cet effet. –

+0

Notez que l'hibernation est également sujet à des défauts d'injection. Cela peut ajouter de la valeur, mais ce n'est pas une solution miracle. – atk

Questions connexes