错误:java.lang.NullPointerException(Java / Netbeans // Mysql)

时间:2014-03-18 14:02:05

标签: java jdbc

我在java netbeans中开发了一个应用程序,它有一个从文本文件(.txt)读取数据的解析器。

他在5分钟内读取此文件并将值写入数据库。 问题是,在运行程序两个小时后,它无法从数据库中记录和检索数据并出现此错误:

线程java.lang.NullPointerException

中的异常

有人能告诉我为什么会这样吗?

感谢您的帮助。

--------------------------------编辑(代码)----------- --------------------------------

   Class.forName("com.mysql.jdbc.Driver");
        Connection conexao = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/bdtest", "root", "root");
        Statement stm = conexao.createStatement();


        BufferedReader reader = new BufferedReader(new FileReader("C:/Users/RPR1BRG/Desktop/test.txt"));

        String dados[] = new String[6];
        String linha = reader.readLine();

        while (linha != null) {

            StringTokenizer st = new StringTokenizer(linha, ";\"");

            dados[0] = st.nextToken();
            dados[1] = st.nextToken(); 
            dados[2] = st.nextToken();
            dados[3] = st.nextToken();
            dados[4] = st.nextToken();
            dados[5] = st.nextToken();


            DateFormat dateFormat = new SimpleDateFormat("d-M-yy");

PreparedStatement stmt = (PreparedStatement) conexao.prepareStatement("replace into registos" + " (data_registo, hora_registo, IdSensor, Temperatura, Humidade, pt_orvalho) values (?,?,?,?,?,?)");


               try {
                 stmt.setDate(1, new java.sql.Date(dateFormat.parse(dados[0]).getTime()));
                        stmt.setString(2, dados[1]);
                        stmt.setString(3, dados[2]);
                        stmt.setString(4, dados[3]);
                        stmt.setString(5, dados[4]);
                        stmt.setString(6, dados[5]);



                    } catch (java.text.ParseException ex) {
                        Exceptions.printStackTrace(ex);
                    }



    stmt.executeUpdate();





            linha = reader.readLine();

            PrintWriter writer = new PrintWriter("C:/Users/RPR1BRG/Desktop/test.txt"); 
            writer.print("");
            writer.close();

            }

    } catch (ClassNotFoundException | SQLException | IOException e) {

        System.err.println("Erro: " + e.getMessage());

    }


        }
    };

1 个答案:

答案 0 :(得分:0)

放置

PreparedStatement stmt = conexao.prepareStatement("replace into registos"
    + " (data_registo, hora_registo, IdSensor, Temperatura, Humidade, pt_orvalho)"
    + " values (?,?,?,?,?,?)");

明确关闭文件。

reader.close();
循环后

。循环后关闭语句:

stmt.close();

错误可能是由数据引起的。

在数据丢失时转储该行可能会更好:

        for (int i = 0; i < 6; ++i) {
            dados[i] = st.hasMoreTokens()? st.nextToken() : "";
        }

而不是

        dados[0] = st.nextToken();
        dados[1] = st.nextToken(); 
        dados[2] = st.nextToken();
        dados[3] = st.nextToken();
        dados[4] = st.nextToken();
        dados[5] = st.nextToken();