{"id":"9b2c1d48-2107-424b-9a51-a29a0da9d30e","shortId":"Qq3QCA","kind":"skill","title":"411-frameworks-quarkus-jdbc","tagline":"Use when you need programmatic JDBC in Quarkus — Agroal DataSource, parameterized SQL, transactions, batching, and Dev Services. This should trigger for requests such as Review JDBC or SQL data access in a Quarkus project; Improve transactions and parameter binding for Quarkus JD","description":"# Quarkus JDBC — programmatic SQL\n\nApply programmatic JDBC patterns in Quarkus with safe SQL and clear transactions.\n\n**What is covered in this Skill?**\n\n- Injected javax.sql.DataSource (Agroal-backed) and try-with-resources for Connection / PreparedStatement\n- PreparedStatement with bind parameters — never string concatenation\n- Mapping ResultSet rows to Java records (dedicated mapRow method)\n- Safe single-row queries with Optional<T>; never assume rs.next() succeeds\n- SQLException translation to domain exceptions (catch-translate-rethrow)\n- Streaming large result sets with setFetchSize to avoid OOM\n- Batch updates with addBatch / executeBatch for bulk inserts\n- @Transactional service boundaries and propagation types (TxType.REQUIRES_NEW for independent commits)\n- CDI self-invocation pitfall: always call transactional methods through the injected proxy\n- Dev Services for databases in dev/test\n- When to prefer Panache (`@412`) vs raw JDBC\n\n**Scope:** Apply recommendations based on the reference rules and good/bad code examples.\n\n## Constraints\n\nCompile before JDBC refactors; verify after changes.\n\n- **MANDATORY**: Run `./mvnw compile` or `mvn compile` before applying any change\n- **PREREQUISITE**: Project must compile before applying JDBC improvements\n- **SAFETY**: If compilation fails, stop immediately\n- **BLOCKING CONDITION**: Compilation errors must be resolved by the user before proceeding\n- **VERIFY**: Run `./mvnw clean verify` or `mvn clean verify` after applying improvements\n- **BEFORE APPLYING**: Read the reference for detailed rules and examples\n\n## When to use this skill\n\n- Review JDBC or SQL data access in a Quarkus project\n- Improve transactions and parameter binding for Quarkus JDBC\n- Translate SQLException to domain exceptions or stream large result sets\n- Fix CDI self-invocation bypassing @Transactional in Quarkus\n\n## Workflow\n\n1. **Read reference and assess project context**\n\nRead `references/411-frameworks-quarkus-jdbc.md` and inspect the current project setup before proposing changes.\n\n2. **Gather scope and decide target improvements**\n\nIdentify requested outcomes, constraints, and the minimum safe set of changes to apply.\n\n3. **Apply framework-aligned changes**\n\nImplement or refactor configuration/code following the reference patterns and project conventions.\n\n4. **Run verification and report results**\n\nExecute appropriate build/tests and summarize what changed, what was verified, and any follow-up actions.\n\n## Reference\n\nFor detailed guidance, examples, and constraints, see [references/411-frameworks-quarkus-jdbc.md](references/411-frameworks-quarkus-jdbc.md).","tags":["411","frameworks","quarkus","jdbc","cursor","rules","java","jabrena","agent-skills","ai-skills","claude","claude-code"],"capabilities":["skill","source-jabrena","skill-411-frameworks-quarkus-jdbc","topic-agent-skills","topic-ai-skills","topic-claude","topic-claude-code","topic-claude-code-skills","topic-claude-code-subagents","topic-claude-skills","topic-cursor-agent","topic-cursor-ai","topic-cursor-skills","topic-cursorai","topic-github-copilot"],"categories":["cursor-rules-java"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/jabrena/cursor-rules-java/411-frameworks-quarkus-jdbc","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add jabrena/cursor-rules-java","source_repo":"https://github.com/jabrena/cursor-rules-java","install_from":"skills.sh"}},"qualityScore":"0.631","qualityRationale":"deterministic score 0.63 from registry signals: · indexed on github topic:agent-skills · 362 github stars · SKILL.md body (2,626 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-26T12:53:38.013Z","embedding":null,"createdAt":"2026-04-18T22:02:19.500Z","updatedAt":"2026-04-26T12:53:38.013Z","lastSeenAt":"2026-04-26T12:53:38.013Z","tsv":"'/mvnw':196,233 '1':296 '2':314 '3':334 '4':351 '411':1 '412':170 'access':35,263 'action':372 'addbatch':131 'agroal':14,73 'agroal-back':72 'align':338 'alway':152 'appli':52,175,202,210,241,244,333,335 'appropri':358 'assess':300 'assum':107 'avoid':126 'back':74 'base':177 'batch':19,128 'bind':44,85,272 'block':219 'boundari':138 'build/tests':359 'bulk':134 'bypass':291 'call':153 'catch':116 'catch-translate-rethrow':115 'cdi':147,287 'chang':193,204,313,331,339,363 'clean':234,238 'clear':62 'code':184 'commit':146 'compil':187,197,200,208,215,221 'concaten':89 'condit':220 'configuration/code':343 'connect':81 'constraint':186,324,379 'context':302 'convent':350 'cover':66 'current':308 'data':34,262 'databas':163 'datasourc':15 'decid':318 'dedic':96 'detail':249,375 'dev':21,160 'dev/test':165 'domain':113,279 'error':222 'exampl':185,252,377 'except':114,280 'execut':357 'executebatch':132 'fail':216 'fix':286 'follow':344,370 'follow-up':369 'framework':3,337 'framework-align':336 'frameworks-quarkus-jdbc':2 'gather':315 'good/bad':183 'guidanc':376 'identifi':321 'immedi':218 'implement':340 'improv':40,212,242,268,320 'independ':145 'inject':70,158 'insert':135 'inspect':306 'invoc':150,290 'java':94 'javax.sql.datasource':71 'jd':47 'jdbc':5,11,31,49,54,173,189,211,259,275 'larg':120,283 'mandatori':194 'map':90 'maprow':97 'method':98,155 'minimum':327 'must':207,223 'mvn':199,237 'need':9 'never':87,106 'new':143 'oom':127 'option':105 'outcom':323 'panach':169 'paramet':43,86,271 'parameter':16 'pattern':55,347 'pitfal':151 'prefer':168 'preparedstat':82,83 'prerequisit':205 'proceed':230 'programmat':10,50,53 'project':39,206,267,301,309,349 'propag':140 'propos':312 'proxi':159 'quarkus':4,13,38,46,48,57,266,274,294 'queri':103 'raw':172 'read':245,297,303 'recommend':176 'record':95 'refactor':190,342 'refer':180,247,298,346,373 'references/411-frameworks-quarkus-jdbc.md':304,381,382 'report':355 'request':27,322 'resolv':225 'resourc':79 'result':121,284,356 'resultset':91 'rethrow':118 'review':30,258 'row':92,102 'rs.next':108 'rule':181,250 'run':195,232,352 'safe':59,99,328 'safeti':213 'scope':174,316 'see':380 'self':149,289 'self-invoc':148,288 'servic':22,137,161 'set':122,285,329 'setfetchs':124 'setup':310 'singl':101 'single-row':100 'skill':69,257 'skill-411-frameworks-quarkus-jdbc' 'source-jabrena' 'sql':17,33,51,60,261 'sqlexcept':110,277 'stop':217 'stream':119,282 'string':88 'succeed':109 'summar':361 'target':319 'topic-agent-skills' 'topic-ai-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-code-skills' 'topic-claude-code-subagents' 'topic-claude-skills' 'topic-cursor-agent' 'topic-cursor-ai' 'topic-cursor-skills' 'topic-cursorai' 'topic-github-copilot' 'transact':18,41,63,136,154,269,292 'translat':111,117,276 'tri':77 'trigger':25 'try-with-resourc':76 'txtype.requires':142 'type':141 'updat':129 'use':6,255 'user':228 'verif':353 'verifi':191,231,235,239,366 'vs':171 'workflow':295","prices":[{"id":"37a5d232-6c08-4cfe-b26c-4ffc670bbd87","listingId":"9b2c1d48-2107-424b-9a51-a29a0da9d30e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"jabrena","category":"cursor-rules-java","install_from":"skills.sh"},"createdAt":"2026-04-18T22:02:19.500Z"}],"sources":[{"listingId":"9b2c1d48-2107-424b-9a51-a29a0da9d30e","source":"github","sourceId":"jabrena/cursor-rules-java/411-frameworks-quarkus-jdbc","sourceUrl":"https://github.com/jabrena/cursor-rules-java/tree/main/skills/411-frameworks-quarkus-jdbc","isPrimary":false,"firstSeenAt":"2026-04-18T22:02:19.500Z","lastSeenAt":"2026-04-26T12:53:38.013Z"}],"details":{"listingId":"9b2c1d48-2107-424b-9a51-a29a0da9d30e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"jabrena","slug":"411-frameworks-quarkus-jdbc","github":{"repo":"jabrena/cursor-rules-java","stars":362,"topics":["agent-skills","ai-skills","claude","claude-code","claude-code-skills","claude-code-subagents","claude-skills","cursor-agent","cursor-ai","cursor-skills","cursorai","github-copilot","intellij-idea","java","prompting","system-prompts"],"license":"apache-2.0","html_url":"https://github.com/jabrena/cursor-rules-java","pushed_at":"2026-04-26T12:50:01Z","description":"A curated and opinionated collection of Skills and Agents to be used in modern SDLC workflows for Java Enterprise development with your favorite AI Agent harness.","skill_md_sha":"7cbd73b823ead80fa57b853611cad9218eca1bb8","skill_md_path":"skills/411-frameworks-quarkus-jdbc/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/jabrena/cursor-rules-java/tree/main/skills/411-frameworks-quarkus-jdbc"},"layout":"multi","source":"github","category":"cursor-rules-java","frontmatter":{"name":"411-frameworks-quarkus-jdbc","license":"Apache-2.0","description":"Use when you need programmatic JDBC in Quarkus — Agroal DataSource, parameterized SQL, transactions, batching, and Dev Services. This should trigger for requests such as Review JDBC or SQL data access in a Quarkus project; Improve transactions and parameter binding for Quarkus JDBC; Translate SQLException to domain exceptions or stream large result sets; Fix CDI self-invocation bypassing @Transactional in Quarkus. Part of cursor-rules-java project"},"skills_sh_url":"https://skills.sh/jabrena/cursor-rules-java/411-frameworks-quarkus-jdbc"},"updatedAt":"2026-04-26T12:53:38.013Z"}}