Java JDBC元数据无法识别mysql数据类型

Java JDBC元数据无法识别mysql数据类型,java,mysql,csv,jdbc,Java,Mysql,Csv,Jdbc,我试图创建一个方法来识别MySQL数据类型以创建查询,但由于某些原因,它不起作用 以下是失败的代码: int type = meta.returnDataType(data[i], table); if(type == 4){ preparedStatement.setString(i + 1, data[i]); System.out.println("String går"); }if(type == 12){ preparedStatement.setInt(i

我试图创建一个方法来识别MySQL数据类型以创建查询,但由于某些原因,它不起作用

以下是失败的代码:

int type = meta.returnDataType(data[i], table);

if(type == 4){
    preparedStatement.setString(i + 1, data[i]);
    System.out.println("String går");
}if(type == 12){
    preparedStatement.setInt(i + 1, Integer.parseInt(data[i]));
    System.out.println("int går");
}else if(type == 92){
    DateFormat formatter = new SimpleDateFormat("HH:mm");
    preparedStatement.setTime(i + 1, new java.sql.Time(formatter.parse(data[i]).getTime()));
}else if(type == 93){
    DateFormat formatter = new SimpleDateFormat("yyyy:MM:dd HH:mm");
    preparedStatement.setTimestamp(i + 1, new java.sql.Timestamp(formatter.parse(data[i]).getTime()));
}
下面是我的returnDataType方法:

现在的问题是它无法识别varchar,即使我每次尝试使用system out print时都会返回数字12。当我试图用if语句或switch来检测它时,结果要么它们只注册整数,要么它们将所有内容都视为整数。我似乎不明白为什么会这样

我的CSV文件是这样的,第一个是int,第二个是字符串。至少它应该是这样的,而且在数据库中也是这样

1,Per Lauvås
2,Per Per
returnDataType方法始终返回表的第一列的类型。你需要解决这个问题。您应该使用准备好的语句的参数元数据,或者可能使用DatabaseMetaData中的列元数据。或者至少访问正确的列索引

您还切换了if分支。类型4是java.sql.Types.INTEGER,但您尝试将其设置为字符串,而类型12是java.sql.Types.VARCHAR,但您尝试将其设置为整数,但转换可能会失败

旁注:您不应该使用像4、12、92和93这样的整数值,而是应该使用java.sql.Types常量integer、VARCHAR、TIME和TIMESTAMP。它将使您的代码更具可读性,并且更容易检测上述错误

1,Per Lauvås
2,Per Per