步骤一: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,也可以加个好友一块学习