java.sql.SQLException:ResultSet来自UPDATE。没有数据

时间:2015-10-06 09:11:28

标签: java mysql

我正在尝试使用Java应用程序导入表。该查询与MySQL Workbench完美匹配:

以下是查询:

LOAD DATA LOCAL INFILE 'C:\\Users\\Zero\\Desktop\\Book1.csv' INTO TABLE  tbl_students
FIELDS TERMINATED BY ',' 
enclosed by '"' 
lines terminated by '\n'

现在使用它,我为用户提供了一个保存路径,以便在此处找到代码:

    chooser = new JFileChooser();
    chooser.setCurrentDirectory(new java.io.File("."));
    chooser.setDialogTitle(choosertitle);
     FileNameExtensionFilter filter = new FileNameExtensionFilter("CSV Files", "csv");
     chooser.setFileFilter(filter);
    if (chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
        file = chooser.getSelectedFile();
        path = file.getAbsolutePath();
        System.out.println(path.replace("\\", "\\\\"));
        ImportTBL();

    }
    else {
        System.out.println("No Selection ");}

对于ImportTBL(),这里是代码

private void ImportTBL(){
    String sql = "LOAD DATA LOCAL INFILE '"+path.replace("\\", "\\\\")+"' INTO TABLE tbl_students "
    + "FIELDS TERMINATED BY ',' enclosed by '\"' lines terminated by '\\n'";
    System.out.println(sql);
    try{PreparedStatement ps = conn.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();

        if(rs.next()){
        JOptionPane.showMessageDialog(null, "Import Successful!");
        }

        else{
        JOptionPane.showMessageDialog(null, "Import Fail!");}
        }

    catch(Exception e){
        JOptionPane.showMessageDialog(null, "Error: "+ e);
        }
}

2 个答案:

答案 0 :(得分:0)

我认为您使用的是错误的执行方法。您获得的异常表明 ResultSet来自UPDATE。没有数据

尝试使用:

int affectedRows = ps.executeUpdate();

if ( affectedRows <= 0 ) System.out.println("failed!");
else System.out.println("Success :)");

请参阅: http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate()

答案 1 :(得分:0)

问题是您正在使用executeQuery()方法执行load语句。它用于执行返回结果集的select语句,而不是数据操作语句。请改用executeUpdate()方法并检查受影响的行数以确定执行是否成功。

此外,没有必要准备此声明,因为用户很可能不会多次重复运行此声明。而且您的代码甚至不会尝试利用预准备语句提供的优势。