2017-02-11 20 views
2

Как изменить тип данных с varchar на int с использованием соединения JDBC с Java таблицы в MySQL?Изменение типа данных с помощью java jdbc таблицы MySQL

Я пытался использовать запрос:

Alter table table_name CHANGE 'col 1' 'col 1' int (5); 

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

Когда я альтер запрос в PHPMyAdmin он работает абсолютно нормально, но когда я попытался изменить в JDBC он дает мне ошибку:

Incorrect integer value: at 'col 1'; 

JDBC-код был как:

try { 
    Connection co=DriverManager.getConnection("jdbc:mysql://localhost:3306/csv_db","root",null); 
    String c= " ALTER TABLE tpf1 MODIFY `col 3` int(5)"; 
    String t="Alter table table_name CHANGE 'col 1' 'col 1' int (5);"; 
    Statement stmt=co.createStatement(); 

    stmt.executeUpdate(t); 

} catch (SQLException ex) { 
    JOptionPane.showMessageDialog(this, ex); 
} 

Edit

try { 
    Connection co=DriverManager.getConnection("jdbc:mysql://localhost:3306/csv_db","root",null); 
    String c= " ALTER TABLE tpf1 MODIFY `col ` int(20)"; 

    Statement stmt=co.createStatement(); 

    stmt.executeUpdate(t); 

} catch (SQLException ex) { 
    JOptionPane.showMessageDialog(this, ex); 
} 

скриншот таблицы в фото: MySQL TABLE

Это на самом деле файл в формате pdf и преобразовал его в .csv и импортировал в мою базу данных И мне нужны только целочисленные значения из таблицы, а не любые другие алфавиты и символы. Этот код предназначен только для одного столбца, и мне нужно изменить все три столбца. Что мне делать, чтобы получить только целочисленные значения, используя jdbc? : | :)

+0

Просто запустите другой запрос. См. Ссылку на соответствующий запрос. http://stackoverflow.com/questions/21784201/mysql-convert-column-datatype-from-varchar-to-int –

+0

Знаете ли вы, как изменить все это, или вы застряли в том, как выполнить его с JDBC? –

+1

Вместо '' col 1'' вам нужно использовать '\' col 1 \ '', хотя это может означать, что 'col 1' содержит значение, которое не конвертируется в целочисленное значение. –

ответ

0
statement.executeUpdate("ALTER TABLE table_name ALTER COLUMN column_name datatype"); 
2

Как @Mark Rotteveel сказал в комментариях, у вас есть проблемы в вашем запросе, так что имя столбцов должно быть между два ``, а не между двумя '' или "" это не будет работать, если ваше имя столбца содержит более одна часть так, чтобы изменить тип вашей колонки, вы должны использовать это:

//change column type 
String query = "ALTER TABLE tablename MODIFY `col 1` INT(5)"; 
Statement stmt = co.createStatement(); 
int rslt = stmt.executeUpdate(query); 

чтобы изменить имя или ваш столбец использовать этот:

//change column name 
query = "ALTER TABLE tablename CHANGE `old name` `new name` INT(5);"; 
stmt = co.createStatement(); 
rslt = stmt.executeUpdate(query); 

так что вы можете проверить, если ваш запрос успешно выполнен, как это:

if (rslt > 0) { 
    System.out.println("Success"); 
} else { 
    System.out.println("Failed"); 
} 

Примечание

Если изменить тип это изменит все колонки, и установить его на 0

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

EDIT

Стараюсь этот кусок кода и работать нормально:

public class UpdateColumn { 

    static String driver = "com.mysql.jdbc.Driver"; 
    static String DB_username = "root"; 
    static String DB_password = "password"; 
    static String DB_URL = "jdbc:mysql://localhost:3306/db_name"; 

    public static void main(String args[]) { 
     /*read from the file*/ 
     try { 
      Class.forName(driver); 
      java.sql.Connection co = DriverManager.getConnection(DB_URL, DB_username, DB_password); 
      //change column type 
      String query = "ALTER TABLE tablename MODIFY `c 1` INT(5);"; 
      Statement stmt = co.createStatement(); 
      int rslt = stmt.executeUpdate(query); 
      System.out.println(rslt); 
     } catch (ClassNotFoundException | SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

MySQL

create database db_name; 

use db_name; 

drop table t1; 

create table tablename(
`c 1` varchar(5), 
`c 2` int 
); 

INSERT INTO tablename values('java', 1); 
INSERT INTO tablename values('mysql', 2); 

удачи.

+0

Ok. Спасибо за ответ, но никаких изменений не было, перейдя из 'col 1' в 'col 1'. Ошибка остается прежней. И мне нравится добавлять еще одну информацию о том, что 'col 1' содержит алфавиты и целое число, а также пример: Subject, code, course, 1,2,3, 4. Эти значения находятся в разных строках соответственно, и мне нужны только целые значения :) –

+0

что вы имели в виду то же самое, что вы хотите точно изменить тип или имя @AshbirDhiman –

+0

@AshbirDhiman, если ваша таблица уже содержит некоторые значения типа 'varchar', тогда вы не можете изменить тип int, чтобы проверить мои Надеюсь, это поможет вам –