2013-09-25 74 views
5

Bạn có thể trợ giúp với vấn đề này không.tạo cơ sở dữ liệu trong mysql từ java

Tôi đang cố tạo và sau đó sử dụng cơ sở dữ liệu có tên TIGER.

Tôi không có vấn đề gì nếu tôi tạo cơ sở dữ liệu trong MySQL và nó chạy hoàn hảo.

Điều tôi muốn làm là tạo nó từ Java. Vì vậy, khi mã được chạy lần đầu tiên nó tạo cơ sở dữ liệu như là một phần của khởi chạy ban đầu. Tôi muốn hộp nó lên trong một phương pháp sạch đẹp nếu có thể.

Nó có thể được có thể cho một người nào đó cho tôi xem nơi bạn thực sự vị trí mã

Đây là mã

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

và đây là đoạn code để tạo ra cơ sở dữ liệu

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

Cảm ơn bạn trước và mọi trợ giúp đều được đánh giá cao

Nôn lòng y cho những sai lầm như tôi là một người đọc dài hạn nhưng một nhà văn mới.

Khi tôi cố gắng chạy phần chính của mã, nó tạo ra SQLException vì cơ sở dữ liệu không tồn tại. Tại thời điểm này tôi muốn bắt ngoại lệ và tạo cơ sở dữ liệu tại thời điểm đó. Nhưng khi tôi thử điều này nó không tạo ra cơ sở dữ liệu.

+0

có thể nhân đôi http://stackoverflow.com/ câu hỏi/717436/create-mysql-database-from-java –

+0

Không chắc chắn câu hỏi là gì. Bạn có nhận được lỗi khi thực hiện mã ở trên hoặc bạn không biết cách thực hiện nó? –

+0

đăng lỗi báo cáo plz –

Trả lời

2

Hãy thử với mã này.

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

Bạn luôn có thể chạy

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

Nếu điều này là chạy trên dự án khởi động nó chỉ đơn giản sẽ kiểm tra xem cơ sở dữ liệu tồn tại và nếu nó không nó sẽ tạo ra cơ sở dữ liệu mới.

Để tham khảo: http://dev.mysql.com/doc/refman/5.0/en/create-database.html

+0

Đây là cách sạch nhất và rõ ràng nhất để thực hiện việc này. – Kevin

0

Trên một không liên quan (cho câu hỏi) lưu ý:

Tôi không nghĩ rằng đó là bao giờ là một ý tưởng tốt để lập trình tạo ra các cơ sở dữ liệu. Bạn sẽ sử dụng công cụ tiện ích đi kèm với cơ sở dữ liệu của mình tốt hơn. Mọi người làm việc với MySQL gần như chắc chắn sẽ quen thuộc với công cụ tiện ích và sẽ không phải làm quen với mã Java của bạn, thay đổi nó, biên dịch nó và chạy nó để thực hiện thay đổi. Ngoài ra, các tiện ích có một tập hợp phong phú các tính năng mà mã Java của bạn có lẽ không phải như quyền giao, lập chỉ mục, thiết lập phím nước ngoài vv

0

Trước hết,

Tôi muốn gửi lời cảm ơn tất cả những người trả lời nó là rất hữu ích thực sự để có được quan điểm và ý kiến ​​khác nhau.

Đây là giải pháp mà tôi có cùng nhau.

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

Hãy thoải mái bình luận về bất kỳ mã. Tôi biết bằng cách sử dụng e.printStackTrace() không phải là cách tốt nhất để chuyển tiếp, đừng lo lắng Nó sẽ được sửa đổi sau này.

0

vài điểm cần lưu ý và đúng mực

  1. Bạn đã tuyên bố kết nối Object như private Connection con; nhưng bạn đang sử dụng nó như là statement = Conn.createStatement();
  2. Bạn đã tuyên bố một tham chiếu đến Bản Tuyên Bố private PreparedStatement statement; chuẩn bị nhưng bạn đang tạo thể hiện của Bản sao kê statement = Conn.createStatement();. Mã của bạn nên có -

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

Lưu ý rằng khi giá trị trả về cho executeUpdate là 0, nó có thể có nghĩa là một trong hai điều:

  • Những tuyên bố thực hiện là một báo cáo cập nhật mà hàng không bị ảnh hưởng.

  • Tuyên bố được thực hiện là tuyên bố DDL.

Documentation

1

Cách tiếp cận dễ dàng cho vấn đề là:

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

Tôi đề nghị để sử dụng đoạn mã này

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(); 
    } 
} 
Các vấn đề liên quan