-1

テキストファイルからデータを取得してmysqlデータベースに挿入しようとしています.いくつかの行は正常に挿入されていますが、プログラムを実行するとこのエラーメッセージが表示されます..

java.io.IOException: Read error
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:199)
at java.io.DataInputStream.read(DataInputStream.java:132)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at InsertDB.inserdata(InsertDB.java:53)
at InsertDB.main(InsertDB.java:96)

これは私のプログラムです

 public class InsertDB {
    Connection conn ;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "dna";
    String driver = "com.mysql.jdbc.Driver";
    String userName = "root"; 
    String password = "123";

    public void inserdata()
    {


      String[] RowItems = new String[11];
      int[] intRowItems=new int[10];
    try{
    conn = DriverManager.getConnection(url+dbName,userName,password);
     Statement st = conn.createStatement();
     // Open the file that is the first 
    // command line parameter
     FileInputStream fstream = new FileInputStream("result.txt");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;
    StringTokenizer stringTokenizer ;





    while ((strLine = br.readLine()) != null) {
    stringTokenizer=new StringTokenizer(strLine);
   int j=0;
   while(stringTokenizer.hasMoreTokens()){
    RowItems[j]=stringTokenizer.nextToken();
    j++;
    }
   int c2,c3,c4,c5,c6,c7,c8,c9,c10,c11;

      c2=Integer.valueOf(RowItems[1]).intValue();
       c3=Integer.valueOf(RowItems[2]).intValue();
        c4=Integer.valueOf(RowItems[3]).intValue();
         c5=Integer.valueOf(RowItems[4]).intValue();
          c6=Integer.valueOf(RowItems[5]).intValue();
           c7=Integer.valueOf(RowItems[6]).intValue();
            c8=Integer.valueOf(RowItems[7]).intValue();
             c9=Integer.valueOf(RowItems[8]).intValue();
              c10=Integer.valueOf(RowItems[9]).intValue();
               c11=Integer.valueOf(RowItems[10]).intValue();

     String temp=RowItems[0];
    String insert="INSERT into protein_predicted                 VALUES('"+temp+"','"+c2+"','"+c3+"','"+c4+"','"+c5+"','"+c6+"','"+c7+"','"+c8+"','"+c9+"','      "+c10+"','"+c11+"')";
    st.executeUpdate(insert);

    in.close();
    }
    System.out.println("Insertted successfully");
     }
       catch (SQLException e) {
        throw new RuntimeException(e);
       }
       catch (Exception e){//Catch exception if any
        //System.err.println("Error: " + e.getMessage());
      e.printStackTrace();
      //Close the input stream



    }
    }
    public static void main(String args[])
    {
        InsertDB a=new InsertDB();
        a.inserdata();


    }

私のテキストファイルには、このような複数の列と複数の行が含まれています

1BG8A 76 33 0 18 1 0 1 5 2 16

これを愛するのを手伝ってください..ありがとう

4

1 に答える 1

1

それを読んでいるループDataInputStreamの内側を閉じています。whileその行を削除しin.close()、while ループの外側で、BufferedReaderすべてを読み終わったら閉じます。br.close();

Java 6 以下を使用している場合は、BufferedReader変数をtry...の外で宣言し、読み取りエラーが発生した場合にリーダーを閉じる句をcatch追加するのが理想的です。finallyJava 7 には、これを自動的に処理するのに役立つAutoCloseableインターフェースがあります。

于 2013-02-02T05:29:56.373 に答える