2013-09-25 9 views
5

Potrebbe aiutare con questo problema.creazione di un database in mysql da java

Sto provando a creare e quindi utilizzare un database chiamato TIGER.

Non ho alcun problema se creo il database in MySQL e funziona perfettamente.

Quello che mi piacerebbe fare è crearlo da Java. In modo che quando il codice viene eseguito per la prima volta, crea il database come parte del lancio iniziale. Mi piacerebbe inscatolarlo in un bel metodo pulito, se possibile.

Potrebbe essere possibile che qualcuno me per mostrare dove realmente posizionare il codice

Ecco il codice

private String jdbcDriver = "com.mysql.jdbc.Driver"; 
    private String dbAddress = "jdbc:mysql://localhost:3306/"; 
    private String dbName = "TIGER"; 
    private String userName = "root"; 
    private String password = ""; 

    private PreparedStatement statement; 
    private ResultSet result; 
    private Connection con; 

    public DbStuff() { 
     try { 
      Class.forName(jdbcDriver); 
      con = DriverManager.getConnection(dbAddress + dbName, userName, password); 
     } 

     catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

e qui è il codice per creare il database

con = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
    statement = Conn.createStatement(); 
    int myResult = statement.executeUpdate("CREATE DATABASE TIGER"); 

Grazie in anticipo e qualsiasi aiuto è apprezzato

Sorr per gli errori perché sono un lettore a lungo termine ma un nuovo scrittore.

Quando provo, eseguo la parte principale del codice genera un SQLException perché il database non esiste. A questo punto vorrei rilevare l'eccezione e creare il database a quel punto. Ma quando provo questo non crea il database.

+0

possibile duplicato http://stackoverflow.com/ domande/717436/create-mysql-database-from-java –

+0

Non so quale sia la domanda. Hai un errore durante l'esecuzione del codice sopra o non sai come eseguirlo? –

+0

post error log plz –

risposta

2

Provare con questo codice.

public class DbStuff { 

    private static String jdbcDriver = "com.mysql.jdbc.Driver"; 
    private static String dbName = "TIGER"; 


    public static void main(String[] args) throws Exception { 
     Class.forName(jdbcDriver); 
     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password="); 
     Statement s = conn.createStatement(); 
     int Result = s.executeUpdate("CREATE DATABASE "+dbName); 
    } 
} 
10

Si può sempre correre

int myResult = statement.executeUpdate("CREATE DATABASE IF NOT EXISTS TIGER;") 

Se questo è riceve un progetto di start up sarà semplicemente verificare se il database esiste e se non lo fa sarà creare il nuovo database.

Per riferimento: http://dev.mysql.com/doc/refman/5.0/en/create-database.html

+0

Questo è il modo più pulito e chiaro per farlo. – Kevin

0

Su una nota indipendenti (alla domanda):

Non credo che sia mai una buona idea per generare a livello di codice del database. Farai meglio a usare lo strumento di utilità fornito con il tuo database. Tutti quelli che lavorano con MySQL avranno quasi certamente familiarità con lo strumento di utilità e non dovranno familiarizzare con il tuo codice Java, cambiarlo, compilarlo ed eseguirlo per apportare una modifica. Inoltre, l'utilità ha un ricco set di funzionalità che il codice Java probabilmente non ha, come l'assegnazione di autorizzazioni, l'indicizzazione, la creazione di chiavi esterne, ecc

0

Prima di tutto,

Vorrei ringraziare tutti quelli che hanno risposto è stato davvero molto utile per ottenere opinioni e opinioni diverse.

Ecco la soluzione che ho insieme.

public class DbStuff { 
    private String jdbcDriver = "com.mysql.jdbc.Driver"; 
    private String dbAddress = "jdbc:mysql://localhost:3306/"; 
    private String userPass = "?user=root&password="; 
    private String dbName = "TIGER"; 
    private String userName = "root"; 
    private String password = ""; 

    private PreparedStatement statement; 
    private ResultSet result; 
    private Connection con; 

    public DbStuff() { 

     try { 
      Class.forName(jdbcDriver); 
      con = DriverManager.getConnection(dbAddress + dbName, userName, password); 
     } 

     catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
     catch (SQLException e) { 
      createDatabase(); 
     } 
    } 

    private void createDatabase() { 
     try { 
     Class.forName(jdbcDriver); 
     con = DriverManager.getConnection(dbAddress + userPass); 
     Statement s = con.createStatement(); 
     int myResult = s.executeUpdate("CREATE DATABASE " + dbName); 
     } 
     catch (ClassNotFoundException | SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    } 

Sentitevi liberi di commentare qualsiasi codice. So che usare e.printStackTrace() non è la migliore strada da seguire, non preoccuparti Sarà modificato in seguito.

0

Pochi punti da notare e corretta-

  1. Hai dichiarato oggetto Connection come private Connection con;, ma si sta usando come statement = Conn.createStatement();
  2. Hai dichiarato un riferimento alla dichiarazione preparata private PreparedStatement statement; ma si sta creando un'istanza di Dichiarazione statement = Conn.createStatement();. Il codice dovrebbe essere -

    try { 
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
        Statement statement = con.createStatement(); 
        int myResult = statement.executeUpdate("CREATE DATABASE IF NOT EXISTS TIGER"); //should get 0 
    } 
    catch (SQLException e) { 
        System.out.println("Database creation failed"); 
        e.printStackTrace(); 
    } 
    

Si noti che quando il valore restituito per executeUpdate è 0, può significare una delle due cose:

  • L'istruzione eseguita è stata una dichiarazione di aggiornamento che righe zero interessate.

  • L'istruzione eseguita è stata una dichiarazione DDL.

Documentation

1

L'approccio al problema è semplice:

package Database; 
import java.sql.*; 

public class Database { 

public static void main(String[] args) { 
    final String URl = "JDBC:mysql:/localhost:3306/info"; 
    final String id = "root"; 
    final String password = ""; 

    try 
    { 
     Connection con1 = DriverManager.getConnection(URl,id,password); 
     Statement s1 = con1.createStatement(); 
     String s = "CREATE DATABASE CLASSIFIED"; 
     s1.executeUpdate(s); 

    } 
    catch(SQLException err) 
    { 
     System.out.println(err.getMessage()); 
    } 

} 

} 
0

Suggerisco di usare questo frammento di codice

private String jdbcDriver = "com.mysql.jdbc.Driver"; 
private String dbAddress = "jdbc:mysql://localhost:3306/TIGER?createDatabaseIfNotExist=true"; 
private String userName = "root"; 
private String password = ""; 

private PreparedStatement statement; 
private ResultSet result; 
private Connection con; 

public DbStuff() { 
    try { 
     Class.forName(jdbcDriver); 
     con = DriverManager.getConnection(dbAddress, userName, password); 
    } 

    catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
Problemi correlati