csjoz11

导航

连接SQL Server数据库(详细步骤+登录注册案例)

数据库入门~连接数据库(详细步骤+登录注册案例+简单界面)
步骤一:SQL Server使用sql server身份验证登录,方便与编写的程序连接
 
<1> 首先使用Windows登录进去,右键实例,点击属性,再选择安全性,将该选项卡中的服务器身份验证改为sql server和windows身份验证模式。点击确定
 
<2>此时重新登录数据库,可能会再次失败
失败的提示是:
已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。
 
<3>此时打开SQL Server配置管理器,启动SQL Server Browser,设置为自动
 
<4>选择SQL Server网络配置选项卡,点击TCP/IP,修改它的属性
IPALL的TCP Port设置为1433,一般情况下动态端口应该是1433,我这个56892,不影响使用。
 
<5>重新启动SQL Server(MSSQLSERVER)
 
<6>现在已经可以使用SQL Server身份验证进行登录。不过前提是你得创建的有SQL Server的身份登录。
 
<7>创建SQL Server的身份登录:
使用Windows身份验证登录进来后,点击安全性,右键登录名,点击新建登录名,登录名随便起一个,密码设置一下,一般设置为123456。为了方便,我们取消勾选强制密码过期。然后进入服务器角色,勾选管理员权限即可(一般为最后一个)。OK,可以点击确定了。
如下图所示:
 
 
步骤二:在idea中导入JDBC包,用于连接数据库
 
<1>首先,下载JDBC包,这里给大家提供一个,可根据需要自行下载:点击进入下载JDBC包
<2>接着,将下载好的包随便Unzip到一个位置。
<3>OK,打开我们的idea,点击如图
进入这个选项卡,继续,点击右边这个+,点击java
接着,找到之前解压的JDBC包的位置,然后一直OK就行
此时,你会发现如图,这里已经有JDBC包了
 
步骤三:创建数据库以及案例需要的表
 
create database Login_Register
go
use Login_Register
create table accountInformation
(
    id char(12) primary key,
password varchar(16) not null
)
1
2
3
4
5
6
7
8
步骤四:java连接数据库,实现代码、
 
先给大家看一下我写好的登录注册的简陋的样子,以及类,接口和包
运行后的界面
数据输入不合法,登录失败
登陆成功
主键唯一性约束,账号不可重复,故注册失败
输入格式有误,注册失败
注册成功后的提示
重置后清空输入的内容,方便重新输入
 
OK,看完这简陋的效果,介绍一下步骤。
连接数据库的几个步骤:
1:导入驱动包
2:加载驱动
3:建立于数据库的连接
4:发送并处理SQL语句
5:关闭连接
 
<1>第一件事,先把数据库连接代码给写了,这里我创建了一个工具包,里面放的一些工具类,这样会比较方便,所以在这里我就直接把连接数据库的代码包装成了一个工具类(JDBCUtil.java)
 
package ycc.util;
 
/**
 * 读取和释放数据库的工具类
 * @author: 姚崇崇
 * 
 */
 
import java.sql.*;
 
public class JDBCUtil {
    private static String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=Login_Register;user=test;password=123456";
    private static String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
 
    static {
        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
 
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url);
    }
 
    public static void release(ResultSet rs, Statement st,Connection conn){
        try {
            if (rs!=null){
                rs.close();
            }
            if (st!=null){
                st.close();
            }
            if (conn!=null){
                conn.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
定义一个账号的接口(用于规范该类必须实现的内容)
 
package ycc.account;
/**
 * @author: 姚崇崇
 * 
 */
 
public interface Account {
    //登录
    public void login(String id, String password);
 
    //注册
    public int register(String id,String password);
 
    //重置(清空输入框即可)
    public void reset();
 
}
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
接下来定义账号类
 
package ycc.account;
/**
 * @author: 姚崇崇
 * 
 */
 
import ycc.util.Constant;
import ycc.util.JDBCUtil;
 
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
public class AccountImpl implements Account{
    private String id;
    private String password;
    public int sign=100;//用于记录登录的情况
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
 
    /**
     * 登录
     * @param id
     * @param password
     */
    @Override
    public void login(String id, String password) {
        String ID="";
        String PASSWORD="";
        List<AccountImpl> list=new ArrayList<>();
        AccountImpl account=new AccountImpl();
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
        try {
            conn = JDBCUtil.getConnection();
            st = conn.createStatement();
            String sql="select * from accountInformation where id="+id;
            rs = st.executeQuery(sql);
            while(rs.next()){
                account.setId(rs.getString("id"));
                account.setPassword(rs.getString("password"));
                ID=account.getId();
                PASSWORD=account.getPassword();
                list.add(account);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtil.release(rs,st,conn);
        }
        if (list.size()==1){
            if (PASSWORD.equals(password)){
                sign=Constant.LOGIN_SUCCEED;
            }else {
                sign=Constant.LOGIN_ERROR_PASSWORD_IS_FALSE;
            }
        }else {
            sign=Constant.LOGIN_ERROR_ACCOUNT_NOT_EXIST;
        }
    }
 
 
 
    /**
     * 注册
     * @param id
     * @param password
     */
    @Override
    public int register(String id, String password) {
        String sql="insert into accountInformation(id,password) values ('"+id+"','"+password+"')";
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
        try {
            conn = JDBCUtil.getConnection();
            st = conn.createStatement();
            sign=Constant.REGISTER_SUCCEED;
            return st.executeUpdate(sql);
        } catch (SQLException e) {
            sign=Constant.REGISTER_DEFAULT;
            e.printStackTrace();
        }finally {
            JDBCUtil.release(rs,st,conn);
        }
        return 0;
 
    }
 
    /**
     * 重置
     */
    @Override
    public void reset() { }
 
    @Override
    public String toString() {
        return "AccountImpl{" +
                "id='" + id + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
OK,接下来就是搞个界面就结束了
 
package ycc.main;
/**
 * @author: 姚崇崇
 * 
 */
import ycc.account.AccountImpl;
import ycc.util.Constant;
import ycc.util.MyUtil;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Main {
    public static void main(String[] args) {
 
        AccountImpl account=new AccountImpl();
 
        JFrame jf=new JFrame();
        jf.setLocationRelativeTo(null);
        jf.setSize(400,300);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        JPanel panel=new JPanel();
 
        JLabel txt=new JLabel("账号:");
        JLabel password=new JLabel("密码:");
        //创建账号框和密码框,并设置框的初始大小,然后放到面板中
        final JTextField textField=new JTextField();
        final JPasswordField passwordField=new JPasswordField();
        textField.setPreferredSize(new Dimension(300,30));
        passwordField.setPreferredSize(new Dimension(300,30));
 
 
        JButton buttonLogin=new JButton("登录");
        JButton buttonRegister=new JButton("注册");
        JButton buttonReset=new JButton("重置");
 
        panel.add(txt);
        panel.add(textField);
        panel.add(password);
        panel.add(passwordField);
 
        panel.add(buttonLogin);
        panel.add(buttonRegister);
        panel.add(buttonReset);
 
        buttonLogin.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (MyUtil.judgeID(textField.getText())&&MyUtil.judgePassword(new String(passwordField.getPassword()))) {
                    account.login(textField.getText(), new String(passwordField.getPassword()));
                    if (account.sign == Constant.LOGIN_SUCCEED) {
                        JOptionPane.showMessageDialog(
                                jf,
                                "登录成功!",
                                "提示",
                                JOptionPane.INFORMATION_MESSAGE
                        );
                    } else if (account.sign == Constant.LOGIN_ERROR_ACCOUNT_NOT_EXIST) {
                        JOptionPane.showMessageDialog(
                                jf,
                                "账号不存在!",
                                "错误",
                                JOptionPane.ERROR_MESSAGE
                        );
                    } else if (account.sign == Constant.LOGIN_ERROR_PASSWORD_IS_FALSE) {
                        JOptionPane.showMessageDialog(
                                jf,
                                "密码错误!",
                                "错误",
                                JOptionPane.ERROR_MESSAGE
                        );
                    }
                }else {
                    JOptionPane.showMessageDialog(
                            jf,
                            "账号或者密码的输入格式错误!请重新输入\n提示:账号为12位数字,密码为1~16位的字符",
                            "错误",
                            JOptionPane.ERROR_MESSAGE
                    );
                }
            }
        });
 
        buttonRegister.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (MyUtil.judgeID(textField.getText())&&MyUtil.judgePassword(new String(passwordField.getPassword()))) {
                    account.register(textField.getText(), new String(passwordField.getPassword()));
                    if (account.sign == Constant.REGISTER_SUCCEED) {
                        JOptionPane.showMessageDialog(
                                jf,
                                "注册成功!",
                                "提示",
                                JOptionPane.INFORMATION_MESSAGE
                        );
                    } else if (account.sign == Constant.REGISTER_DEFAULT) {
                        JOptionPane.showMessageDialog(
                                jf,
                                "注册失败!",
                                "错误",
                                JOptionPane.ERROR_MESSAGE
                        );
                    }
                }else {
                    JOptionPane.showMessageDialog(
                            jf,
                            "账号或者密码的输入格式错误!请重新输入\n提示:账号为12位数字,密码为1~16位的字符",
                            "错误",
                            JOptionPane.ERROR_MESSAGE
                    );
                }
            }
        });
 
        buttonReset.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textField.setText("");
                passwordField.setText("");
            }
        });
 
        jf.setContentPane(panel);
        jf.setVisible(true);
    }
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
OK,有始有终,这里我把剩余的有关代码全部给大家提供了。
剩余的类的代码:
Constant.java:(存放一些常量,便于后期的维护)
 
package ycc.util;
/**
 * @author: 姚崇崇
 * 
 */
public class Constant {
 
    //登录成功
    public static final int LOGIN_SUCCEED=0;
 
    //密码错误
    public static final int LOGIN_ERROR_PASSWORD_IS_FALSE=1;
 
    //账号不存在
    public static final int LOGIN_ERROR_ACCOUNT_NOT_EXIST=2;
 
    //注册成功
    public static final int REGISTER_SUCCEED=3;
 
    //注册失败
    public static final int REGISTER_DEFAULT=4;
 
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
MyUtil.java:(判断账号和密码的输入是否合法)
 
package ycc.util;
 
/**
 * @author: 姚崇崇
 */
 
public class MyUtil {
 
    public static boolean judgeID(String id){
        if (id.length()==12){
            char[] arr=id.toCharArray();
            for (char c : arr) {
                if (c >= '0' && c <= '9') {
                } else {
                    return false;
                }
            }
        }else {
            return false;
        }
        return true;
    }
 
    public static boolean judgePassword(String password){
        if (password.length()>0&&password.length()<=16){
            return true;
        }else {
            return false;
        }
    }
}
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
欢迎各位多多评论,
My QQ:2959606653,也可以加个好友一块学习
————————————————
版权声明:本文为CSDN博主「JarmanYao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43624549/article/details/108031770

posted on 2023-10-04 15:21  csjoz11  阅读(327)  评论(0编辑  收藏  举报