Java學習第十八天

SQLManager

package com.donghe.test;

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

/**
 * 數據庫連接
 * 
 * @author Administrator
 *
 */
public class SQLManager {
    // 單例設計模式
    public Statement statement;// 操作類
    private static SQLManager manager;// 需要設置爲靜態的
    private Connection conn;

    public static synchronized SQLManager newInstance() {// synchronized避免多線程進來創建不同的對象
                                                            // SQLManager(返回值類型)
        if (manager == null) {
            manager = new SQLManager();
        }
        return manager;
    }

    private SQLManager() {

        // 鏈接數據庫的驅動
        String driver = "com.mysql.jdbc.Driver";// com.mysql.jdbc包下的Driver
        // URL指向要訪問的數據庫名
        String url = "jdbc:mysql://localhost:3306/clazz";// localhost本地主機(前面//)3306端口號(前面:)clazz數據庫名稱(前面/)
        // MySQL配置時的用戶名
        String user = "root";
        // Java連接MySQL配置時的密碼
        String password = "201216328";// 自己設置的密碼
        try {
            // 加載驅動
            Class.forName(driver);// 返回Driver的Class對象
            // 與數據庫建立連接
            conn = DriverManager.getConnection(url, user, password);// 試圖建立到給定數據庫URL的連接
            // 首先看連接是不是開着的
            if (!conn.isClosed()) {
                // 數據庫操作類Statement(接口) 在sql包中不是object中的statement(類)
                statement = conn.createStatement();// Connection.createStatement()創建一個Statement對象來將SQL語句發送到數據庫。
                statement.execute(
                        "create table if not exists user(id int(11) not null primary key auto_increment,user_name varchar(30) binary not null,password varchar(30) binary  not null)");
                        // binary區分大小寫的 primary key主鍵 if not exists如果不存在就創建

                // String insert="insert
                // intostudent(stu_name,age,sex)values('李四',14,1)";
                // statement.execute(insert);
                // String insert1="insert
                // intostudent(stu_name,age,sex)values('張三',16,0)";
                // statement.execute(insert1);
                // String update="update Student set age=15 wherestu_name='張三'";
                // statement.execute(update);
                // String delete="delete from student where age>14";
                // statement.execute(delete);

                // String select = "select *from student";
                // ResultSet set = statement.executeQuery(select);// 得到一個結果集
                // set.first();// 遊標放在set的第一行
                // while (!set.isAfterLast()) {//
                // ResultSet.isAfterLast()獲取光標是否位於此
                // // ResultSet 對象的最後一行之後。
                // System.out.println(set.getString("stu_name"));//
                // columnLabel列標記
                // // row行
                // set.next();//遊標往下移
                // }
            } else {
                System.out.println("請打開數據庫");
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public Statement getStatement() {
        return statement;
    }

    public void setStatement(Statement statement) {
        this.statement = statement;
    }

    public Connection getConn() {
        return conn;
    }

    public void setConn(Connection conn) {
        this.conn = conn;
    }

}

SQLOperate

package com.donghe.test;

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

public class SQLOperate {
    private static SQLOperate operate;//靜態的供靜態方法調用
    private SQLOperate(){//單例設計模式  1.私有構造器

    }
    //newinstance只是方法名
    public static synchronized SQLOperate newinstance(){//2.提供方法得到新實例(只有一個synchronized同步的防止多線程的情況)static可以通過類名.調用   類型爲類名因爲你要得到的是該類的一個對象
        if(operate==null){
            operate=new SQLOperate();//通過構造器構造
        }
        return  operate;//返回的是實例
    }

    private boolean isSignIn=false;
    /**
     * 功能:判斷是否登陸成功  
     * @param userName 用戶賬號
     * @param password 用戶密碼
     * @return true登陸成功 false登錄失敗
     */
    public boolean signIn(String userName,String password){
        //預處理操作類
        Connection connection=SQLManager.newInstance().getConn();//得到連接
        try {
            if(!connection.isClosed()){//連接是否關閉
                //創建數據庫操作類
            PreparedStatement preparedStatement=connection.prepareStatement("select * from user where user_name= ? and password= ?");//必須用and
            preparedStatement.setString(1, userName);//給第一個參數user_name=?賦值userName
            preparedStatement.setString(2, password);//給第二個參數password=?賦值password
            ResultSet set=preparedStatement.executeQuery();//結果集
            set.last();//遊標在最後一行
            int num=set.getRow();//最後一行的行號

            return num==1;//1就是true

            }
        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return isSignIn=false;
    }

}

Register

package com.donghe.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
//不要使用全角空格
public class Register extends JFrame {

    private JPanel contentPane;
    private JTextField textFieldUserName;
    private JTextField textFieldPassword;
    private static Register frame;
    boolean isRight = false;
    boolean isRight2 = false;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    frame = new Register();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Register() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        textFieldUserName = new JTextField();
        textFieldUserName.setBounds(129, 29, 168, 36);
        contentPane.add(textFieldUserName);
        textFieldUserName.setColumns(10);

        textFieldPassword = new JTextField();
        textFieldPassword.setBounds(129, 90, 168, 36);
        contentPane.add(textFieldPassword);
        textFieldPassword.setColumns(10);

        JButton btnNewButton = new JButton("提交");
        btnNewButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String userName = textFieldUserName.getText();
                String password = textFieldPassword.getText();
                while (true) {
                    Pattern p = Pattern.compile("^\\w{6,16}$");
                    Matcher m = p.matcher(userName);
                    isRight = m.matches();
                    if (isRight) {
                        Pattern p1 = Pattern.compile("^\\w{6,16}$");
                        Matcher m1 = p.matcher(password);
                        isRight2 = m1.matches();
                        if (isRight2) {

                            Statement state = SQLManager.newInstance().statement;
                            String sql = "select * from user where user_name='" + userName + "'";
                            try {
                                ResultSet set = state.executeQuery(sql);// 結果集
                                set.last();
                                int num = set.getRow();
                                if (num > 0) {
                                    System.out.println("該用戶已存在");
                                    return;
                                } else {
                                    String register = "insert into user(user_name,password) values ('" + userName
                                            + "','" + password + "')";
                                    state.execute(register);
                                    System.out.println("註冊成功");
//                                  RegisterSuccess success=new RegisterSuccess();
//                                  Frame frame=success.getFrame();
//                                  frame.setVisible(true);
                                    SignIn si=new SignIn();
                                    Frame frame=si.getFrame();
                                    frame.setVisible(true);
                                    return;
                                }

                            } catch (SQLException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }
                        }

                    } else {
                        System.out.println("你的輸入不規範,請重新輸入");
                        textFieldUserName.setText("");
                        textFieldPassword.setText("");
                        return;
                    }
                }
            }
        });
        btnNewButton.setBounds(129, 155, 168, 36);
        contentPane.add(btnNewButton);

        JLabel lblNewLabel = new JLabel("用戶賬號");
        lblNewLabel.setBounds(27, 29, 68, 36);
        contentPane.add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("用戶密碼");
        lblNewLabel_1.setBounds(27, 100, 68, 26);
        contentPane.add(lblNewLabel_1);
    }

    public static Register getFrame() {
        frame = new Register();
        return frame;
    }

    public static void setFrame(Register frame) {
        Register.frame = frame;
    }
}

SignIn

package com.donghe.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;


import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.print.attribute.ResolutionSyntax;
import javax.swing.JButton;

public class SignIn extends JFrame {

    private JPanel contentPane;
    private JTextField textFieldUserName;
    private JTextField textFieldPassword;
    private static SignIn frame;
//  private boolean isSignIn=false;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    frame = new SignIn();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public SignIn() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        textFieldUserName = new JTextField();
        textFieldUserName.setBounds(157, 42, 170, 33);
        contentPane.add(textFieldUserName);
        textFieldUserName.setColumns(10);

        textFieldPassword = new JTextField();
        textFieldPassword.setBounds(157, 106, 170, 33);
        contentPane.add(textFieldPassword);
        textFieldPassword.setColumns(10);

        JLabel lblNewLabel = new JLabel("用戶賬號");
        lblNewLabel.setBounds(66, 46, 54, 24);
        contentPane.add(lblNewLabel);

        JLabel lblNewLabel_1 = new JLabel("用戶密碼");
        lblNewLabel_1.setBounds(66, 110, 54, 24);
        contentPane.add(lblNewLabel_1);

        JButton btnNewButton = new JButton("登錄");
        btnNewButton.setBounds(157, 167, 80, 33);
        contentPane.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("註冊");
        btnNewButton_1.setBounds(260, 167, 67, 28);
        contentPane.add(btnNewButton_1);
        btnNewButton_1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                Register register=new Register();
                Frame frame=register.getFrame();
                frame.setVisible(true);
            }
        });



        btnNewButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String userName=textFieldUserName.getText();
                String password=textFieldPassword.getText();
//              Statement state=SQLManager.newInstance().statement;
//              String  sql="select * from user where user_name='"+userName+"' and password='"+password+"'";
//              try {
//                  ResultSet set=state.executeQuery(sql);
//                  set.last();
//                  int num=set.getRow();
//                  System.out.println(num);
//              } catch (SQLException e1) {
//                  // TODO Auto-generated catch block
//                  e1.printStackTrace();
//              }
                boolean isSignIn=SQLOperate.newinstance().signIn(userName, password);//是否登陸成功
                if(isSignIn){
                    System.out.println("登陸成功");
                }else{
                    System.out.println("登錄失敗");
                }






            }
        });


    }

    public static SignIn getFrame() {
        frame = new SignIn();
        return frame;
    }

    public static void setFrame(SignIn frame) {
        SignIn.frame = frame;
    }

}

RegisterSuccess

package com.donghe.test;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

public class RegisterSuccess extends JFrame {

    private JPanel contentPane;
    private static RegisterSuccess frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    frame = new RegisterSuccess();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public RegisterSuccess() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 250, 190);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblNewLabel = new JLabel("恭喜你註冊成功!");
        lblNewLabel.setBounds(62, 43, 193, 61);
        contentPane.add(lblNewLabel);
    }

    public static RegisterSuccess getFrame() {
        frame = new RegisterSuccess();
        return frame;
    }

    public static void setFrame(RegisterSuccess frame) {
        RegisterSuccess.frame = frame;
    }

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