数据库入门~连接数据库(详细步骤+登录注册案例+简单界面)

步骤一:SQL Server使用sql server身份验证登录,方便与编写的程序连接

<1> 首先使用Windows登录进去,右键实例,点击属性,再选择安全性,将该选项卡中的服务器身份验证改为sql server和windows身份验证模式。点击确定

<2>此时重新登录数据库,可能会再次失败
失败的提示是:
已成功与服务器建立连接 但是在登录过程中发生错误。 provider 共享内存提供程序 error 0 管道的另一端上无任何进程。

<3>此时打开SQL Server配置管理器,启动SQL Server Browser,设置为自动

SQL Server 连接 sql server 连接方式_jdbc


<4>选择SQL Server网络配置选项卡,点击TCP/IP,修改它的属性

SQL Server 连接 sql server 连接方式_SQL Server 连接_02

SQL Server 连接 sql server 连接方式_SQL Server 连接_03

IPALL的TCP Port设置为1433,一般情况下动态端口应该是1433,我这个56892,不影响使用。<5>重新启动SQL Server(MSSQLSERVER)

SQL Server 连接 sql server 连接方式_java_04


<6>现在已经可以使用SQL Server身份验证进行登录。不过前提是你得创建的有SQL Server的身份登录。<7>创建SQL Server的身份登录:

使用Windows身份验证登录进来后,点击安全性,右键登录名,点击新建登录名,登录名随便起一个,密码设置一下,一般设置为123456。为了方便,我们取消勾选强制密码过期。然后进入服务器角色,勾选管理员权限即可(一般为最后一个)。OK,可以点击确定了。

如下图所示:

SQL Server 连接 sql server 连接方式_java_05

步骤二:在idea中导入JDBC包,用于连接数据库

<1>首先,下载JDBC包,这里给大家提供一个,可根据需要自行下载:点击进入下载JDBC包 <2>接着,将下载好的包随便Unzip到一个位置。

<3>OK,打开我们的idea,点击如图

SQL Server 连接 sql server 连接方式_java_06

进入这个选项卡,继续,点击右边这个+,点击java

SQL Server 连接 sql server 连接方式_sql_07

接着,找到之前解压的JDBC包的位置,然后一直OK就行

SQL Server 连接 sql server 连接方式_SQL_08

此时,你会发现如图,这里已经有JDBC包了

SQL Server 连接 sql server 连接方式_jdbc_09


步骤三:创建数据库以及案例需要的表

create database Login_Register
go
use Login_Register
create table accountInformation
(
    id char(12) primary key,
	password varchar(16) not null
)

步骤四:java连接数据库,实现代码

先给大家看一下我写好的登录注册的简陋的样子,以及类,接口和包

SQL Server 连接 sql server 连接方式_SQL_10

运行后的界面

SQL Server 连接 sql server 连接方式_sql_11

数据输入不合法,登录失败

SQL Server 连接 sql server 连接方式_jdbc_12

登陆成功

SQL Server 连接 sql server 连接方式_sql_13

主键唯一性约束,账号不可重复,故注册失败

SQL Server 连接 sql server 连接方式_SQL_14

输入格式有误,注册失败

SQL Server 连接 sql server 连接方式_java_15

注册成功后的提示

SQL Server 连接 sql server 连接方式_SQL_16

重置后清空输入的内容,方便重新输入

SQL Server 连接 sql server 连接方式_SQL_17


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