1. 程式人生 > >eclipse MySQL jdbc 實現簡單登入

eclipse MySQL jdbc 實現簡單登入

先講邏輯,我理了兩個星期才搞清楚。。。一把心酸一把淚,希望我理解的是對的並且明確清晰的,,,,

前提配置檔案,eclipse,mysql下載,jar包匯入,資料庫連線,

  • 1.將前端程式碼匯入jsp檔案;首先在WebContent資料夾下新建資料夾寫兩個前端的註冊登入兩個頁面regist.jsp和login.jsp,和登入註冊成功以後要顯示的頁面,success.jsp 和 error.jsp;關於圖片插入,可直接放在一個資料夾下,也可以構建一個存所有圖片的資料夾,引用的時候一定要加上資料夾名稱 

                

具體程式碼: 

<body>
<div class="main">
	<div class="header">
		<form action="<%= request.getContextPath() %>/RegistServlet" method = "post" id="input1"> 
                //action裡面是跳轉路徑,這裡就是跳轉到了RegistServlet.java 
			<p style="font-size:20px;">使用者名稱:</p>  
			<input type = "text" name = "username" id = "input2" />   //這裡的name會在Sevlet中呼叫
			<p style="font-size:20px;">密碼:</p>
			<input type = "password" name = "password" id = "input3" />
			<p style="font-size:20px;">確認密碼:</p>
			<input type = "password" name = "rpsw" id = "input5" />
			<input type = "submit" value = "立即註冊" id = "input4" style="color:black"/>
		</form>
	</div>
</div>
</body>

//圖片插入格式
<img src="13/2.png" style="width: 220px;height: 200px;">
  • 2.建立servlet檔案;在JAVA Resources資料夾下的src下建立一個類 在該類下寫入兩個登陸註冊的servlet檔案 LoginServlet.java和RegistServlet.java  用java程式碼來判斷是否輸入為空,連線了資料庫可以用java判斷輸入資料是否為資料庫中存在的正確資料,是否能成功登入註冊,從而跳轉至對應的jsp頁面,

                    

詳細程式碼:

jsp檔案中反映到前端頁面的表單提交按鈕,點選以後會跳轉到指定的的servlet檔案,以登入的servlet.java為例

package com.helloworld.servlat;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.helloworld.dao.UserDao; //引入連線資料庫的java檔案包

//只調用dopost方法即可
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String psw =new UserDao().findUsername(username);
		
		if(psw ==null){
			request.setAttribute("msg", "沒有這個使用者!");
			request.getRequestDispatcher("14/error.jsp").forward(request, response);
			return;

		}
		if(psw!=null&&!psw.equals(password)){
			request.setAttribute("msg", "密碼錯誤請重新輸入!");
			request.getRequestDispatcher("14/error.jsp").forward(request, response);
			return;	
		}
		if(psw.equals(password)){
			request.setAttribute("msg", "使用者:"+username+",歡迎訪問");
			request.getRequestDispatcher("14/success.jsp").forward(request, response);
		}
	}
}

註冊servlet程式碼部分:

package com.helloworld.servlat;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.helloworld.dao.UserDao;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String rpsw = request.getParameter("rpsw");//得到表單輸入的內容
		if(username==null||username.trim().isEmpty()){
			request.setAttribute("msg", "帳號不能為空");
			request.getRequestDispatcher("13/regist.jsp").forward(request, response);
			return;
		}
		if(password==null||password.trim().isEmpty()){
			request.setAttribute("msg", "密碼不能為空");
			request.getRequestDispatcher("13/regist.jsp").forward(request, response);
			return;
		}
		if(!password.equals(rpsw)){
			request.setAttribute("msg", "兩次輸入的密碼不同");
			request.getRequestDispatcher("13/regist.jsp").forward(request, response);
			return;
		}
		UserDao u = new UserDao();
		int num = 6;
		u.addUser(num,username,password);//呼叫addUser()方法
		request.setAttribute("msg", "恭喜:"+username+",註冊成功");
		request.getRequestDispatcher("13/success.jsp").forward(request, response);
	}
}
  • 3.配置的xml檔案,首先在新建專案時,注意勾選才能自動匯入web.xml檔案,

            

xml中的配置檔案中,一個servlet檔案需要設定一個<severlet> </servlet>和一個<servlet-mapping></servlet-mapping>

<servlet>
    <servlet-name>LoginServlet1</servlet-name>
    <servlet-class>com.helloworld.servlat.LoginServlet1</servlet-class>
 </servlet>
 <servlet-mapping>
    <servlet-name>LoginServlet1</servlet-name>
    <url-pattern>/loginServlet1</url-pattern>
 </servlet-mapping>

<servlet>
    <servlet-name>RegistServlet</servlet-name>
    <servlet-class>com.helloworld.servlat.RegistServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>RegistServlet</servlet-name>
    <url-pattern>/registServlet</url-pattern>
</servlet-mapping>

Xml用來設計傳輸和儲存資料,html用來是設計顯示資料。

Xml沒有預定義標籤,需要進行自定義。

平時在進行開發的時候,例如進行hibernate開發的時候,我們可以匯入自己預先定地的dtd檔案(標記符的語法規則)進行規範化。

xml和html一樣都是標記語言,但是xml是可擴充套件的標籤語言,可自定義標籤如:<你好><\你好>,html主要用於顯示資料,xml主要用於儲存資料

如果你需要在 HTML 文件中顯示動態資料,那麼每當資料改變時將花費大量的時間來編輯 HTML。

通過 XML,資料能夠儲存在獨立的 XML檔案中。這樣你就可以專注於使用 HTML 進行佈局和顯示,並確保修改底層資料不再需要對 HTML進行任何的改變。

通過使用幾行 JavaScript,你就可以讀取一個外部 XML檔案,然後更新 HTML 中的資料內容。

<?xml version="1.0" encoding="gbk"?> 
//文件宣告 必須寫到第一行第一列,
//version屬性表示版本,一般採用1.0版本,因為1.1版本不適用於1.0格式; 
//encoding屬性:編碼 gbk utf-8 iso8859-1(不包含中文)
<person>
    <name>張三</name>
    <age>18</age>
</person>

注意點:

xml 只能有一個根標籤, xm 將空格和換行都當作內容來解析 xml 標籤名稱可以為中文,區分大小寫,不能以數字和下劃線開頭,不能以xml Xml開頭,不能包含空格和冒號, xml一個標籤上可以有多個屬性,屬性名稱不可想同,可用單引號也可以用雙引號   <person id1="1" id2="2"></person> PI指令:

xml樣式引用:<?xml-stylesheet type="text/css" href="css路徑"?>,設定樣式只能對英文標籤起作用,

<?xml version="1.0" encoding="gbk"?> 
<?xml-stylesheet type="text/css" href="css路徑"?>
<person>
    <name>張三</name>
    <age>18</age>
</person>
  •  4.資料庫連線eclipse介面部分(建在src下);

主要用於查詢資料庫中資訊檢驗登陸資訊的是否正確從而跳轉到相應的頁面和新增新資訊到資料庫中

package com.helloworld.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDao {

		public String findUsername(String username){
			String psw = null;
			Connection con =null;
			PreparedStatement pstmt =null;
			ResultSet rs = null;
			try {
				String driver ="com.mysql.cj.jdbc.Driver";
				String url ="jdbc:mysql://localhost:3306/my?useSSL=false&serverTimezone=GMT%2B8";
				String user ="root";
				String password ="123456";//改為自己的使用者名稱密碼和資料庫名
				Class.forName(driver);
				con = DriverManager.getConnection(url, user, password);
				String sql = "select * from setting where name=?";
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, username);
				rs = pstmt.executeQuery();
				if(rs==null){
					return null;
				}
				if(rs.next()){
					psw=rs.getString("password");
				}else{
					psw=null;
				}
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if(pstmt!=null)pstmt.close();
					if(con!=null)con.close();
					} 
				catch (SQLException e) {		
										}
			}
			return psw;
		}

		public void addUser(int id,String username,String psw){
			Connection con =null;
			PreparedStatement pstmt =null;
			try {
				String driver ="com.mysql.cj.jdbc.Driver";
				String url ="jdbc:mysql://localhost:3306/my?useSSL=false&serverTimezone=GMT%2B8";
				String user ="root";
				String password ="123456";//改為自己的使用者名稱密碼和資料庫名
				Class.forName(driver);		
				con = DriverManager.getConnection(url, user, password);
				String sql = "INSERT INTO SETTING VALUES(?,?,?)";
				pstmt = con.prepareStatement(sql);
				pstmt.setInt(1, id);
				pstmt.setString(2, username);
				pstmt.setString(3, psw);
				pstmt.executeUpdate();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally {
				try {
					if(pstmt!=null)pstmt.close();
					if(con!=null)con.close();
					} 
				catch (SQLException e) {		
										}
			}
		}
		
}

資料庫和eclipse的連線

我本來是打算安裝sql server來連線eclipse的,但是實在是遇到太多問題了,如果有耐心的話可以借鑑一下下面的部落格,都講的比較詳細,還有一些問題的解決方法也在裡面了

鑑於mysql資料庫和eclipse的連線:

連線首先安裝mysql資料庫,詳細安裝步驟即地址:http://www.runoob.com/mysql/mysql-install.html,安裝以後要在安裝資料庫的資料夾下新建一個my.ini格式的文件,這裡或許需要設定一下顯示檔案字尾名,點選 我的電腦 檢視 > > 顯示(進入資料夾選項中)> > 檢視 > > 將隱藏已知檔案型別的副檔名的選項取消勾選,新建my.ini資料夾的內容為:

[mysqld]
basedir=D:\mysql-8.0.11-winx64 //你的資料庫安裝路徑

port=3306
character-set-server=utf8
init_connect='SET collation_connection = utf8_unicode_ci'  
init_connect='SET NAMES utf8'  
collation-server=utf8_unicode_ci  
[mysql]
no-auto-rehash
default-character-set=utf8
[client]
default-character-set=utf8

然後配環境變數,新建路徑,在檢驗時,注意用管理員方式(右鍵設定進入Windows PowerShell )特別的在管理員開啟的命令列中 輸入進入mysql命令時需要在前面加.\mysql ,當然也可以用命令列直接檢驗啦,下面是我歸納總結的命令列操作資料庫的常用語句:

開啟命令列,輸入mysql -u root -p ,顯示password:輸入密碼,進入資料庫

顯示存在的資料庫名稱:show databases;

一般會顯示幾個mysql自帶的資料庫:

  • information_schema
  • mysql
  • performance_schema
  • sys

進入想要使用的資料庫:use 資料庫名稱;

選擇所要使用的表:select *from 表的名稱;

建表:create table 表名(id  int(5),

                                      - >name varchar(10),

                                      - >password varchar(10));

在表中新增資訊:insert into 表名 values (1,'1001','123456') //只要是字串都需要上下引號

匯入驅動以後,在eclipse中輸入連線資料庫的埠程式碼,我用的mysql是8.0版本以上的,所有就需要新增cj也就是驅動的地址改為:com.mysql.cj.jdbc.Driver

try {
      Class.forName("com.mysql.jdbc.Driver");     //載入MYSQL JDBC驅動程式   
      //Class.forName("org.gjt.mm.mysql.Driver");
     System.out.println("Success loading Mysql Driver!");
    }
    catch (Exception e) {
      System.out.print("Error loading Mysql Driver!");
      e.printStackTrace();
    }
    try {
      Connection connect = DriverManager.getConnection(
          "jdbc:mysql://localhost:3306/test","root","198876");
           //連線URL為   jdbc:mysql//伺服器地址/資料庫名  ,後面的2個引數分別是登陸使用者名稱和密碼

      System.out.println("Success connect Mysql server!");
      Statement stmt = connect.createStatement();
      ResultSet rs = stmt.executeQuery("select * from user");
                                                              //user 為你表的名稱
while (rs.next()) {
        System.out.println(rs.getString("name"));
      }
    }
    catch (Exception e) {
      System.out.print("get data error!");
      e.printStackTrace();
    }
  }

關於查詢資料庫名稱:注意要修改原密碼以後才能檢視名稱,mysql 8.0修改密碼的方法:https://blog.csdn.net/lxlong89940101/article/details/80246675?tdsourcetag=s_pctim_aiomsg,這裡修改完以後再用命令列進入mysql需要關閉然後重啟伺服器,命令分別為:nex stop mysql;nex start mysql ;修改完成以後在命令列輸入mysql -u root -p 然後回車輸入新密碼,進入資料庫,然後輸入命令”show databases;”(注意不要掉分號),顯示資料庫名稱;