2014-01-05 4 views
3

Я использую MySQL 5.1 для моей базы данных, и я отправляю команды через Java-программу (JBDC). Есть ли MySQL команда для создания или изменения таблицы? Скажем, у меня есть следующая таблица:MySQL создать или изменить таблицу

+----------+----------+ 
| column_a | column_b | 
+----------+----------+ 
| value_a | value_b | 
+----------+----------+ 

Теперь я хочу, чтобы использовать команду, что бы добавить столбец «column_c», если она не существует. Это приведет:

+----------+----------+----------+ 
| column_a | column_b | column_c | 
+----------+----------+----------+ 
| value_a | value_b |   | 
+----------+----------+----------+ 

Если таблица не существует, было бы создать новую таблицу с заданными столбцами:

+----------+----------+----------+ 
| column_a | column_b | column_c | 
+----------+----------+----------+ 

И, наконец, если таблица была столбцы weren 't указано в команде, было бы оставить их нетронутый.

+0

Там нет 'ALTER TABLE IF', насколько я знаете, возможно, вам стоит взглянуть на такие инструменты, как «Liquibase» или «flyway» –

+0

Я не думаю, что использование этих программ было бы необходимо только для одной команды, @RC .. Нет другого пути? – Limeth

+0

проверить метаданные базы данных и создать столбец при необходимости возможно –

ответ

1

здесь код в Java, чтобы создать таблицу с именем Coffees:

/*Making the connection*/ 
try {//if any statements within the try block cause problems, rather than the program failing 
     //an exception is thrown which will be caught in the catch block 
     con = DriverManager.getConnection(url, "your username", "your password"); 

     //create a statement object 
     stmt = con.createStatement(); 
     //supply the statement object with a string to execute       
     stmt.executeUpdate("create table COFFEES (COF_NAME varchar(32), " + 
          "SUP_ID int, PRICE double, SALES int, TOTAL int, " + 
          "primary key(COF_NAME))"); 

     //close the statement and connection 
     stmt.close(); 
     con.close(); 

    } catch(SQLException ex) { 
     System.err.println("SQLException: " + ex.getMessage()); 
    } 

Объяснение: -В этом примере программа Java взаимодействует с базой данных, которая находится на сервере, поэтому мы должны, во-первых, мы укажите URL-адрес расположения сервера, а также введите имя пользователя и пароль, вы не можете использовать тот же метод, который я использовал. -Это должны быть объявлено в верхней части Java программы:

String url = "jdbc:mysql://www.yoururlexample.co.uk"; 
Connection con;  
Statement stmt 

Надеется, что это помогает, вы затем сможете вставить данные в базу данных и выполнять запросы.

Edit:

Это может быть использовано в операторе executeUpdate, если вы хотите, таблица будет создана, если он не существует с именем «КОФЕ»:

create table if not exists COFFEES 
+0

Я думаю, что вы пропустили вопрос, я просил использовать команду в MySQL, а не для Java-соединения. _Is там команда для создания или изменения таблицы? _ – Limeth

+0

Хм я не совсем уверен, но не должен добавлять их, чтобы делать то, что вы хотели ?: stmt.executeUpdate (СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ .... .); stmt.executeUpdate (ALTER TABLE .....); – escull638

0
/*Making the connection*/ 
try { 
     //an exception is thrown which will be caught in the catch block 
     con = DriverManager.getConnection("jdbc:mysql:exaple.com", "username", "pass"); 

     //create a statement object 
     stmt = con.createStatement(); 
     //supply the statement object with a string to execute       
     stmt.executeUpdate("ALTER TABLE table_name ADD column_name datatype"); 

     //close the statement and connection 
     stmt.close(); 
     con.close(); 

    } catch(SQLException ex) { 
     System.err.println("SQLException: " + ex.getMessage()); 
    } 

Я думаю, что это будет работать для вас.

+0

Я думаю, что вы упустили вопрос, я просил использовать команду в MySQL, а не для Java-соединения._ Есть ли команда для создания или изменения таблицы? _ – Limeth

+0

да, это команда executeUpadate. ALTER TABLE table_name ADD column_name datatype Я надеюсь, что это сработает для вас –

+0

Проблема в том, что если таблица не существует, она не создаст ее. Кроме того, в вашем примере нет способа обнаружить отсутствующие столбцы. – Limeth

0

Нечто подобное могло бы быть решение (это необходимо, по крайней мере одна запись в таблице для работы):

package com.stackoverflow.so20935793; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

public class App { 

    // complete this: 
    private static final String JDBC_URL = "....."; 
    private static final String JDBC_USER = "....."; 
    private static final String JDBC_PASS = "....."; 

    public static void main(final String[] args) { 
     Connection con = null; 
     PreparedStatement stm = null; 
     ResultSet rs = null; 

     try { 
      con = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS); 
      stm = con.prepareStatement("SELECT * FROM your_table LIMIT 1"); 
      rs = stm.executeQuery(); 
      if (rs.next() && rs.getMetaData().getColumnCount() == 2) { 
       // add your new column 
      } 
     } catch (final SQLException ex) { 
      // handle exception 
     } finally { 
      closeQuietly(rs); 
      closeQuietly(stm); 
      closeQuietly(con); 
     } 
    } 

    private static void closeQuietly(final AutoCloseable what) { 
     if (what == null) { 
      return; 
     } 

     try { 
      what.close(); 
     } catch (final Exception ex) { 
      // ignore 
     } 
    } 
} 

(не тестировалось)

Смежные вопросы