使用 MySQL 表的 java jdbc 更改数据类型

Posted

技术标签:

【中文标题】使用 MySQL 表的 java jdbc 更改数据类型【英文标题】:Change datatype using java jdbc of MySQL table 【发布时间】:2017-06-29 17:16:57 【问题描述】:

如何使用 JDBC 连接 mysql 中表的 Java 将数据类型从 varchar 更改为 int

我尝试使用查询:

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

我使用导入选项导入的文件具有 varchar 中的值,但我只需要该表中的整数值。导入表的值不是有序的,但整数值对我很有用。

当我在 phpmyadmin 中使用 alter 查询时,它工作得非常好,但是当我尝试在 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);

编辑

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);

表格截图在照片中:

这实际上是一个pdf文件并将其转换为.csv并导入我的数据库 而且我只需要表格中的整数值,而不需要任何其他字母和符号。 此代码仅适用于一列,我需要更改所有三列。那么我应该怎么做才能使用 jdbc 只获取整数值? :| :)

【问题讨论】:

只需触发另一个查询。请参阅思考链接以获取适当的查询。 ***.com/questions/21784201/… 你知道如何改变这一切吗,或者你还在纠结如何用 JDBC 来执行它? 您需要使用`col 1` 而不是'col 1',尽管这也可能意味着col 1 包含一个不可转换为整数值的值。 或在两个[col 1]之间@MarkRotteveel @YCF_L 这对 MySQL 有用吗?我认为那是特定于 MS Access、SQL Server 和 Sybase 的。 【参考方案1】:

就像@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

我建议避免使用两个部分的名称,您可以使用 col_name 代替,因为这会产生问题,例如,如果您使用 JPA。

编辑

我尝试了这段代码,它工作正常:

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);

祝你好运。

【讨论】:

好的。感谢您的回复,但从 'col 1' 更改为 col 1 并没有改变。错误保持不变。我想添加另一个信息,col 1 包含字母和整数以及示例:主题、代码、课程、1、2、3、4。这些值分别位于不同的行中,我只需要整数值: ) 你是什么意思保持不变你想要改变的类型或名称@AshbirDhiman @AshbirDhiman 如果你想改名字那么这不是问题,如果你想改变类型,这可能会出问题,所以你想做什么,改名字还是改类型? @AshbirDhiman 我编辑我的答案我现在发布我所有的代码和 SQL 所以我希望这对你有用 您可以发布您尝试过的内容吗?完整的代码?【参考方案2】:
statement.executeUpdate("ALTER TABLE table_name ALTER COLUMN column_name datatype");

【讨论】:

以上是关于使用 MySQL 表的 java jdbc 更改数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Java自学-JDBC 获取自增长id以及表的元数据

有没有办法使用 Java 和 JDBC 来监听 Microsoft SQL 数据库表的变化?

使用 JDBC 迭代大表的最快方法

我可以在 jdbc 中调用一个使用 mysql 返回表的存储过程吗?

2016-04-22jdbc-mysql-java

使用 JDBC 将引用另一个表的数据插入 MySQL