현재 파일을 파싱하고 각 줄에서 34-40자를 가져 와서 데이터베이스의 테이블에 놓는 프로그램에서 작업하고 있습니다. 나는 미만 34 자 길이의 선으로 실행 시간, 내 프로그램이 오류를 뱉어 :Java : 범위를 벗어나는 특정 줄을 무시하려고합니다
WARNING: General Error:String index out of range: 40
내가 아직도 도움의 손길이 요구되는 자바에서 초보자입니다. 나는 테이블의 모든 내용을 삭제하고 다시 모든 값을 다시 삽입해야 어제의 데이터를 제거하기 위해, 그래서이 스크립트는 매일 실행됩니다
try
{
fstream = new FileInputStream(filename);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
PreparedStatement deleteFields = null;
String deleteTable = "DELETE FROM info WHERE VOLSER IS NOT NULL;";
deleteFields = conn.prepareStatement(deleteTable);
deleteFields.executeUpdate();
deleteFields.close();
logger.info(deleteTable);
PreparedStatement updateFields = null;
String[] qmarks = new String[linenumber];
//Adding data to the database
for(int i = 0; i < linenumber; i++)
{
String cust = in.readLine();
String subCust = cust.substring(34,40);
qmarks[i] = subCust;
String updateString = "REPLACE INTO info" + " (VOLSER) " + "VALUE ('" + (qmarks[i]) + "');";
logger.info(updateString);
try
{
updateFields = conn.prepareStatement(updateString);
updateFields.executeUpdate();
updateFields.close();
}
catch (SQLException e)
{
logger.warning("Error:" + e.getMessage());
}
}
: 여기 내 코드의 일부이다. 삭제 후, 새로운 내용의 배열을 만들기 시작합니다. 이 문제에 접근 할 수있는 방법은 두 가지가 있으며 어느 방법이 최선인지에 대한 의견을 커뮤니티에서 찾고 있습니다. 한 가지 방법은 내가 지금까지 일을하고 다른 모든 라인을 생략하고 오직 선을 발견하는 것입니다 다음 예 A00000
TMSS0000N-02:00:30 Moving Volume A00000 to NEXT
다른 방법을 얻을 것이다 문자 34-40을 포착하려고 해요 방법입니다 그들 안에 "움직이는 볼륨"을 넣으십시오. (줄의 시작 부분에 타임 스탬프가 생기므로이 방법이 더 어려울 것입니다.)
FOR 루프의 간단한 IF 문으로 오류가 중지됩니까? 예를 들면 : 당신이 cust.substring(34,40);
를 호출 할 때
if (cust.length >= 34)
{
cust.substring(34,40);
}
else
{
cust.substring = "XXXXXX";
}
어떤 라인/명령어가 예외를 던지고 있는지에 대한 정보를 제공하면 더 나은 답변을 얻을 수 있습니다. – SJuan76