JDBC

準備工具

 去網上下載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.向數據庫發送聲明

 需要使用一個類型爲StatementPreparedStatement的對象,並提交一個SQL語句到數據庫執行查詢。如下:

String sql = "select * from user";
PreparedStatement pstmt = conn.PreparedStatement(sql);
ResultSet rs = pstmt.executeQuery();

 最好使用PreparedStatement,因爲其會預處理聲明,避免出現被sql注入的情況  如果要執行一個SQL語句:UPDATEINSERTDELETE語句,那麼需要下面的代碼片段:

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類的對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章