2009-12-15 9 views
-1

I ont une table SQL qui a 7 colonne et la première six colonne, le type de chaîne de magasin mais le dernier BLOB une boutique type.I obtenir ces 6 types de chaînes de caractères avec la méthode addBirth et pour stocker l'image de la dernière colonne, j'utiliser insertImageToBirthTable méthode. Je veux stocker des chaînes et blob pas ensemble parce que l'utilisateur ne peut pas choisir une photo pour ajouter une personne. (J'ai édité mon post et maintenant j'utiliser cette méthode pour stocker mon image, mais il a encore de la valeur NULL dans la table SQL, pourquoi ???) Aussi j'ai imprimé le fichier pathfile et ce n'était pas nul.comment puis-je définir une image dans la septième colonne?

ma méthode insertImageToBirthTable:

public static void insertImageToBirthTable (String name, famille String, String fatherName, String motherName, String dateOfBirth, String placeOfBirth, String pathFile) {

try { 
    System.out.println(pathFile); 
    File file = new File(pathFile); 
    FileInputStream input = new FileInputStream(file); 
    PreparedStatement stmt = (PreparedStatement) conn.prepareStatement("UPDATE birthtable SET image =? WHERE name = '" + name + "'AND family ='" + family + "'AND fatherName = '" + fatherName + "'AND motherName ='" + motherName + "' AND dateOfBirth = '" + dateOfBirth + "' AND placeOfBirth = '" + placeOfBirth + "'"); 
    stmt.setBinaryStream(1, input); 
    stmt.executeUpdate(); 


} catch (Exception e) { 
    e.printStackTrace(); 
} 

}

+0

Ohoh, je l'obtiens mon nom est nul: "> – Johanna

Répondre

3

La lecture du message de l'exception révèle:

Aucune valeur spécifiée pour le paramètre 1

Alors ... dois-je l'épeler pour vous? (Indice:.. Vous devez spécifier des valeurs pour tous paramètres dans votre PreparedStatement Une seule valeur ne fera pas)

+0

Je l'obtiens! Merci beaucoup [: |] – Johanna

1

Si vous voulez ajouter l'image plus tard, vous avez besoin d'une « clé primaire » dans votre table. La clé primaire vous donne un moyen simple d'identifier une colonne spécifique. Ajouter une colonne comme celui-ci à votre table:

ID serial, 

Omettre cette colonne pendant insertion et exécuter cette requête après l'insertion d'apprendre la clé primaire de votre nouvelle colonne:

SELECT @@IDENTITY 

Plus tard, quand vous finalement obtenir l'image, exécutez cette mise à jour:

update set imageBlob = ? where ID = ? 

Utilisez votre InputStream pour le premier paramètre et la clé primaire pour la seconde.

[EDIT] Voir this page pour un exemple complet comment insérer une image dans une table.

+0

merci, je vais l'essayer – Johanna

+0

cette requête est vrai? Si je veux utiliser le nom au lieu de l'id . UPDATE table de naissance SET image = '"+ entrée +' 'WHERE nom ='" + nom + "'; – Johanna

+1

C'est la chaîne à passer à 'prepareStatement()'. alors vous devez définir les paramètres. ** Jamais ** utiliser la concaténation de chaîne pour ajouter des paramètres à vos instructions SQL. –

0

vous obtenez l'exception parce que vous devez fournir tous les paramètres que vous avez dans votre sql (tous les points d'interrogation).

Si vous ne devez fournir que la colonne imageBlob (je suppose que vous l'appeliez) alors que toutes les autres colonnes sont définies par défaut, vous pouvez nommer les colonnes pour lesquelles vous souhaitez spécifier des valeurs dans votre SQL. ,

query = ("insert into birthtable (imageBlob) VALUES (?)");

Bien qu'une mise à jour semble plus approprié ici qu'un insert, une autre option est de l'inclure dans votre ou principal nul d'insertion et de l'offre pour cette colonne quand il n'y a pas d'image.

Questions connexes