2014-09-04 33 views
1

我無法找出爲什麼我的executeUpdate()語句返回此異常:「至少有一個當前語句的參數未初始化」。任何人都可以發現我做錯了什麼嗎? (我知道有代碼過多的嘗試/捕獲)PreparedStatement錯誤:至少一個當前語句的參數未初始化

public class MetadataRetriever2 extends SwingWorker<MediaMeta, MediaMeta> { 

private final List<File> dataFlavorFileList; 
private final DefaultTableModel activeModel; 
private static MediaMeta trackMetaData; 
private static final MediaPlayerFactory factory = new MediaPlayerFactory(); 

int row = 0; 
private int dropLocationRow; 

Connection connection = null; 
PreparedStatement myPreparedStatement = null; 
EmbeddedDataSource dataSource = null; 

MetadataRetriever2(List dataFlavorFileList, DefaultTableModel activeModel, int dropLocationRow) { 
    this.dropLocationRow = dropLocationRow; 
    this.dataFlavorFileList = dataFlavorFileList; 
    this.activeModel = activeModel; 

} 

@Override 
protected MediaMeta doInBackground() throws Exception { 

    for (File file : dataFlavorFileList) { 

     if (MediaFileFilter.INSTANCE.accept(file)) { 

      trackMetaData = factory.getMediaMeta(file.toPath().toString(), true); 

     } else { 

     } 

     publish(trackMetaData); 
    } 
    return trackMetaData; 
} 

@Override 
protected void process(List<MediaMeta> trackMetaData) { 

    String sql = "INSERT INTO DEFAULT_LIBRARY (ARTIST, TITLE, ALBUM, TRACK_NUMBER, LENGTH, " 
      + "DESCRIPTION, RATING,DATE ,SETTING, URL, LANGUAGE, NOW_PLAYING, PUBLISHER, ENCODED_BY," 
      + "ARTWORK_URL, TRACK_ID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 

    dataSource = new EmbeddedDataSource(); 
    dataSource.setDatabaseName("audioPlayerDB"); 

    try { 
     connection = dataSource.getConnection(); 
    } catch (SQLException ex) { 
     System.out.println("connection failed"); 
    } 

    try { 
     myPreparedStatement = connection.prepareStatement(sql); 
    } catch (SQLException ex) { 
     System.out.println("preparedStatement failed: " + ex.getCause()); 
    } 

    String[] oArray = new String[16]; 

    for (MediaMeta trackData : trackMetaData) { 

     oArray[0] = trackData.getArtist(); 
     oArray[1] = trackData.getTitle(); 
     oArray[2] = trackData.getAlbum(); 
     oArray[3] = trackData.getTrackNumber(); 
     oArray[4] = String.valueOf(trackData.getLength()); 
     oArray[5] = trackData.getDescription(); 
     oArray[6] = trackData.getRating(); 
     oArray[7] = trackData.getDate(); 
     oArray[8] = trackData.getSetting(); 
     oArray[9] = trackData.getUrl(); 
     oArray[10] = trackData.getLanguage(); 
     oArray[11] = trackData.getNowPlaying(); 
     oArray[12] = trackData.getPublisher(); 
     oArray[13] = trackData.getEncodedBy(); 
     oArray[14] = trackData.getArtworkUrl(); 
     oArray[15] = trackData.getTrackId(); 

     try { 

      myPreparedStatement.setString(1, oArray[0]); 
      myPreparedStatement.setString(2, oArray[1]); 
      myPreparedStatement.setString(3, oArray[2]); 
      myPreparedStatement.setString(4, oArray[3]); 
      myPreparedStatement.setString(5, oArray[4]); 
      myPreparedStatement.setString(6, oArray[5]); 
      myPreparedStatement.setString(7, oArray[6]); 
      myPreparedStatement.setString(8, oArray[7]); 
      myPreparedStatement.setString(9, oArray[8]); 
      myPreparedStatement.setString(10, oArray[9]); 
      myPreparedStatement.setString(11, oArray[10]); 
      myPreparedStatement.setString(12, oArray[11]); 
      myPreparedStatement.setString(13, oArray[12]); 
      myPreparedStatement.setString(14, oArray[13]); 
      myPreparedStatement.setString(15, oArray[15]); 

      activeModel.insertRow(dropLocationRow, oArray); 

      dropLocationRow++; 

     } catch (SQLException ex) { 
      Logger.getLogger(MetadataRetriever2.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     try { 
      myPreparedStatement.executeUpdate(); 
     } catch (SQLException ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 
} 

}

回答

1

你的語句需要16個參數,和你的對象[]不排隊

myPreparedStatement.setString(14, oArray[13]); 
myPreparedStatement.setString(15, oArray[15]); 

應該是

myPreparedStatement.setString(14, oArray[13]); 
myPreparedStatement.setString(15, oArray[14]); 
myPreparedStatement.setString(16, oArray[15]); 
+0

感謝您的幫助,艾略特。數據庫現在正在更新。 – user465001 2014-09-04 02:46:20