Ce genre de type Java est “[B”?
J'essaie d'obtenir MD5 passe cryptés à partir de bases de données MySQL via un code Java (Hibernate). Mais je ne peux pas obtenir ni Chaîne ni raisonnable de type Java.
La seule chose que je reçois est-ce inutile de message:
java.lang.ClassCastException: [B ne peut pas être jeté aux com.mysql.jdbc.Blob (ou autre type Java, j'ai essayer de lancer pour).
Voici ma méthode:
public void testCrypto() {
session.beginTransaction();
//creates native SQL query
//uses native MySQL's MD5 crypto
final Blob pass = (Blob) session.createSQLQuery("SELECT MD5('somePass')")
.list().get(0);
session.getTransaction().commit();
}
Ici est plein de trace de pile:
java.lang.ClassCastException: [B cannot be cast to com.mysql.jdbc.Blob
at domain.DatabaseTest.testCrypto(DatabaseTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Vous devez vous connecter pour publier un commentaire.
Que mon ami est un tableau d'octets. Dans JNI, [B est utilisé pour décrire un tableau (
[
) d'octets (B
). Un tableau d'entiers est[I
etc.Vous pouvez obtenir un peu plus d'informations sur les descripteurs de champs ici:
JNI Types et Structures de Données (Tableau 3-2 devrait être ce que vous cherchez).
C'est le nom de la classe de
byte[].class
. Essayez ceci:De sortie (vous l'aurez deviné):
Et si vous souhaitez accéder, le nom lisible, utilisez
de la Classe.getCanonicalName()
:De sortie:
Que les autres réponses de l'état, qui est un tableau d'octets.
Si vous souhaitez obtenir une chaîne de caractères à partir d'un tableau d'octets, utilisez la Chaîne constructeur:
[B
est de l'encodage du nom de type d'un tableau d'octets (byte[]), qui ne devrait normalement apparaître dans le type de signature des chaînes, comme ce n'est pas un type valide nom.