|
| 1 | +# ☕ JDBC Full Guide: Java Database Connectivity (with MySQL) |
| 2 | +--- |
| 3 | + |
| 4 | +JDBC (Java Database Connectivity) is an API that enables Java programs to connect to databases like MySQL, Oracle, PostgreSQL, etc., execute SQL queries, and retrieve results. |
| 5 | + |
| 6 | +<br/> |
| 7 | + |
| 8 | +## 📌 JDBC Architecture |
| 9 | + |
| 10 | +<br/> |
| 11 | +<div align="center" width=700 height=200> |
| 12 | +<img src="IMAGES/jdbcarch.jpg" class="execution" alt="exception hierarchy"> |
| 13 | +</div><br/> |
| 14 | + |
| 15 | +<br/> |
| 16 | + |
| 17 | +## 🔗 Steps to Connect Java with MySQL Database |
| 18 | + |
| 19 | +### 1️⃣ Import Packages |
| 20 | +<br/> |
| 21 | +<div class="code-block"> |
| 22 | + <pre><code> |
| 23 | +<span class="keyword">import</span> java.sql.Connection<span class="punctuation">;</span> |
| 24 | +<span class="keyword">import</span> java.sql.DriverManager<span class="punctuation">;</span> |
| 25 | +<span class="keyword">import</span> java.sql.ResultSet<span class="punctuation">;</span> |
| 26 | +<span class="keyword">import</span> java.sql.Statement<span class="punctuation">;</span> |
| 27 | +<span class="keyword">import</span> java.sql.PreparedStatement<span class="punctuation">;</span> |
| 28 | +<span class="keyword">import</span> java.sql.SQLException<span class="punctuation">;</span> |
| 29 | + </code></pre> |
| 30 | +</div> |
| 31 | + |
| 32 | +These are all part of the `java.sql` package. |
| 33 | + |
| 34 | +<br/> |
| 35 | + |
| 36 | +### 2️⃣ Register JDBC Driver |
| 37 | +<br/> |
| 38 | +<div class="code-block"> |
| 39 | + <pre><code> |
| 40 | +<span class="classname">Class</span><span class="punctuation">.</span><span class="method">forName</span><span class="punctuation">(</span><span class="string">"com.mysql.cj.jdbc.Driver"</span><span class="punctuation">)</span><span class="punctuation">;</span> |
| 41 | + </code></pre> |
| 42 | +</div> |
| 43 | + |
| 44 | +This loads the MySQL JDBC driver. |
| 45 | + |
| 46 | +<br/> |
| 47 | + |
| 48 | +### 3️⃣ Establish Connection |
| 49 | +<br/> |
| 50 | +<div class="code-block"> |
| 51 | + <pre><code> |
| 52 | +<span class="keyword">String</span> <span class="variable">url</span> = <span class="string">"jdbc:mysql://localhost:3306/mydatabase"</span><span class="punctuation">;</span> <span class="comment">// 3306 is MySQL default port</span> |
| 53 | +<span class="keyword">String</span> <span class="variable">user</span> = <span class="string">"root"</span><span class="punctuation">;</span> |
| 54 | +<span class="keyword">String</span> <span class="variable">password</span> = <span class="string">"your_password"</span><span class="punctuation">;</span> |
| 55 | + |
| 56 | +<span class="classname">Connection</span> <span class="variable">conn</span> = <span class="classname">DriverManager</span><span class="punctuation">.</span><span class="method">getConnection</span><span class="punctuation">(</span><span class="variable">url</span>, <span class="variable">user</span>, <span class="variable">password</span><span class="punctuation">)</span><span class="punctuation">;</span> |
| 57 | + </code></pre> |
| 58 | +</div> |
| 59 | + |
| 60 | +- `localhost`: the host |
| 61 | +- `3306`: the MySQL port |
| 62 | +- `mydatabase`: your database name |
| 63 | + |
| 64 | +<br/> |
| 65 | + |
| 66 | +### 4️⃣ Create Statement |
| 67 | +<br/> |
| 68 | +<div class="code-block"> |
| 69 | + <pre><code> |
| 70 | +<span class="classname">Statement</span> <span class="variable">stmt</span> = <span class="variable">conn</span><span class="punctuation">.</span><span class="method">createStatement</span><span class="punctuation">();</span> |
| 71 | + </code></pre> |
| 72 | +</div> |
| 73 | + |
| 74 | + |
| 75 | +You can also use: |
| 76 | +<div class="code-block"> |
| 77 | + <pre><code> |
| 78 | +<span class="classname">PreparedStatement</span> <span class="variable">pstmt</span> = <span class="variable">conn</span><span class="punctuation">.</span><span class="method">prepareStatement</span><span class="punctuation">(</span><span class="string">"INSERT INTO users VALUES (?, ?)"</span><span class="punctuation">);</span> |
| 79 | + </code></pre> |
| 80 | +</div> |
| 81 | + |
| 82 | + |
| 83 | +<br/> |
| 84 | + |
| 85 | +### 5️⃣ Execute Queries |
| 86 | +<br/> |
| 87 | + |
| 88 | +#### SELECT Example: |
| 89 | +<br/> |
| 90 | +<div class="code-block"> |
| 91 | + <pre><code> |
| 92 | +<span class="classname">ResultSet</span> <span class="variable">rs</span> = <span class="variable">stmt</span><span class="punctuation">.</span><span class="method">executeQuery</span><span class="punctuation">(</span><span class="string">"SELECT * FROM users"</span><span class="punctuation">);</span> |
| 93 | +<span class="keyword">while</span> (<span class="variable">rs</span><span class="punctuation">.</span><span class="method">next</span><span class="punctuation">())</span> <span class="punctuation">{</span> |
| 94 | + <span class="method">System.out.println</span><span class="punctuation">(</span><span class="variable">rs</span><span class="punctuation">.</span><span class="method">getString</span><span class="punctuation">(</span><span class="string">"username"</span><span class="punctuation">)</span><span class="punctuation">);</span> |
| 95 | +<span class="punctuation">}</span> |
| 96 | + </code></pre> |
| 97 | +</div> |
| 98 | + |
| 99 | +#### INSERT Example: |
| 100 | + |
| 101 | +<br/> |
| 102 | +<div class="code-block"> |
| 103 | + <pre><code> |
| 104 | +<span class="keyword">String</span> <span class="variable">query</span> = <span class="string">"INSERT INTO users (username, password) VALUES (?, ?)"</span><span class="punctuation">;</span> |
| 105 | +<span class="classname">PreparedStatement</span> <span class="variable">pstmt</span> = <span class="variable">conn</span><span class="punctuation">.</span><span class="method">prepareStatement</span><span class="punctuation">(</span><span class="variable">query</span><span class="punctuation">)</span><span class="punctuation">;</span> |
| 106 | +<span class="variable">pstmt</span><span class="punctuation">.</span><span class="method">setString</span><span class="punctuation">(</span><span class="number">1</span>, <span class="string">"john"</span><span class="punctuation">)</span><span class="punctuation">;</span> |
| 107 | +<span class="variable">pstmt</span><span class="punctuation">.</span><span class="method">setString</span><span class="punctuation">(</span><span class="number">2</span>, <span class="string">"secret"</span><span class="punctuation">)</span><span class="punctuation">;</span> |
| 108 | +<span class="variable">pstmt</span><span class="punctuation">.</span><span class="method">executeUpdate</span><span class="punctuation">()</span><span class="punctuation">;</span> |
| 109 | + </code></pre> |
| 110 | +</div> |
| 111 | + |
| 112 | + |
| 113 | +<br/> |
| 114 | + |
| 115 | +### 6️⃣ Close Resources |
| 116 | +<br/> |
| 117 | +<div class="code-block"> |
| 118 | + <pre><code> |
| 119 | +<span class="variable">rs</span><span class="punctuation">.</span><span class="method">close</span><span class="punctuation">()</span><span class="punctuation">;</span> |
| 120 | +<span class="variable">stmt</span><span class="punctuation">.</span><span class="method">close</span><span class="punctuation">()</span><span class="punctuation">;</span> |
| 121 | +<span class="variable">conn</span><span class="punctuation">.</span><span class="method">close</span><span class="punctuation">()</span><span class="punctuation">;</span> |
| 122 | + </code></pre> |
| 123 | +</div> |
| 124 | + |
| 125 | + |
| 126 | +Always close connections to avoid memory leaks. |
| 127 | + |
| 128 | +<br/> |
| 129 | + |
| 130 | +## 🧱 JDBC Connection URL Format |
| 131 | +<br/> |
| 132 | + |
| 133 | +<div class="code-block"> |
| 134 | + <pre><code> |
| 135 | +<span class="string">jdbc:mysql://</span><span class="variable"><host></span><span class="punctuation">:</span><span class="variable"><port></span><span class="punctuation">/</span><span class="variable"><database></span><span class="punctuation">?</span><span class="variable"><options></span> |
| 136 | + </code></pre> |
| 137 | +</div> |
| 138 | + |
| 139 | + |
| 140 | +Example: |
| 141 | +<br/> |
| 142 | +<div class="code-block"> |
| 143 | + <pre><code> |
| 144 | +<span class="string">jdbc:mysql://</span><span class="variable">localhost</span><span class="punctuation">:</span><span class="number">3306</span><span class="punctuation">/</span><span class="variable">school</span><span class="punctuation">?</span><span class="keyword">useSSL</span><span class="punctuation">=</span><span class="boolean">false</span><span class="punctuation">&</span><span class="keyword">serverTimezone</span><span class="punctuation">=</span><span class="string">UTC</span> |
| 145 | + </code></pre> |
| 146 | +</div> |
| 147 | + |
| 148 | + |
| 149 | +<br/> |
| 150 | + |
| 151 | +## ⚙️ JDBC MySQL Driver Dependency (Maven) |
| 152 | +<br/> |
| 153 | + |
| 154 | +```xml |
| 155 | +<dependency> |
| 156 | + <groupId>mysql</groupId> |
| 157 | + <artifactId>mysql-connector-java</artifactId> |
| 158 | + <version>8.0.33</version> |
| 159 | +</dependency> |
| 160 | +``` |
| 161 | + |
| 162 | +If using manually, download `mysql-connector-java.jar` and add it to your classpath. |
| 163 | + |
| 164 | +<br/> |
| 165 | + |
| 166 | +## 📦 Key JDBC Classes and Interfaces |
| 167 | +<br/> |
| 168 | + |
| 169 | +| Class / Interface | Purpose | |
| 170 | +|-------------------------|------------------------------------------------| |
| 171 | +| DriverManager | Manages JDBC drivers and connections | |
| 172 | +| Connection | Represents DB connection | |
| 173 | +| Statement | Executes static SQL | |
| 174 | +| PreparedStatement | Executes dynamic SQL with parameters | |
| 175 | +| ResultSet | Holds data from SELECT | |
| 176 | +| SQLException | Handles JDBC exceptions | |
| 177 | + |
| 178 | +<br/> |
| 179 | + |
| 180 | +## 🚫 Exception Handling in JDBC |
| 181 | +<br/> |
| 182 | + |
| 183 | +<div class="code-block"> |
| 184 | + <pre><code> |
| 185 | +<span class="keyword">try</span> <span class="punctuation">{</span> |
| 186 | + <span class="comment">// operations</span> |
| 187 | + <span class="keyword">Connection</span> <span class="variable">conn</span> = <span class="method">DriverManager.getConnection</span>(<span class="variable">url</span>, <span class="variable">user</span>, <span class="variable">pass</span><span class="punctuation">);</span> |
| 188 | +<span class="punctuation">}</span> <span class="keyword">catch</span> (<span class="keyword">SQLException</span> <span class="variable">e</span>) <span class="punctuation">{</span> |
| 189 | + <span class="method">e.printStackTrace</span><span class="punctuation">();</span> |
| 190 | +<span class="punctuation">}</span> |
| 191 | + </code></pre> |
| 192 | +</div> |
| 193 | + |
| 194 | + |
| 195 | +<br/> |
| 196 | + |
| 197 | +## 📘 Sample JDBC Program |
| 198 | +<br/> |
| 199 | +<div class="code-block"> |
| 200 | + <pre><code> |
| 201 | +<span class="keyword">import</span> <span class="package">java.sql.*;</span> |
| 202 | + |
| 203 | +<span class="keyword">public</span> <span class="keyword">class</span> <span class="classname">JDBCExample</span> <span class="punctuation">{</span> |
| 204 | + <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="method">main</span>(<span class="keyword">String</span>[] <span class="variable">args</span>) <span class="punctuation">{</span> |
| 205 | + <span class="keyword">String</span> <span class="variable">url</span> = <span class="string">"jdbc:mysql://localhost:3306/testdb"</span>; |
| 206 | + <span class="keyword">String</span> <span class="variable">user</span> = <span class="string">"root"</span>; |
| 207 | + <span class="keyword">String</span> <span class="variable">password</span> = <span class="string">"password"</span>; |
| 208 | + <span class="keyword">try</span> <span class="punctuation">{</span> |
| 209 | + <span class="keyword">Class</span>.forName(<span class="string">"com.mysql.cj.jdbc.Driver"</span>); |
| 210 | + <span class="keyword">Connection</span> <span class="variable">conn</span> = <span class="method">DriverManager.getConnection</span>(<span class="variable">url</span>, <span class="variable">user</span>, <span class="variable">password</span><span class="punctuation">);</span> |
| 211 | + <span class="keyword">Statement</span> <span class="variable">stmt</span> = <span class="variable">conn</span>.<span class="method">createStatement</span><span class="punctuation">();</span> |
| 212 | + <span class="keyword">ResultSet</span> <span class="variable">rs</span> = <span class="variable">stmt</span>.<span class="method">executeQuery</span>(<span class="string">"SELECT * FROM students"</span>); |
| 213 | + <span class="keyword">while</span> (<span class="variable">rs</span>.<span class="method">next</span>()) <span class="punctuation">{</span> |
| 214 | + <span class="method">System.out.println</span>(<span class="variable">rs</span>.<span class="method">getInt</span>(<span class="string">"id"</span>) + <span class="string">" "</span> + <span class="variable">rs</span>.<span class="method">getString</span>(<span class="string">"name"</span>)); |
| 215 | + <span class="punctuation">}</span> |
| 216 | + <span class="variable">rs</span>.<span class="method">close</span><span class="punctuation">();</span> |
| 217 | + <span class="variable">stmt</span>.<span class="method">close</span><span class="punctuation">();</span> |
| 218 | + <span class="variable">conn</span>.<span class="method">close</span><span class="punctuation">();</span> |
| 219 | + <span class="keyword">} catch</span> (<span class="keyword">Exception</span> <span class="variable">e</span>) <span class="punctuation">{</span> |
| 220 | + <span class="method">e.printStackTrace</span><span class="punctuation">();</span> |
| 221 | + <span class="punctuation">}</span> |
| 222 | + <span class="punctuation">}</span> |
| 223 | +<span class="punctuation">}</span> |
| 224 | + </code></pre> |
| 225 | +</div> |
| 226 | + |
| 227 | + |
| 228 | +<br/> |
| 229 | + |
| 230 | +## 🛠️ Common JDBC Ports |
| 231 | +<br/> |
| 232 | + |
| 233 | +| Database | Default Port | |
| 234 | +|--------------|--------------| |
| 235 | +| MySQL | 3306 | |
| 236 | +| PostgreSQL | 5432 | |
| 237 | +| Oracle DB | 1521 | |
| 238 | +| SQL Server | 1433 | |
| 239 | + |
| 240 | + |
| 241 | + |
| 242 | +## 📎 Tips |
| 243 | + |
| 244 | +- Always close ResultSet, Statement, and Connection. |
| 245 | +- Use `PreparedStatement` to avoid SQL injection. |
| 246 | +- Use try-with-resources for cleaner code. |
| 247 | +- Handle exceptions gracefully. |
| 248 | + |
| 249 | + |
| 250 | +**Happy Coding ☕** |
0 commit comments