Хотите добавить проверку к моему коду, если таблица не существует, она должна создать новую таблицу в java

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

void checkCreateMeth()
    {
        try{
        System.out.println("Implementing the functionality of create table if not exist or not.");
        Class.forName(JDBC_Driver);
        con=DriverManager.getConnection(DB_URL, user, pass);
        stmt=con.createStatement();
        String sql="CREATE TABLE IF NOT EXISTS VGRWER(name varchar(10),stream varchar(10))";
            int rs=stmt.executeUpdate(sql);
            System.out.println("Value of rs is="+rs);
        }catch(Exception e)
        {
            e.printStackTrace();                         
        }
    }
  1. Сначала я использовал exexuteQuery (), он выдал ошибку «Невозможно выполнить операторы обработки данных с помощью executeQuery ()»

  2. Во-вторых, я попробовал executeUpdate (), он вернул «0», когда таблица существовала. Он вернул то же значение, когда я предоставил table_name, которого не было.


person infiniteLearner    schedule 28.12.2017    source источник
comment
как это не дубликат? Вы пробовали все предложения по другим сообщениям, которые почти связаны с вашим вопросом?   -  person johnII    schedule 28.12.2017
comment
Большинство ответов относятся к PHP, а ответы на java не имеют отношения к этой проблеме.   -  person infiniteLearner    schedule 28.12.2017
comment
Можете ли вы просто использовать метод выполнения оператора вместо запроса на выполнение и, пожалуйста, закройте соединение, и оператор перейдите по этой ссылке, которая может вам помочь mkyong.com/jdbc/jdbc-statement-example-create-a-table   -  person Pradeep    schedule 28.12.2017
comment
Просто используйте CREATE TABLE VGRWER (name varchar (10), stream varchar (10)) внутри try catch.   -  person Sanal S    schedule 28.12.2017
comment
Если код переходит в блок catch, это означает, что таблица уже существует.   -  person Sanal S    schedule 28.12.2017
comment
@Sanal Как он узнает, что эта таблица существует?   -  person infiniteLearner    schedule 28.12.2017
comment
@Pradeep Пожалуйста, перечитайте вопрос еще раз, то, что я спрашиваю, отличается от вашего ответа и ссылки, которую вы дали.   -  person infiniteLearner    schedule 28.12.2017
comment
Я не хочу, чтобы моя программа внезапно закрывалась. Я знаю, что когда будет исключение, оно перейдет в блок catch.   -  person infiniteLearner    schedule 28.12.2017
comment
@codeFreak Вы пробовали использовать try-catch. Вы получите следующее сообщение Таблица "vgrwer" уже существует.   -  person Sanal S    schedule 28.12.2017
comment
@codeFreak Используйте этот блок перехвата: - catch (SQLException e) { System.out.println(e.getMessage()); `}`   -  person Sanal S    schedule 28.12.2017
comment
Это код, который я пробовал: - try (Connection con = DriverManager.getConnection( "jdbc:mysql://" + SERVER + ":3306/" + DB, USER, PASSWORD)) { Statement st = con.createStatement(); st.execute("CREATE TABLE VGRWER(name varchar(10),stream varchar(10))"); } } catch (SQLException e) { System.out.println(e.getMessage()); }   -  person Sanal S    schedule 28.12.2017


Ответы (2)


Из документации javadoc:

«либо (1) количество строк для операторов языка обработки данных SQL (DML), либо (2) 0 для операторов SQL, которые ничего не возвращают»

https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String)

Это означает, что ваш оператор DDL всегда будет возвращать 0 независимо от того, существует таблица или нет.

person Balaji    schedule 28.12.2017
comment
Я уже знаю альтернативное решение этой проблемы, но я хотел решить, используя CREATE TABLE IF NOT EXISTS. Будет полезно, если вы ответите так, как я хочу. - person infiniteLearner; 28.12.2017
comment
СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ, решит вашу проблему. Ваша таблица будет создана только в том случае, если ее не существует. Но нельзя ожидать, что тип возвращаемого значения executeUpdate изменится в зависимости от используемого DDL, независимо от того, существует таблица или нет. Это связано с тем, что в API четко указано, что для DDL он всегда будет возвращать 0. - person Balaji; 28.12.2017

Когда вы используете executeupdate для создания таблицы, вы не выполняете INSERT или UPDATE, поэтому вы получаете «0», поскольку никакие строки не были затронуты.

Эта ссылка может быть полезна: -

executeUpdate () возвращает ноль, несмотря на правильное выполнение

person richa kumari    schedule 28.12.2017
comment
Да, я знаю, что ничего не обновляется, поэтому возвращается ноль. Если вы можете предложить решение, оно будет полезно. - person infiniteLearner; 28.12.2017
comment
Собственно ваш вопрос непонятен. если вы хотите проверить, существует ли таблица или не использовать данные Databasemeta. вы можете сослаться на этот документ. docs.oracle.com/javase/ 7 / docs / api / java / sql / или stackoverflow .com / questions / 2942788 / check-if-table-exists. - person richa kumari; 28.12.2017
comment
Да, вы правы, я могу использовать DatabaseMetaData, но он добавит несколько операторов, я просто хотел написать оптимизированный код, поэтому спросил, как выполнить CREATE TABLE IF NOT EXISTS. - person infiniteLearner; 28.12.2017