2013-09-25 9 views
5

Czy możesz pomóc z tym problemem.tworzenie bazy danych w mysql z java

Próbuję utworzyć, a następnie użyć bazy danych o nazwie TIGER.

Nie mam problemu, jeśli utworzę bazę danych w MySQL i działa ona idealnie.

Co chciałbym zrobić to stworzyć z Java. Tak więc, gdy kod jest uruchamiany po raz pierwszy, tworzy bazę danych w ramach pierwszego uruchomienia. Chciałbym umieścić go w miłej czystej metodzie, jeśli to możliwe.

Czy to możliwe, aby ktoś mi pokazać, gdzie faktycznie ustawić kod

Oto kod

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(); 
     } 
    } 

i tutaj jest kod, aby utworzyć bazę danych

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

Z góry dziękuję i wszelka pomoc jest doceniana.

Sorr y za błędy, ponieważ jestem długoterminowym czytelnikiem, ale nowym pisarzem.

Kiedy próbuję uruchomić główną część kodu, generuje wyjątek SQLException, ponieważ baza danych nie istnieje. W tym momencie chciałbym uchwycić wyjątek i utworzyć bazę danych w tym momencie. Ale kiedy próbuję to nie tworzy bazy danych.

+0

możliwie kopiowane http://stackoverflow.com/ pytania/717436/create-mysql-database-from-java –

+0

Nie jestem pewien, co to jest pytanie. Czy otrzymujesz błąd podczas wykonywania powyższego kodu lub nie wiesz, jak go wykonać? –

+0

rejestr błędów po błędzie plz –

Odpowiedz

2

Spróbuj tego kodu.

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

Zawsze możesz uruchomić

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

Jeśli ten jest prowadzony na uruchomienie projektu będzie to po prostu sprawdzić, czy baza danych istnieje, a jeśli nie będzie to utworzyć nową bazę danych.

Dla porównania: http://dev.mysql.com/doc/refman/5.0/en/create-database.html

+0

Jest to najczystszy i najbardziej przejrzysty sposób na zrobienie tego. – Kevin

0

Na niepowiązanych (na pytanie) Uwaga:

Nie sądzę, że to nigdy nie jest dobry pomysł, aby programowo wygenerować bazę danych. Lepiej będziesz korzystał z narzędzia, które jest dostarczane z twoją bazą danych. Każdy, kto pracuje z MySQL, prawie na pewno będzie zaznajomiony z narzędziem użytkowym i nie będzie musiał zaznajomić się z kodem Java, zmienić go, skompilować i uruchomić, aby wprowadzić zmiany. Ponadto, narzędzie posiada bogaty zestaw funkcji, że kod Java prawdopodobnie nie ma takich jak przypisywanie uprawnień, indeksowanie, tworzenie kluczy obcych itp

0

Przede wszystkim

chciałbym podziękować wszyscy, którzy udzielili odpowiedzi, byli bardzo pomocni, aby uzyskać różne opinie i opinie.

Oto rozwiązanie, które mam razem.

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(); 
     } 
    } 
    } 

Zapraszam do komentowania dowolnego kodu. Wiem, że używanie e.printStackTrace() nie jest najlepszą drogą do przodu, nie martw się, to będzie później modyfikowane.

0

kilka punktów, aby pamiętać i korygowane

  1. Ty zadeklarowały obiektu Connection jako private Connection con; ale używasz go jako statement = Conn.createStatement();
  2. pan uznany za odniesienie do przygotowanym oświadczeniu private PreparedStatement statement; ale tworzysz instancję Oświadczenie statement = Conn.createStatement();. Kod powinien być -

    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(); 
    } 
    

Zauważ, że gdy wartość zwracana dla executeUpdate jest 0, to może oznaczać jedną z dwóch rzeczy:

  • Oświadczenie wykonywany był instrukcję aktualizacji, która wpływ na zero wierszy.

  • Wykonane wyrażenie było instrukcją DDL.

Documentation

1

Łatwe podejście do problemu jest:

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

Proponuję użyć tego fragmentu kodu

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(); 
    } 
}