2013-09-25 21 views
5

你能幫助解決這個問題嗎?在java中創建一個數據庫從mysql

我試圖創建並使用一個名爲TIGER的數據庫。

我沒有問題,如果我在MySQL中創建數據庫,它運行完美。

我想要做的是從Java創建它。因此,當代碼第一次運行時,它將創建數據庫作爲初始啓動的一部分。如果可能的話,我想用乾淨的方法把它裝箱。

難道是可能有人告訴我,你真正定位代碼

下面是代碼

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

,這裏是代碼來創建數據庫

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

在此先感謝和任何和所有幫助表示讚賞

Sorr因爲我是一位長期的讀者,但是是一位新的作家,所以我錯了。

當我嘗試運行代碼的主要部分時,它會生成一個SQLException,因爲數據庫不存在。在這一點上,我想捕捉異常並在那個時候創建​​數據庫。但是當我嘗試這個時,它不會創建數據庫。

+0

可能複製http://stackoverflow.com/問題/ 717436/create-mysql-database-from-java –

+0

不知道問題是什麼。執行上面的代碼時是否出現錯誤,或者您不知道如何執行? –

+0

發佈錯誤日誌plz –

回答

2

使用此代碼嘗試。

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

你總是可以運行

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

如果這是運行在項目啓動時它會簡單地檢查數據庫是否存在,如果沒有它會創建一個新的數據庫。

參考:http://dev.mysql.com/doc/refman/5.0/en/create-database.html

+0

這是最乾淨和最清晰的方式來做到這一點。 – Kevin

0

在一個不相關的(的問題)注:

我不認爲這是有史以來一個好主意,以編程方式生成的數據庫。您最好使用數據庫附帶的實用工具。每個使用MySQL的人幾乎肯定會熟悉這個實用工具,而不必熟悉Java代碼,改變它,編譯它,並運行它來做出改變。此外,該工具具有豐富的功能集,你的Java代碼中可能沒有如分配權限,索引,建立外鍵,等

0

首先,

我想感謝所有那些回答這個問題的人都非常有幫助,以獲得不同的觀點和意見。

這是我一起合作的解決方案。

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

隨時對任何代碼發表評論。我知道使用e.printStackTrace()不是最好的前進方式,不用擔心它稍後會被修改。

0

幾點需要注意和正確─

  1. 您已經聲明連接對象爲private Connection con;,但你使用它作爲statement = Conn.createStatement();
  2. 你已經宣佈準備語句private PreparedStatement statement;參考,但要創建的實例聲明statement = Conn.createStatement();。 您的代碼應該是 -

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

注意,當executeUpdate的返回值是0,這可能意味着兩種情況之一:

  • 執行的語句是一個UPDATE語句受影響零行。

  • 執行的語句是DDL語句。

Documentation

1

最簡單的方法的問題是:

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

我建議使用此代碼片段

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