【问题标题】:Java JDBC: Altering tableJava JDBC:更改表
【发布时间】:2014-05-05 20:22:09
【问题描述】:

我希望对这张表做如下改动:

添加:状态列 (varchar(20)) 日期列(时间戳)

我不知道该怎么做

String createTable = "Create table aircraft ("
                        +"aircraftNumber int,"
                        +"airLineCompany varchar(20),"
                        +"departureAirport varchar (20),"
                        +"fuelPercentage int,"
                        +"passengerCount int);";

【问题讨论】:

  • 执行ALTER TABLE 语句。对 DDL 语句使用 Statement#execute
  • 你能不能只更改上面的字符串以包含列?
  • 看起来您需要检查您的数据库概念。这将尝试创建一个完整的新表,如果该表已经存在,则查询将失败。
  • BTW - date 是 SQL 中的保留字。列名不是上帝的选择。

标签: java mysql sql jdbc ddl


【解决方案1】:

你应该execute 一个alter 声明:

Connection conn = ...;
Statement s = conn.createStatement();
s.execute("ALTER TABLE aircraft " + 
          "ADD COLUMN state VARCHAR(20), " + 
          "ADD COLUMN `date` TIMESTAMP");

【讨论】:

    【解决方案2】:

    要在数据库表中添加列,请使用ALTER TABLE 语句:

    ALTER TABLE aircraft
        ADD COLUMN state VARCHAR(20), 
        ADD COLUMN dateCreated DATETIME
    

    请注意,我不使用date 作为您的字段的名称,原因有两个:1)它是大多数数据库引擎中的保留关键字,2)表字段名称必须易于读者理解, 一个名为date 的字段对当前模型完全没有任何价值,哪个日期:创建日期,最后更新日期,飞机到达日期,飞机事故日期?。


    然后,在 Java 中,使用 Statement#execute 在 JDBC 中执行任何 DDL 语句。

    总结一下:

    String sql = "ALTER TABLE aircraft "
        + "ADD COLUMN state VARCHAR(20), "
        + "ADD COLUMN dateCreated DATETIME";
    Connection con = ...
    Statement stmt = con.createStatement(sql);
    stmt.execute();
    

    【讨论】:

      【解决方案3】:
      Connection conn=new Connection("database path");
      String sql="ALTER TABLE Table_name ADD COLUMN Column_name Datatype";
      
      try{
          conn.ExecuteNonSelect(sql);
      }
      catch(Exception e)
      {
          JOptionPane.showMessageDialog(null, e.getMessage());
      }
      

      【讨论】:

        猜你喜欢
        • 2017-06-29
        • 2013-07-14
        • 2015-02-28
        • 2013-08-17
        • 2012-01-15
        • 2011-04-09
        • 1970-01-01
        • 2017-08-20
        • 2017-09-19
        相关资源
        最近更新 更多