2017-02-11 8 views
2

varcharからintへのデータ型の変更は、MySQLのテーブルのJavaとのJDBC接続を使用しますか?MySQLテーブルのjava jdbcを使用してデータ型を変更します

は、私は、クエリを使用しようとした:

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

私はインポートオプションを使用してインポートしていたファイルは、varchar型の値を持っていますが、私はそのテーブルから整数値を必要としていました。インポートされたテーブルの値は順序付けられていませんが、整数値は私にとって役に立ちます。

私はphpMyAdminのでALTERクエリを使用する場合、それは絶対にうまく動作しますが、私は、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); 
} 

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 ` int(20)"; 

    Statement stmt=co.createStatement(); 

    stmt.executeUpdate(t); 

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

テーブルのスクリーンショットは、写真にありますMySQL TABLE

これは実際にはpdfファイルで、それを.csvに変換してデータベースにインポートしました そして、私は他のアルファベットや記号ではなく、テーブルからの整数値が必要です。 このコードは1つの列のみであり、3つの列をすべて変更する必要があります.jdbcを使用して整数値のみを取得するにはどうすればよいですか? :| :)

+0

別のクエリを起動してください。適切なクエリのリンクを参照してください。 http://stackoverflow.com/questions/21784201/mysql-convert-column-datatype-from-varchar-to-int –

+0

これをすべて変更する方法を知っていますか、あるいはそれをJDBCで実行する方法についていませんか? –

+1

'' col1''の代わりに、 '\' col1 \ ''を使う必要がありますが、 'col1'には整数値に変換できない値が含まれているかもしれません。 –

答えて

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

を@マークRotteveelがあなたの列名が含まれている場合、あなたの列の名前が2 ''または""の間に2つ``ない間、これは動作しないことが必要がありますので、あなたのクエリに問題があり、コメントで言ったように

//change column name 
query = "ALTER TABLE tablename CHANGE `old name` `new name` INT(5);"; 
stmt = co.createStatement(); 
rslt = stmt.executeUpdate(query); 
:この名または列の使用を変更するには

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

:これを使用するために、あなたがしなければならないあなたの列の種類を変更するように、一つの部分、より多くの

クエリは次のように正常に実行された場合ので、あなたが確認できます。

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

私はあなたがタイプを変更した場合、これはすべての列を変更し、0

に設定します2つの部分で名前を使用することは避けることをお勧めします。これは、JPAを使用している場合などに問題になるため、代わりにcol_nameを使用できます。

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型に変更できない場合これはあなたを助けることができる希望を編集する –

関連する問題