【问题标题】:Creating a database and tables in MySQL using a JDBC application使用 JDBC 应用程序在 MySQL 中创建数据库和表
【发布时间】:2016-04-16 21:00:48
【问题描述】:

我为学校项目创建了一个 Java 程序。我使用 MySQL Workbench 创建了数据库和表,但现在我需要我的程序在其他计算机上工作,因此我需要它来检查数据库和表是否存在,如果不存在则自行创建。

这是我的驱动程序类中的相关代码:

private static Connection conn;

static
{
    try
    {
        Class.forName("com.mysql.jdbc.Driver");
    }
    catch (ClassNotFoundException exc)
    {
        javax.swing.JOptionPane.showMessageDialog(null, "Oops! Something seems to have gone wrong!\n\n" + exc, "Error", JOptionPane.ERROR_MESSAGE);
    }
}

public static Connection getMySQLConnection() throws SQLException
{
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tournament_manager", "studentCouncil", "****");
    return conn;
}

如上,我要创建的数据库,如果不存在,则称为“tournament_manager”。与数据库一起创建的表如下:

表 1 名称:密码

第 1 列:密码 ID 类型: int(11) 可以为空:

第 2 列:密码 类型: varchar(20) 可以为空:字符集: latin1

表 2 名称:锦标赛

第 1 列:锦标赛 ID 类型: int(11) 可以为空:额外: auto_increment

第 2 列:锦标赛名称 类型: varchar(20) 可以为空:字符集: latin1

第 3 栏:日期 类型: 日期 可以为空:

第 4 列:开始时间 类型: int(11) 可以为空:

第 5 列:matchDuration 类型: int(11) 可以为空:

第 6 列:breakDuration 类型: int(11) 可以为空:

第 7 列:numTeams 类型: int(11) 可以为空:

第 8 列:numVenues 类型: int(11) 可以为空:

表 3 名称:团队

第 1 列:团队 ID 类型: int(11) 可以为空:额外: auto_increment

第 2 列:团队名称 类型: varchar(20) 可以为空:字符集: latin1

第 3 列:积分 类型: int(11) 可以为空:

第 4 列:tournament_tournamentID 类型: int(11) 可以为空:

我是堆栈溢出的新手,所以我可能没有包含所有相关信息或包含不相关的信息。如果我没有提供相关细节,请询问。

提前感谢您的支持!

【问题讨论】:

  • 但是有什么问题?
  • 您可以通过getMetaData() 从您的Connection 对象中获取DatabaseMetaData 对象。拥有该对象后,您可以查询现有表并使用标准 SQL 创建它们,如果它们不存在,则使用您的 Connection 对象。
  • 你可以做到,但我认为用 Java 创建表是一个糟糕的设计。通常应用程序在应用程序运行之前创建一个模式,然后使用 Java 执行 CRUD 操作。你犯了那个经典的学生/初学者错误:在一个班级中混合数据库和 UI 代码。那里没有关注点分离。

标签: java mysql database


【解决方案1】:

实际上你可以用 Hibernate JPA 做到这一点

创建模型

@Entity
@Table(name = "USER")
public class User{

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id
  @Column(name="FIRST_NAME")
  private String firstName
  @Column(name="LAST_NAME")
  private String lastName
}

定义休眠自动创建

在 applicationContext.xml(spring-servlet.xml 或 hibernate.cfg.xml)中添加:

         <properties>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/DB"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value=""/>
            // That property create tables and key options.
            <property name="hbm2ddl.auto" value="create"/>
        </properties>

启动服务器

当您启动服务器时,休眠将创建您的表或更新您的列。

【讨论】:

  • 仅仅因为您可以使用 hibernate 来完成它,并不意味着您需要使用额外的库来完成它,并且它在问题中的什么地方提到了 spring servlet?
  • 他想用 Java 创建表。 Hibernate auto 是它的一个工具。 Spring-servlet 是一个等案例。他有哪个xml可以使用。
  • 我是说问题提供的代码使用了 DriverManager,在这里您正在推广一种替代方法。虽然它可能会尝试回答,但它并不能直接解决问题中解决的问题。如果您能解释什么是休眠以及为什么要通过一个可运行的示例来使用它,那么您的回答可能会被接受。
【解决方案2】:

要创建表,您应该使用“CREATE TABLE”SQL 语法。这可以在数据库管理程序中完成,也可以在 JDBC 中完成。

  stmt = conn.createStatement();

  String sql = "CREATE TABLE password" +
               "(passwordId INTEGER not NULL, " +
               " password VARCHAR(20), " + 
               " PRIMARY KEY ( passwordId ))"; 

  stmt.executeUpdate(sql);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2014-06-25
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多