In a stateful connection, you rely on the fact that you will keep on using the same database connection (session) during the run of your application.
Such programs typically use database session variables or temporary tables.
They might set a variable in database action a: (example: user selects country "china", program stores this country in an environment variable).
They can use that variable later on in action b: (example: they have built some views that will restrict data based on that variable, without the need for your program to filter yourself: you can do "select city from world_cities_view" , but the database would only return Chinese cities ).
A stateless connection does not rely on any activity that has occurred in the past. It does not remember anything.
You should treat Connection Pool connections as stateless.
You can use dedicated connections as stateful. The database can remember things for you.
Some info:
http://www.dulcian.com/papers/RMOUG/2008_RMOUG_Rosenblum_StateFULL.pdf