处理mysql中包含逗号的数字

时间:2013-06-17 09:38:39

标签: java mysql

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

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

0,234

12234

3,004等。

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

我该如何解决?谁能帮助我?我认为问题是逗号?我怎样才能让它识别出来?

3 个答案:

答案 0 :(得分: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调用。

答案 1 :(得分:0)

此异常表示您插入litres列的值大于列可容纳的值。查看您提到的值似乎是您使用liters作为varchar,请检查您是否有尺寸限制。
更新表以允许所需的值。

答案 2 :(得分:0)

可能是您的文件中有空记录,即抛出错误消息。

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