[JAVA] Lorsque vous souhaitez lier InputStream dans JDBI3

Je pourrais le faire avec JDBI2

@SqlUpdate("update samples set file = :file where flag = true")
int updateFile(@Bind("file") InputStream file);
@SqlUpdate("update samples set file = :file where flag = true")
fun updateFile(@Bind("file") file: InputStream?): Int

Ce n'est pas possible avec JDBI3 ...

org.jdbi.v3.core.statement.UnableToCreateStatementException: No argument factory registered for type ...

J'obtiens une erreur comme

Lorsque j'ai recherché un message d'erreur sur GitHub, ↓ est suspect

return new UnableToCreateStatementException("No argument factory registered for '" + value + "' of qualified type " + qualifiedType, ctx);

https://github.com/jdbi/jdbi/blob/3c93a316d5cbf9507e668b62414daae759641e93/core/src/main/java/org/jdbi/v3/core/statement/ArgumentBinder.java#L174

Apparemment, l'objet à lier doit implémenter l'interface Argument.

(Ajoutez des détails si vous en avez envie)

L'interface pour Bind a été préparée

La solution est d'utiliser InputStreamArgument

@SqlUpdate("update samples set file = :file where flag = true")
int updateFile(@Bind("file") InputStreamArgument file);
@SqlUpdate("update samples set file = :file where flag = true")
fun updateFile(@Bind("file") file: InputStreamArgument?): Int

http://jdbi.org/apidocs/org/jdbi/v3/core/argument/InputStreamArgument.html

InputStream comme premier argument Le deuxième argument est la taille du Stream Indiquez si c'est ASCII ou non dans le troisième argument

public InputStreamArgument(InputStream stream,
                           int length,
                           boolean ascii)
Parameters:
stream - the stream to bind
length - the length of the stream
ascii - true if the stream is ASCII

Recommended Posts

Lorsque vous souhaitez lier InputStream dans JDBI3
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
ProxyFactory est pratique lorsque vous souhaitez tester AOP avec Spring!
Une note quand vous voulez Tuple en Java
Lorsque vous souhaitez utiliser la méthode à l'extérieur
[Swift] Utilisez nonzeroBitCount lorsque vous voulez popcnt dans Swift
[Ruby] Lorsque vous souhaitez remplacer plusieurs caractères
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
Code à utiliser lorsque vous souhaitez traiter Json en Java avec uniquement des bibliothèques standard
Lorsque vous souhaitez écrire explicitement OR ou AND avec ransack
docker-compose.yml lorsque vous voulez garder mysql en cours d'exécution avec docker
lombok.config lorsque vous voulez passer @Qualifier à @RequiredArgsConstructor avec lombok
Delicate est pratique à utiliser lorsque vous souhaitez réutiliser des pièces
[Ruby + Rails] Lorsque vous souhaitez vous inscrire dans la liste de diffusion de Mailchimp avec l'enregistrement de l'utilisateur
Comment écrire dans la classe Model lorsque vous souhaitez enregistrer des données binaires dans DB avec PlayFramework
Utilisez JLine lorsque vous souhaitez gérer les frappes sur la console caractère par caractère en Java
Lorsque vous souhaitez implémenter des tests de bibliothèque Java avec Spock en multi-module avec Gradle dans Android Studio 3
Lorsque vous souhaitez refléter les informations de la branche principale dans la branche actuelle sur laquelle vous travaillez actuellement
Si vous souhaitez inclure la classe parente dans @builder de Lombok
Paramètre qui se convertit en binding.pry lorsque vous tapez pry dans VScode
Lorsque vous avez introduit la devise mais que vous souhaitez ajouter plus de colonnes
Pratique à utiliser lorsque vous souhaitez exécuter différents groupes de traitement en série
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Comment écrire lorsque vous souhaitez conserver les sauts de ligne et la sortie tout en évitant XSS dans Rails
Comment écrire lorsque vous voulez gérer un "tableau de chaînes en langage C" comme argv [] dans Ruby-FFI
Que faire lorsque vous souhaitez connaître la position source où la méthode est définie dans binding.pry
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
Lorsque vous souhaitez que Rails désactive une session pour un contrôleur spécifique
Résumé des moyens lorsque vous souhaitez communiquer avec HTTP sur Android
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]
(Limité à Java 7 ou version ultérieure) Je souhaite que vous compariez des objets dans Objects.equals
Commandes de base de Rails que vous souhaitez apprendre
Si vous souhaitez incorporer dynamiquement des valeurs et ajouter du texte aux valeurs d'attribut dans Thymeleaf 3
La première chose à faire lorsque vous voulez être satisfait d'Heroku sur GitHub avec Eclipse sur Java
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
Je veux utiliser @Autowired dans Servlet
Que faire lorsque vous pensez que vous ne pouvez pas Groovy-> Java avec IntelliJ IDEA CE
Si vous souhaitez satisfaire la couverture de test des méthodes privées dans JUnit
Vous pouvez ne pas vouloir utiliser la méthode remove sur ArrayList très souvent
Mémo Android Studio indiquant que vous souhaitez afficher les caractères Toast en grande taille
Si vous souhaitez modifier les colonnes de la base de données, etc.
Je souhaite envoyer un e-mail en Java.
Lorsque Eclipse ne parvient pas à démarrer le serveur
Quand tu te perds dans le nom de la classe
Je souhaite transmettre APP_HOME pour me connecter à Gradle
rsync4j --Je veux toucher rsync en Java.
Comment se lier avec un fichier de propriétés dans Spring Boot
Je veux être finalement même à kotlin
Points à garder à l'esprit lorsque vous vous engagez dans CRuby
Qu'utilisez-vous lors de la conversion en String?
Que faire si IllegalStateException se produit dans PlayFramework