简体   繁体   中英

Any way to return a ResultSet in Java?

I found out that Java doesn't let ResultSet to be return as a data type. And would like to ask whether is there any better solution to return results after executing query?

    try {
        Class.forName("com.mysql.jdbc.Driver");

        Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/shopping mall?zeroDateTimeBehavior=convertToNull", "root", "" );

        java.sql.Statement stmt = con.createStatement() ;
        String query = "SELECT * FROM shops WHERE SHOPNAME LIKE \'%" + shopName + "%\' ORDER BY shopname ASC";           // Select and sort using user input
        ResultSet rs = stmt.executeQuery(query) ;

        // How to return the result after executing the query?
    }
    catch ( SQLException err ) {
        return null;
    }

Don't mind the return null; part. Was testing something. Basically this is my current code for now. How can I return the result after executing query?

You write a method to retrieve info from a database, where should the data be processed and put into a model class? If you want code that is loosely coupled, then 98% of the time you would process the result set within the same method.

What happens if the query needs to change? You want the changes to be localized into a small of a subset of code as possible.

You need to provide better context for the error. Is this, for example, a JAX-WS web service endpoint? Anyway, as stated in the trace, your error is a web service error--not a JDBC error. This error can happen for many reasons--usually related to something wrong with the way you are defining the API to your service.

You are certainly allowed to return a ResultSet from a method even if that is a very bad idea, especially from a web service endpoint. A ResultSet can't be serialized into a SOAP message. More generally, to return a ResultSet betrays implementation details to the callers of the method. Why should they know you are using JDBC? Or even that you are talking to a relational (or any) database at all?

The better approach is to populate a model object relevant to your domain with the data in the ResultSet , and that object will be serialized to SOAP via JAXB or whatever you use. Or maybe you just return some text from the database, in which case JAX-WS knows what to do.

Also, make sure you do something with SQLException so you can trace the cause of your actual JDBC errors.

Take a look at Spring-JDBC JdbcTemplate. This method

List<Map<String, Object>> queryForList(String sql)

returns a List that contains a Map per row. You can use it or make something similar

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM