连接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
)

步骤四: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();
        }
    }
}

定义一个账号的接口(用于规范该类必须实现的内容)

package ycc.account;
/**
 * @author: 姚崇崇
 * 
 */

public interface Account {
    //登录
    public void login(String id, String password);

    //注册
    public int register(String id,String password);

    //重置(清空输入框即可)
    public void reset();

}

接下来定义账号类

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 + '\'' +
                '}';
    }
}

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);
    }
}

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;

}

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;
        }
    }
}

在这里插入图片描述
欢迎各位多多评论,
My QQ:2959606653,也可以加个好友一块学习

你好!下面是一个关于如何编写一个SQL Server数据库案例。 假设我们要创建一个简单的学生信息管理系统。该系统包括两个表,一个是学生表,另一个是课程表。 首先,我们可以创建一个名为"Student"的表,该表包含以下列: - StudentID(学生ID):作为主键,用于唯一标识每个学生。 - Name(姓名):学生的姓名。 - Age(年龄):学生的年龄。 - Gender(性别):学生的性别。 - Major(专业):学生的专业。 然后,我们可以创建一个名为"Course"的表,该表包含以下列: - CourseID(课程ID):作为主键,用于唯一标识每门课程。 - CourseName(课程名称):课程的名称。 - Credit(学分):课程的学分。 接下来,我们可以为学生表和课程表之间的关系创建一个关联表。我们可以将其命名为"StudentCourse"表,该表包含以下列: - StudentID(学生ID):作为外键,关联到学生表的主键。 - CourseID(课程ID):作为外键,关联到课程表的主键。 通过这个关联表,我们可以实现学生和课程的多对多关系,即一个学生可以选择多门课程,而一门课程也可以由多个学生选择。 最后,我们可以通过编写SQL语句来实现对该数据库的操作,例如: - 插入学生信息:INSERT INTO Student (StudentID, Name, Age, Gender, Major) VALUES ('001', '张三', 20, '男', '计算机科学'); - 插入课程信息:INSERT INTO Course (CourseID, CourseName, Credit) VALUES ('001', '数据库', 3); - 插入学生选课信息:INSERT INTO StudentCourse (StudentID, CourseID) VALUES ('001', '001'); - 查询学生所选课程:SELECT Student.Name, Course.CourseName FROM Student INNER JOIN StudentCourse ON Student.StudentID = StudentCourse.StudentID INNER JOIN Course ON StudentCourse.CourseID = Course.CourseID WHERE Student.Name = '张三'; - 更新学生信息:UPDATE Student SET Age = 21 WHERE StudentID = '001'; - 删除学生选课信息:DELETE FROM StudentCourse WHERE StudentID = '001'; 通过上述步骤,我们可以编写一个简单的SQL Server数据库,并实现对学生信息和课程信息的管理和查询操作。希望这个案例能对你有所帮助!
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值