現在、私はファイルを解析し、各行から34-40文字を取り出してデータベースのテーブルにドロップするプログラムに取り組んでいますが、私は以下の34文字の長さのラインに実行する時は、私のプログラムは、このエラーを吐く:Java:範囲外の特定の行を無視して検索する
WARNING: General Error:String index out of range: 40
が、私はまだそう救いの手を希望されているJavaの初心者です。ここに私のコードの一部は、次のとおりです。
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());
}
}
昨日のデータをパージするために、私はテーブルのすべての内容を削除して、もう一度すべての値を再挿入する必要があるので、このスクリプトは毎日実行します。削除後、新しいコンテンツの配列の作成が開始されます。私がこれにアプローチする方法は2つありますが、どの方法が最良かというコミュニティからのフィードバックを探しています。一つの方法は、私が今やっている方法であり、以下の例では、他の方法は、他のすべての行をスキップすることと、その行だけを見つけるだろう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