1. 程式人生 > >java 與資料庫連線 實現使用者的註冊和登入

java 與資料庫連線 實現使用者的註冊和登入

package com.lijianrong.Mysql.cn;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.sql.*;
/**
 *作者:rong
 * 功能:與資料庫中的使用者資料進行匹配 匹配成功的話顯示成功對話方塊。
 * 2016-7-17
 */
public class LoginFrame
{

	// 登入介面的GUI元件
	private JFrame jf = new JFrame("登入");
	private JPanel jp1=new JPanel();
	private JPanel jp2=new JPanel();
	private JPanel jp3=new JPanel();
	private JButton jb1=new JButton("註冊");
	private JTextField userField = new JTextField(20);
	private JTextField passField = new JTextField(20);
	private JButton loginButton = new JButton("登入");
	public void init()throws Exception
	{
		
		// 載入驅動
		Class.forName("com.mysql.jdbc.Driver");
		// 為登入按鈕新增事件監聽器
		loginButton.addActionListener(e -> {
			// 登入成功則顯示“登入成功”
			System.out.println(userField.getText() +"\t"+passField.getText()+"\t"+validate(userField.getText(), passField.getText()));
			if (validate(userField.getText(), passField.getText()))
			{
				JOptionPane.showMessageDialog(jf, "登入成功");
			}
			// 否則顯示“登入失敗”
			else
			{
				JOptionPane.showMessageDialog(jf, "登入失敗");
			}
		});
		jb1.addActionListener(e -> {
			// 登入成功則顯示“登入成功”
			System.out.println(userField.getText() +"\t"+passField.getText()+"\t"+validate(userField.getText(), passField.getText()));
			try {
				cheak(userField.getText(),passField.getText());
				
			
				
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		});
		class mylister extends WindowAdapter{

			@Override
			public void windowClosing(WindowEvent e) {
				
				System.exit(0);
			}
			
		}
		jf.addWindowListener(new mylister());
		jp1.add(new Label("使用者名稱:"));
		jp1.add(userField);
		jp2.add(new Label("密碼:"));
		jp2.add(passField);
		jp3.add(jb1);
		jp3.add(loginButton);
		jf.add(jp3,BorderLayout.SOUTH);

		jf.add(jp1,BorderLayout.NORTH);
		jf.add(jp2 , BorderLayout.CENTER);
		jf.pack();
		jf.setVisible(true);
	}
	//註冊使用者和密碼 (1)首先先檢查資料庫中是否有相應的資料,如果有的話提示"該使用者存在,請直接登入。"
	private void cheak(String userName, String userPass) throws Exception
	{    
		if (validate(userField.getText(), passField.getText()))
		{
			JOptionPane.showMessageDialog(jf, "您已經有賬號了請直接登入。");
		}

		else
		{
			String sql="insert ignore into student values(?,?)";
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?"
	                + "user=root&password=768696&useUnicode=true&characterEncoding=UTF8");
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userName);
			pstmt.setString(2, userPass);
		    pstmt.executeUpdate();
		    JOptionPane.showMessageDialog(jf, "註冊成功請登入。。。。");
		}
			
		
	}
	//判斷資料庫中是否有該使用者名稱和密碼
	private boolean validate(String userName, String userPass)
	{
		String sql="select *from student where student.name='"+userName+"' and student.password='"+userPass+"'";
		try(
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?"
	                + "user=root&password=768696&useUnicode=true&characterEncoding=UTF8");
			Statement pstmt = conn.createStatement();
				ResultSet rs=pstmt.executeQuery(sql))
		
		{	//如果查詢的ResultSet裡有超過一條的記錄,則登入成功
				if (rs.next())
				{
					return true;
				}
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return false;
	}

	public static void main(String[] args) throws Exception
	{
		new LoginFrame().init();
		
	}
}