Crear base de datos desde java

Iniciado por k3ym4n, 24 Marzo 2018, 10:51 AM

0 Miembros y 1 Visitante están viendo este tema.

k3ym4n

En resumen:
Me da un error de sintaxis en el script de sql, pero al pasarlo por mysql en el xampp , el codigo en sql se ejecuta sin ningun problema.

En elcodigo para conectar con la base de datos , vereis que no hago referencia a ninguna DB.He probado a usar las que viene por defecto y luego ejecutar el script de SQL.
Tambien he quitado espacios y saltos de linea, he visualizado en notepad++ si habia algun caracter  extraño dentro de los no visibles.
La verdad no se que pasa.
Pero esto es como el chiste: "Funciona!!!, porque?, no lo se . No funciona!! , porque?, no lo se"
Gracoias de antemano, por tan solo haber abierto el post.
Os pongo el codigo por si veis algun error que mi cerebro esta un poco frito:


CREATE DATABASE login;
USE login;
CREATE TABLE usuarios(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nombre varchar (100),
apellidos varchar (100),
telefono varchar (40),
nick varchar (10),
password varchar(10),
nivel_acceso ENUM ('admin','user','query'));


MAIN:

import crear.db.java.Conectar;

public class Main {

    public static void main(String[] args) {

        Conectar conectarCrear = new Conectar();
            conectarCrear.importarQuery("G:\\MICROARTESGE\\PruebasMicroarte\\crearDBdesdejava\\DBlogin.sql");
    }
}


CREAR DB desde script en java.


package crear.db.java;

import java.io.*;
import java.sql.*;

public class Conectar {

    private String usuario,contrasena;
    private  static Connection conexion;

    public Conectar(){

        conectar();
    }


    private static void conectar(){

        conexion = null;

        try {
            String driver = "com.mysql.jdbc.Driver";
            Class.forName(driver);
            conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "");
            System.out.println("conectado con mysql");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    public static String obtenContenidoFichero(File documento){
        String sCadena ;
        String retorno ="";

        if(!documento.exists()){
            return null;
        }

        try{

            BufferedReader bf = new BufferedReader(new FileReader(documento));
            System.out.println("leyendo script de la base de datos");
            while ((sCadena = bf.readLine()) != null) {
                retorno += sCadena;
            }

        }catch(FileNotFoundException fnfe){
            return null;
        }catch(IOException ioe){
            return null;
        }

        return retorno;
    }

    public static boolean importarQuery(String scriptSQL){
        String query = obtenContenidoFichero(new File(scriptSQL));
        System.out.println("importando query");
        return ejecutarScript(query);
    }

    private static boolean ejecutarScript(String query) {

        String scriptSQL = query;
        try {
            PreparedStatement statement = conexion.prepareStatement(scriptSQL);
            System.out.println("conexion para la query");
            statement.executeLargeUpdate();
            System.out.println("query ejecutada");
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return true;
    }

}



com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right
syntax to use near '?CREATE DATABASE login;USE login;CREATE TABLE usuarios(id INTEGER UNSIGNED PRIMA' at line 1




srWhiteSkull

Citar?CREATE DATABASE login;USE login;CREATE TABLE usuarios(id INTEGER UNSIGNED PRIMA

Yo pienso que es porque no les estás pasando línea por línea, sino todo el fichero completo para que ejecute la sentencia.

Lo mejor es que metas línea por línea y para ello que mejor que hacerle un split(";") para crear el array e ir ejecutando cada elemento. De esa forma si hubiera alguna sentencia mal o no fuera compatible te mostraría la sentencia exacta que falla.

De nada  ::)

k3ym4n

Muchas gracias ,ahora estoy con otra parte del proyecto, cuando lo pruebe te digo;