Java DAO对象SQLexception

时间:2015-05-31 16:15:05

标签: java mysql sqlexception

Java和MySQL新手。

使用DAO对象查询通过Eclipse运行的表。 MySQL通过Workbench编辑。表存在并获得以下例外:

SELECT movie_name, release_dd, release_mm, release_yyyy, duration, language, director, genre, actor_1, actor_2 FROM movie_details_table WHERE movie_name = 'Piku'

java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:937)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:872)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:787)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5244)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5167)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5206)
at com.library.model.MovieDAO.getMovieDetails(MovieDAO.java:41)
at com.library.model.MovieDetTest.main(MovieDetTest.java:18)

MovieDAO课程:

package com.library.model;


import java.util.*;
import java.sql.*;
import java.io.*;
import com.library.model.beans.*;

public class MovieDAO {

private static final String DB_URL = 
        "jdbc:mysql://localhost/planner";

//  Database credentials
private static final String USER = "Sudipto";
private static final String PASS = "sudi85";

public MovieDetails getMovieDetails(String inputMov) throws     
SQLException {

MovieDetails movieDetails = new MovieDetails();

    try {

        //Open a connection
        Connection conn = DriverManager.getConnection
                      (DB_URL,USER,PASS);

       //Create and execute query
       String queryString = "SELECT movie_name, release_dd, release_mm, release_yyyy, duration, language, director, genre, actor_1, actor_2 FROM movie_details_table WHERE movie_name = '" + inputMov + "'";

       System.out.println(queryString);

       PreparedStatement statement = conn.prepareStatement
    (queryString);



       ResultSet rsMovieDetails = statement.executeQuery();

       movieDetails.setMovieName(rsMovieDetails.getString
       ("movie_name"));
       movieDetails.setReleaseDate
      (rsMovieDetails.getInt ("release_dd"), rsMovieDetails.getInt ("release_mm"), rsMovieDetails.getInt ("release_yyyy"));
       movieDetails.setDuration(rsMovieDetails.getInt
       ("duration"));
       movieDetails.setLanguage(rsMovieDetails.getString
       ("language"));
       movieDetails.setDirector(rsMovieDetails.getString
       ("director"));
       movieDetails.setGenre(rsMovieDetails.getString
       ("genre"));
       movieDetails.setActor1(rsMovieDetails.getString
       ("actor_1"));
       movieDetails.setActor2(rsMovieDetails.getString
       ("actor_2"));

      }

      catch (SQLException e) {
            e.printStackTrace();
      }

  return movieDetails;

}

}

在MySQL工作台中有以下错误日志:

2015-05-31T15:04:36, 27, Note, Aborted connection 27 to db: 'planner' user: 'Sudipto' host: 'localhost' (Got an error reading communication packets)

有人可以建议我需要修理的方法和内容吗?

1 个答案:

答案 0 :(得分:0)

使用rsMovieDetails.next()来检索详细信息。就像在https://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html中使用rs.next()一样。
rs.next()将光标移动到数据库中结果集的下一行,如果有任何行则返回true,否则返回false。如果存在row,那么你应该检索数据