準備工具
去網上下載MySQL和Navicat,這裏給個我們老師的網盤,裏面有相關工具
MySQL
MySQL的教程可以看我的這篇MySQL數據庫入門學習
創建數據庫
要想通過java連接數據庫,首先通過Navicat工具連接MySQL,然後創建數據庫jsp,再創建一個表單user,表單裏的字段以及相應的屬性見下圖
JDBC
Java連接數據庫分四步:1.加載驅動類、2.創建數據庫連接、3.向數據庫發送聲明、4.獲取返回的結果(結果集)、5.關閉數據庫連接。接下來我就這幾步,詳細說明其中使用到的類,以及用法
1.加載驅動類
加載驅動類之前首先導入包含數據庫編程所需的JDBC類。大多數情況下,使用import java.sql.* 就夠了
import java.sql.*;
接着就是加載驅動類,這樣就可以打開與數據庫的通信。以下是代碼片段實現這一目標
Class.forName("com.mysql.jdbc.Driver");
2.創建數據庫連接
使用DriverManager.getConnection()方法來創建一個Connection對象,它代表一個數據庫的物理連接,如下所示:
String final url = "jdbc:mysql://localhost:3306/jsp";//訪問數據的url String final username = "root";//數據庫的用戶名 String final password = null;//數據庫的密碼 Connection conn = DriverManager.getConnection(url, username, password);
3.向數據庫發送聲明
需要使用一個類型爲Statement或PreparedStatement的對象,並提交一個SQL語句到數據庫執行查詢。如下:
String sql = "select * from user"; PreparedStatement pstmt = conn.PreparedStatement(sql); ResultSet rs = pstmt.executeQuery();
最好使用PreparedStatement,因爲其會預處理聲明,避免出現被sql注入的情況 如果要執行一個SQL語句:UPDATE,INSERT或DELETE語句,那麼需要下面的代碼片段:
String sql = "delete from user"; PreparedStatement pstmt = conn.PreparedStatement(sql); ResultSet rs = pstmt.executeUpdate()
4.獲取返回的結果
可以使用適當的ResultSet.getXXX()方法來檢索的數據結果:
while(rs.next()){ //Retrieve by column name int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); //Display values System.out.print("ID: " + id); System.out.print(", Age: " + age); System.out.print(", First: " + first); System.out.println(", Last: " + last); }
注意在獲取返回的結果時,順序不能亂,如果getString(2)然後再getString(1)將會報錯。但是某些列可以不取,比方說取1,2,4,6,...不會報錯
5.關閉數據庫連接,釋放資源
在使用JDBC與數據交互操作數據庫中的數據後,應該明確地關閉所有的數據庫資源以減少資源的浪費。在關閉數據庫連接的時候一定注意:與數據庫連接的創建順序相反,ResultSet可以手動關閉也可以不關閉,系統會默認幫我們關閉
pstmt.close(); conn.close();
第一JDBC實例
基於上面的步驟,我們可以綜合示例代碼,使用以下代碼作爲模板來編寫JDBC代碼
<%@page import="cn.edu.wic.jsp.bean.User"%> <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.Connection"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>JDBC</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <% List<User> users = new ArrayList<User>(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/jsp"; String username = "root"; String password = null; conn = DriverManager.getConnection(url, username, password); pstmt = conn.prepareStatement("select * from user"); rs = pstmt.executeQuery(); while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setName(rs.getString("name")); out.print(user.getId() + "," + user.getUsername() + "," + user.getPassword() + "," + user.getName()); } } catch (Exception e) { e.printStackTrace(); } finally { if (pstmt != null) { try { pstmt.close(); } catch (Exception e) { } } if (rs != null) { try { conn.close(); } catch (Exception e) { } } } %> </body> </html>
這裏說明一點,我把所有的信息都保存到User類中,用一個List存放所有的User類的對象