user3054491
user3054491

Reputation: 51

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?

Upvotes: 0

Views: 2160

Answers (3)

Evgeniy Dorofeev
Evgeniy Dorofeev

Reputation: 136042

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

Upvotes: 0

Vidya
Vidya

Reputation: 30310

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.

Upvotes: 1

Pete B.
Pete B.

Reputation: 3286

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.

Upvotes: 1

Related Questions