有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java处理mysql中包含逗号的数字

我正在制作一个程序,从txt文件中读取数据,并将它们存储在mysql的表中。在我的程序中,我用我想要的字段制作表格,然后用“加载数据填充”命令在表格中插入值

我拥有的文件包含一列(以升命名)
enter image description here
数据是浮点数,例如

0234

12234

3004等

在我创建表格的程序开始时,升字段被描述为FLOAT。但是当我运行我的程序时,我得到一个SQLException : Data truncated for column 'litres' at row 1.

创建表格和插入值的代码如下:

private static String getCreateTable1(Connection con, String tablename) {

        try {
            Class.forName("com.mysql.jdbc.Driver");
            Statement stmt = con.createStatement();
            String createtable = "CREATE TABLE " + tablename
                    + " ( text VARCHAR(255), price INT , day VARCHAR(255), litres FLOAT )";
            System.out.println("Create a new table in the database");
            stmt.executeUpdate(createtable);
        } catch (Exception e) {
            System.out.println(((SQLException) e).getSQLState());
            System.out.println(e.getMessage());
            e.printStackTrace();
        }

        return null;
    }

    private static String importData(Connection con, File txtFile,
            String tablename) {

        try {
            Statement stmt;

            stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
            String path = txtFile.getAbsolutePath();
            String importingdata = "LOAD DATA INFILE '"
                    + path.replace('\\', '/')
                    + "' INTO TABLE " + tablename
                    + " FIELDS TERMINATED BY '\t'";
            System.out.println("fill the table");
            stmt.executeUpdate(importingdata);

        } catch (Exception e) {
            System.out.println(((SQLException) e).getSQLState());
            System.out.println(e.getMessage());
            e.printStackTrace();

        }
        return null;
    }

我该怎么修?有人能帮我吗?我认为问题在于逗号?我怎样才能让它认出它


共 (2) 个答案

  1. # 1 楼答案

    解析十进制数是特定于语言环境的。在将逗号字符','替换为点字符'.'之前,需要更改语句以将其替换为MySQL。一种方法是在LOAD DATA INFILE语句中添加一个cast:

    LOAD DATA INFILE 'myfile.txt'
    INTO TABLE tablename
    FIELDS TERMINATED BY '\t'
    (COL1, @litres, COL3, ...)   Note the @ in front of the float column
    SET litres = REPLACE(@litres, ',', '.')
    

    您需要列出要导入的所有列。导入“原样”的列需要列出,但不带“at”符号@;必须用点替换逗号的列需要用“at”符号@列出。对于每个float列,需要在最后一行添加replace调用

  2. # 2 楼答案

    此异常意味着插入litres列的值大于该列所能容纳的值。查看您提到的值,似乎您使用了liters作为varchar,检查是否有大小限制
    更新表格以允许所需的值