[Résolu][Base] erreur nullpointerexception sur INSERT INTO
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- NOOuvel adepte
- Messages : 12
- Inscription : 27 mars 2016 13:02
[Résolu][Base] erreur nullpointerexception sur INSERT INTO
Bonjour,
J'ai une macro qui créé une base de données, et insère des milliers de données dans la base, en utilisant le code disponible dans les "suprêmes de codes". (statement.executeUpdate())
Les insertions se déroulent très bien, jusqu'à un certain moment où le programme plante avec un "com.sun.star.sdbc.SQLException
Message: java.io.IOException: java.lang.NullPointerException in statement [INSERT INTO ". Le plantage n'apparaît pas systématiquement sur la même ligne à insérer, ce n'est donc pas lié au contenu des données à insérer.
Le programme plante vers le 10 000 ème enregistrement, parfois il atteint le 12 000 ème.
J'ai l'impression que c'est un soucis de mémoire (plantage aléatoire au bout d'un certain temps d'éxecution), j'ai tenté d'augmenter la mémoire de la JRE, sans succès.
Afin de débogger je n'ai que le message "java.null.pointerException", il y a t'il une astuce pour obtenir d'avantage d'information sur l'origine de l'erreur ?
J'ai déjà essayé :
-d'utiliser des "preparedstatement" au lieu des "statements" pour améliorer les performances : sans effet
- de fermer la connection à la base au bout de 10 000 insert et de la rouvrir avant d'insérer les lignes suivantes : sans effet
Merci d'avance pour votre aide.
J'ai une macro qui créé une base de données, et insère des milliers de données dans la base, en utilisant le code disponible dans les "suprêmes de codes". (statement.executeUpdate())
Les insertions se déroulent très bien, jusqu'à un certain moment où le programme plante avec un "com.sun.star.sdbc.SQLException
Message: java.io.IOException: java.lang.NullPointerException in statement [INSERT INTO ". Le plantage n'apparaît pas systématiquement sur la même ligne à insérer, ce n'est donc pas lié au contenu des données à insérer.
Le programme plante vers le 10 000 ème enregistrement, parfois il atteint le 12 000 ème.
J'ai l'impression que c'est un soucis de mémoire (plantage aléatoire au bout d'un certain temps d'éxecution), j'ai tenté d'augmenter la mémoire de la JRE, sans succès.
Afin de débogger je n'ai que le message "java.null.pointerException", il y a t'il une astuce pour obtenir d'avantage d'information sur l'origine de l'erreur ?
J'ai déjà essayé :
-d'utiliser des "preparedstatement" au lieu des "statements" pour améliorer les performances : sans effet
- de fermer la connection à la base au bout de 10 000 insert et de la rouvrir avant d'insérer les lignes suivantes : sans effet
Merci d'avance pour votre aide.
Libre office Version 4.3.7.2 (obligation de version) + windows 7 SP1
-
- PassiOOnné
- Messages : 626
- Inscription : 09 août 2017 22:15
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
hello,
quels types de données cherches-tu à importer ? y-a-t-il des données binaires du genre images , photos , sons , vidéos ? cela représente un volume d'environ combien de Mégaoctets ?
Ami calmant, J.P
quels types de données cherches-tu à importer ? y-a-t-il des données binaires du genre images , photos , sons , vidéos ? cela représente un volume d'environ combien de Mégaoctets ?
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
-
- NOOuvel adepte
- Messages : 12
- Inscription : 27 mars 2016 13:02
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
Bonjour,
Ce sont de simples varchar, j'ai même simplifié le code au point de créer une base avec 4 champs : un integer et 3 varchar(100).
Ce sont de simples varchar, j'ai même simplifié le code au point de créer une base avec 4 champs : un integer et 3 varchar(100).
Libre office Version 4.3.7.2 (obligation de version) + windows 7 SP1
-
- PassiOOnné
- Messages : 626
- Inscription : 09 août 2017 22:15
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
si ta base et tes données ne sont pas confidentielles pourraient - tu mettre en pièce jointe une petite partie de ton fichier calc et la base qui doit accueillir les données ?
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
-
- NOOuvel adepte
- Messages : 12
- Inscription : 27 mars 2016 13:02
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
Je viens de créer une fonction spécifique pour recréer facilement le problème :
Au bout de 10 000 enregistrements j'ai un plantage. Je ne comprends vraiment pas....requete= "CREATE TABLE ""test"" ( ""ID"" INTEGER PRIMARY KEY,""test1"" VARCHAR(100),""test2"" VARCHAR(100),""test3"" VARCHAR(100))"
oRequete = oStatement.executeQuery( requete )
statement= oBase.PrepareStatement("INSERT INTO ""test"" (""ID"",""test1"",""test2"",""test3"") VALUES (?,?,?,?)")
i=1
Do
statement.setInt(1,i)
statement.setString(2,"test1")
statement.setString(3,"test2")
statement.setString(4,"test3")
statement.executeUpdate()
if i mod 100 = 0 Then
feuilleAccueil.getCellRangeByName("A2").setString(i)
End if
i=i+1
Loop until i>50000
Libre office Version 4.3.7.2 (obligation de version) + windows 7 SP1
-
- NOOuvel adepte
- Messages : 12
- Inscription : 27 mars 2016 13:02
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
Ci-joint un exemple plus précis :
Ici, de nombreuses lignes sont créés avant un plantage (180 000 lignes environ), ce qui me laisse penser à un pb de mémoire, car sur ma base principale (qui contient bien plus de colonnes), le plantage a lieu au environ du 10 000 ème enregistrement.Sub bug
On Error Goto erreurInsertion
feuilleAccueil = thisComponent.sheets().getByName("ACCUEIL")
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Fichier = ConvertToURL("C:\test.odb")
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oDBContext.getbyName(Fichier)
oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()
oBase = oDB.getConnection("","")
strSQL= "DROP TABLE IF EXISTS ""test"" "
oRequete = oStatement.executeQuery( strSQL )
requete= "CREATE TABLE ""test"" ( ""ID"" INTEGER PRIMARY KEY,""test1"" VARCHAR(100),""test2"" VARCHAR(100),""test3"" VARCHAR(100))"
oRequete = oStatement.executeQuery( requete )
statement= oBase.PrepareStatement("INSERT INTO ""test"" (""ID"",""test1"",""test2"",""test3"") VALUES (?,?,?,?)")
i=1
Do
statement.setInt(1,i)
statement.setString(2,"test1")
statement.setString(3,"test2")
statement.setString(4,"test3")
statement.executeUpdate()
if i mod 100 = 0 Then
feuilleAccueil.getCellRangeByName("A2").setString(i)
End if
i=i+1
Loop until i>500000
oStatement.Close
oBase.Close
oBase.Dispose
erreurInsertion:
Msgbox "erreur :" & error
End sub
Libre office Version 4.3.7.2 (obligation de version) + windows 7 SP1
-
- NOOuvel adepte
- Messages : 12
- Inscription : 27 mars 2016 13:02
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
Je viens de tester une nouvelle version du code :
sql="INSERT INTO ""test"" (""ID"",""test1"",""test2"",""test3"") VALUES ('" & i & "','testt1','testtt2','testtt3')"
oStatement2.executeUpdate( sql )
Le problème est identique: plantage au bout de plusiers milliers d'enregistrements...
sql="INSERT INTO ""test"" (""ID"",""test1"",""test2"",""test3"") VALUES ('" & i & "','testt1','testtt2','testtt3')"
oStatement2.executeUpdate( sql )
Le problème est identique: plantage au bout de plusiers milliers d'enregistrements...
Libre office Version 4.3.7.2 (obligation de version) + windows 7 SP1
-
- NOOuvel adepte
- Messages : 12
- Inscription : 27 mars 2016 13:02
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
Je viens de tester à nouveau, cette fois ci en recréant le statement à chaque insert :
Message: S1000 General error java.lang.NullPointerException.
Visiblement l'erreur S1000 correspond à :S1000 Data file size limit error
Le message d'erreur est plus clair :oStatement2 = oBase.createStatement()
sql="INSERT INTO ""test"" (""ID"",""test1"",""test2"",""test3"") VALUES ('" & i & "','testt1','testtt2','testtt3')"
' msgbox sql
oStatement2.executeUpdate( sql )
oStatement2.Close
Type: com.sun.star.sdbc.SQLException
Message: S1000 General error java.lang.NullPointerException.
Visiblement l'erreur S1000 correspond à :S1000 Data file size limit error
Libre office Version 4.3.7.2 (obligation de version) + windows 7 SP1
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
Bonjour,
Peut-être cette section du guide de l'utilisateur HSQL pourra-t-elle t'éclairer : Utilisation de la mémoire et du disque
Cordialement.
Peut-être cette section du guide de l'utilisateur HSQL pourra-t-elle t'éclairer : Utilisation de la mémoire et du disque
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- RespOOnsable forum
- Messages : 12226
- Inscription : 08 nov. 2005 16:23
- Localisation : Caen, France
Re: [Calc][Base] erreur nullpointerexception sur INSERT INTO
Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.
Je ne comprends pas le double balisage.
Pour moi, le problème relève de Base uniquement.
Pour être aidé efficacement par les bénévoles et surtout leur faire gagner du temps, veuillez fournir un document explicatif intégrant cette macro.
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.
Je ne comprends pas le double balisage.
Pour moi, le problème relève de Base uniquement.
Pour être aidé efficacement par les bénévoles et surtout leur faire gagner du temps, veuillez fournir un document explicatif intégrant cette macro.
-
- PassiOOnné
- Messages : 626
- Inscription : 09 août 2017 22:15
Re: [Base] erreur nullpointerexception sur INSERT INTO
hello,
je ne pense pas que Base soit l'idéal pour traiter un gros volume de données. Le fait que la base de données soit intégrée à l'intérieur du fichier odb va un peu "plomber" le fichier qui va mettre du temps à s'ouvrir, à s'enregistrer et comme tu as pu le constater il semble y avoir des problèmes de mémoire. Il faudrait peut-être mieux se tourner vers une base de données externe (avec serveur) plus adaptée à un gros volume de données. Sinon il y a moyen de "brancher " un fichier csv dans base en passant par une table texte (voir ici)
Ami calmant, J.P
je ne pense pas que Base soit l'idéal pour traiter un gros volume de données. Le fait que la base de données soit intégrée à l'intérieur du fichier odb va un peu "plomber" le fichier qui va mettre du temps à s'ouvrir, à s'enregistrer et comme tu as pu le constater il semble y avoir des problèmes de mémoire. Il faudrait peut-être mieux se tourner vers une base de données externe (avec serveur) plus adaptée à un gros volume de données. Sinon il y a moyen de "brancher " un fichier csv dans base en passant par une table texte (voir ici)
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
-
- IdOOle de la suite
- Messages : 25172
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
Re: [Base] erreur nullpointerexception sur INSERT INTO
Base peut tout à fait se connecter à une source externe avec par exemple, une connexion native à MySQL.Jurassic Pork a écrit :je ne pense pas que Base soit l'idéal pour traiter un gros volume de données. [...] Il faudrait peut-être mieux se tourner vers une base de données externe (avec serveur) plus adaptée
-
- NOOuvel adepte
- Messages : 12
- Inscription : 27 mars 2016 13:02
Re: [Base] erreur nullpointerexception sur INSERT INTO
Bonjour,
Il s'agissait effectivement d'une erreur de saturation mémoire, il est nécessaire de réaliser régulièrement des "shutdown compact" pour compacter la base de données.
Dorénavant j'ai donc intégré les lignes de code suivantes toutes les 100 insertions :
Par contre de temps en temps j'ai un message "Access Denied: session is closed", dans ce cas il est nécessaire de killer openoffice, puis de relancer le programme.
J'ai visiblement un problème avec les Close ou Dispose, je ne suis pas certain d'avoir tout compris... En tout cas mon principal problème est résolu, j'arrive dorénavant à créer mon fichier sans problème.
Il s'agissait effectivement d'une erreur de saturation mémoire, il est nécessaire de réaliser régulièrement des "shutdown compact" pour compacter la base de données.
Dorénavant j'ai donc intégré les lignes de code suivantes toutes les 100 insertions :
Je n'ai plus de message d'erreur NullPointerException.statement = oBase.createStatement()
sql="SHUTDOWN COMPACT"
'réduction de la base de données
statement.execute( sql )
statement.Close
oBase.Close
oBase.Dispose
'sauvegarde de la base de données
oDataSource.DatabaseDocument.store()
'réouverture de la bdd
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = oDBContext.getbyName("test")
oBase = oDataSource.getConnection("","")
Par contre de temps en temps j'ai un message "Access Denied: session is closed", dans ce cas il est nécessaire de killer openoffice, puis de relancer le programme.
J'ai visiblement un problème avec les Close ou Dispose, je ne suis pas certain d'avoir tout compris... En tout cas mon principal problème est résolu, j'arrive dorénavant à créer mon fichier sans problème.
Libre office Version 4.3.7.2 (obligation de version) + windows 7 SP1
-
- PassiOOnné
- Messages : 626
- Inscription : 09 août 2017 22:15
Re: [Base] erreur nullpointerexception sur INSERT INTO
hello,
Ami calmant, J.P
En fait je ne suis mal exprimé , je voulais dire par là que pour des gros volumes de données il est préférable de se connecter à un système de base de données plus adéquate (genre mysql, postgresql, sql server) plutôt qu'avec le système de base de données natif de 0.0 Base (hsqldb). Il est bien entendu que l'on peut faire cette connexion dans Base avec JDBC ou SDBC.Dude a écrit :Base peut tout à fait se connecter à une source externe avec par exemple, une connexion native à MySQL.Jurassic Pork a écrit :je ne pense pas que Base soit l'idéal pour traiter un gros volume de données. [...] Il faudrait peut-être mieux se tourner vers une base de données externe (avec serveur) plus adaptée
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04