Ringer mysql.exe fra Java

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ringer mysql.exe fra Java for at indlæse en database. Fordi processen bare hænger, skal jeg oprette en kommandofil og sendes i brugernavnet og adgangskoden.


Eksempel indhold af command.bat:


mysql --user="\%1" --password="\%2" mydatabase < myscript.sql


Problemet er, at jeg ikke kan se output fra mysql-kommandoen for at se, om der var fejl. De vises på kommandolinjen, men jeg kan ikke synes at fange dem i en fil til parsing eller en InputStream.


Hvordan kan jeg se output fra kommandoen mysql?


BEMÆRK: At kalde mysql.exe direkte fra Java hænger, fordi mysql ikke ser ud til at sende informationen til bufferen.


BEMÆRK: Vi bruger mysql.exe i stedet for JDBC, fordi vi skal opdatere ting som udløsere. For at indsende alle udsagn til db, skal vi analysere alle kommandoer og sende dem i et ad gangen.


BEMÆRK: Dette er en kørende MySQL-database, der skal opgraderes.

Bedste reference


Hvis du kun har adgang til denne database fra Java, ville en bedre løsning være Connector/MXJ. Dette vil gøre det muligt for dig at simpelthen lave et godt dannet JDBC-opkald, og biblioteket vil tage sig af databasens opstart automatisk. [2]


I grunden indeholder jarfilen f.eks. (Eller, for flere platforme, forekomster) af mysql-serveren, der kan køres. Den indeholder også et skelet, hvor du kan indlæse præpopulerede data til din database.


Første gang du får adgang til JDBC-forbindelsen, trækker den den rigtige mysql-server ud af krukken og opretter databasen i den aktuelle mappe (ved hjælp af de forudbestemte data ovenfra). Eventuelle ændringer fra dette punkt vil være vedvarende, som forventet.


Her er nogle mere info:


Lancering via JDBC [3]


Lancering via et Java-objekt [4]

Andre referencer 1


Ikke sikker på hvorfor du ikke kan se dens output. Prøv at gøre det output til en fil, og brug derefter Java til at læse fra filen på samme tid.


Jeg har ikke prøvet det selv.

Andre referencer 2


Du skal se på Process Builder. Det giver dig mulighed for at få et håndtag på input/oputput og fejlstrøm. [5]

Andre referencer 3



  Problemet er, at jeg ikke kan se output fra mysql-kommandoen for at se, om der var fejl. > De vises på kommandolinjen, men jeg kan ikke synes at fange dem i en fil til parsing eller en
  InputStream.



Brug 2> ditfilnavn


F.eks.


mysql --user='\% 1' --password='\% 2' mydatabase < myscript.sql 2> myoutput.txt


bør fange STDERR (til hvor MySQL.exe sender sin output her)


F.eks.


mysql --user='\% 1' --password='\% 2' mydatabase < myscript.sql> myoutput.txt 2> &1


vil fange både STDOUT og STDERR i samme fil (= myoutput.txt).