1

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

我拥有的文件包含一列(命名为升)
在此处输入图像描述
,其中的数据是浮点数,例如

0,234

12,234

3,004 等

在我创建表的程序开始时,升字段被描述为 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;
    }

我该如何解决?有人可以帮我吗?我认为问题是逗号?我怎样才能让它识别它?

4

3 回答 3

1

解析十进制数字是特定于语言环境的。在将逗号字符提供给 MySQL 之前,您需要更改语句以','用点字符替换逗号字符。'.'一种方法是在您的LOAD DATA INFILE陈述中添加演员表:

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”符号列出@。对于每个浮点列,您需要replace在最后一行添加一个调用。

于 2013-06-17T10:04:36.133 回答
0

可能是您的文件中有空记录,这会引发错误消息。

在此处查看类似问题:Getting a mysql Error Code: 1265. Data truncated for column when doing LOAD DATA LOCAL INFILE

于 2013-06-17T09:58:30.233 回答
0

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

于 2013-06-17T09:42:36.280 回答