目录
今天为大家带来一个简单的JAVA项目,连接SQL Server数据库实现账号登录等功能,SQL Server2022,Intellij IDEA2023,java版本openjdk-21,maven版本3.9.6。
我得说明一下,你直接运行这个源代码是没有用的!一步一步配置好环境来,再去运行。
当然了,这个主要适合新人基础入门学习,话不多说,直接开始。
一、创建SQL数据库文件
1. 打开SQL数据库,记住服务器名称、登录名和密码这些信息:

2. 创建一个“LoginRegister”数据库,在里面新建一张“账号登录”表。这个数据库和表的名字可以自定义,但是后面的代码里面相关信息也要对应修改,所以,熟悉后,再去修改,自己尝试一下。

二、下载和配置Maven文件
1. 可以去maven官网下载,自定义选择自己需要的版本,下面我以3.9.6版本进行演示。
https://maven.apache.org/download.cgi
https://archive.apache.org/dist/maven/maven-3/

2. 下载后解压在指定位置,不要乱移动!在里面新建一个Repository仓库文件夹。

3. 通过IDEA打开conf里面的settings.xml文件进行编辑。

在这个位置添加下面这行代码。这个仓库位置一定是自己创建的仓库所在路径,看清楚!
<!--配置本地Repository仓库位置--><localRepository>D:\Downloads\IDEA\apache-maven-3.9.6\Repository</localRepository>

5. 然后往下滑,在这个位置添加下面这行代码,配置阿里云镜像文件:
<!--配置镜像文件位置--><mirror><id>alimaven</id><name>aliyun maven</name><url>https://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>

6. 然后在IDEA设置里面配置Maven文件和路径:

三、编写Java项目源代码
1. 新建一个java项目,如图所示:

2. 如图所示进行创建文件,另外,不要忘记上面配置的maven设置。

3. 下载SQL数据库驱动文件,在pom.xml文件里面添加下面这行代码:
<dependencies><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>6.3.0.jre8-preview</version></dependency></dependencies>
添加代码后,点击右上方的刷新进行下载。如图所示:

4. 在jdbc.properties文件里面配置SQL数据库连接信息,添加下面这段代码:
这里我没有直接在源代码里面写SQL连接信息,而是把它转到这个properties文件里面,一方面是方便调用,另一方面是方便修改。
#导入SQL驱动
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
#SQL数据库地址,LoginRegister为数据库名称(不能为中文,会报错)
jdbc.url=jdbc:sqlserver://localhost;databaseName=LoginRegister
#SQL数据库登录名
jdbc.username=sa
#密码
jdbc.password=123456
如图所示:

四、编写源代码文件
1. 准备就绪后,开始写源代码。
这个SQL连接信息封装在一个ConnectionString()方法里面,方便调用,演示一下如何使用。
importjava.io.IOException;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.util.Properties;publicclassMain{publicstaticvoidmain(String[] args)throwsSQLException{//在主函数里面调用这个ConnectionString()方法Connection conn =ConnectionString();if(conn !=null){//只要连接信息不为空System.out.println("数据库连接成功!");}else{System.out.println("数据库连接失败!");}
conn.close();}//返回数据库连接信息publicstaticConnectionConnectionString(){Connection conn =null;try{// 读取jdbc.properties文件InputStream is =Main1.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties props =newProperties();
props.load(is);// 获取数据库连接Class.forName(props.getProperty("jdbc.driverClassName"));
conn =DriverManager.getConnection(props.getProperty("jdbc.url"), props.getProperty("jdbc.username"), props.getProperty("jdbc.password"));}catch(IOException|ClassNotFoundException|SQLException e){
e.printStackTrace();}return conn;}}
这里我还写了一个SHA-256加盐加密方法,主要是针对密码进行加密,然后存储在数据库里面。
演示一下如何使用这个函数。
importjava.nio.charset.StandardCharsets;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.util.Scanner;publicclass main2 {publicstaticvoidmain(String[] args){Scanner scanner=newScanner(System.in);System.out.println("请输入用户名:");String user=scanner.nextLine();System.out.println("请输入密码:");String pwd=scanner.nextLine();System.out.println("加密后的密码:"+EncryptWithSalt(user,pwd));}//SHA-256加盐加密publicstaticStringEncryptWithSalt(String username,String password){String salt = username + password;// 盐值为用户名和密码拼接try{MessageDigest messageDigest =MessageDigest.getInstance("SHA-256");byte[] saltBytes = salt.getBytes(StandardCharsets.UTF_8);
messageDigest.update(saltBytes);byte[] bytes = messageDigest.digest(password.getBytes(StandardCharsets.UTF_8));StringBuilder builder =newStringBuilder();for(byte aByte : bytes){
builder.append(Integer.toString((aByte &0xff)+0x100,16).substring(1));}String encryptedPassword = builder.toString();int length = encryptedPassword.length();//将加密后的密文长度缩短为原来的1/4,再输出返回if(length %2==0){return encryptedPassword.substring(0, length /4);}else{return encryptedPassword.substring(0,(length -1)/4);}}catch(NoSuchAlgorithmException e){
e.printStackTrace();}returnnull;}}
2. 以下是完整的源代码:
importjava.io.IOException;importjava.io.InputStream;importjava.nio.charset.StandardCharsets;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.sql.*;importjava.util.Properties;importjava.util.Scanner;publicclassMain1{publicstaticScanner scanner =newScanner(System.in);//登录功能publicstaticvoidLogin()throwsSQLException{System.out.println("\n***********************************************************************");System.out.println("**************************** 账号登录 *********************************");System.out.println("***********************************************************************");Connection conn =ConnectionString();if(conn !=null){//数据库连接成功System.out.print("请输入用户名:");String username = scanner.nextLine();System.out.print("请输入密码:");String password = scanner.nextLine();String sql ="SELECT * FROM 账号登录 WHERE username = ?";PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);ResultSet rs = stmt.executeQuery();if(rs.next()){// 账号存在,继续判断密码是否正确StringPassword1= rs.getString("password");if(Password1.equals(EncryptWithSalt(username, password))){System.out.println("登录成功!");
conn.close();Main2();}else{System.out.println("密码错误!");
conn.close();Login();}}else{// 账号不存在,跳转到注册功能System.out.println("该账号不存在,请先注册账号!");
conn.close();Main2();}}else{System.out.println("数据库连接失败!");
conn.close();System.exit(0);}}//注册功能publicstaticvoidRegister()throwsSQLException{System.out.println("\n***********************************************************************");System.out.println("**************************** 账号注册 *********************************");System.out.println("***********************************************************************");Connection conn =ConnectionString();if(conn !=null){System.out.print("请输入新账号:");String username = scanner.nextLine();System.out.print("请输入新密码:");String password1 = scanner.nextLine();System.out.print("请确认新密码:");String password2 = scanner.nextLine();if(!password1.equals(password2)){System.out.println("两次密码不相同,请重新输入!");Register();}else{String sql ="SELECT * FROM 账号登录 WHERE username = ?";PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);ResultSet rs = stmt.executeQuery();if(!rs.next()){//账户不存在,注册IsRegister(username, password1);
conn.close();Main2();}else{System.out.println("该账号已经注册!");
conn.close();Login();}}}else{System.out.println("SQL数据库连接失败!");
conn.close();}}//插入注册账号数据到数据库publicstaticvoidIsRegister(String username,String password){Connection conn =ConnectionString();try{// 插入账号和密码String sql ="INSERT INTO 账号登录 (username, password) VALUES (?, ?)";PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2,EncryptWithSalt(username, password));int rowsAffected = stmt.executeUpdate();if(rowsAffected >0){System.out.println("账号注册成功!");
conn.close();}else{System.out.println("账号注册失败!");
conn.close();}}catch(SQLException e){
e.printStackTrace();}}//修改账号密码publicstaticvoidChange()throwsSQLException{System.out.println("\n***********************************************************************");System.out.println("**************************** 修改密码 *********************************");System.out.println("***********************************************************************");Connection conn =ConnectionString();if(conn !=null){//数据库连接成功System.out.print("请输入账号:");String username = scanner.nextLine();System.out.print("请输入旧密码:");String oldpwd = scanner.nextLine();System.out.print("请输入新密码:");String newpwd = scanner.nextLine();String selectSql ="SELECT * FROM 账号登录 WHERE username = ? AND password = ?";PreparedStatement selectStmt = conn.prepareStatement(selectSql);
selectStmt.setString(1, username);
selectStmt.setString(2,EncryptWithSalt(username, oldpwd));ResultSet resultSet = selectStmt.executeQuery();if(resultSet.next()){//账号密码正确if(!oldpwd.equals(newpwd)){IsChange(username, newpwd);
conn.close();Main2();}else{System.out.println("新旧密码不得相同!");
conn.close();Change();}}else{System.out.println("账号或密码错误!");
conn.close();Main2();}}else{System.out.println("数据库连接失败!");
conn.close();}}//保存修改后的密码到数据库publicstaticvoidIsChange(String username,String newpwd){Connection conn =ConnectionString();try{// 新旧密码不同,进行密码修改String updateSql ="UPDATE 账号登录 SET password = ? WHERE username = ?";PreparedStatement updateStmt = conn.prepareStatement(updateSql);
updateStmt.setString(1,EncryptWithSalt(username, newpwd));
updateStmt.setString(2, username);int rowsAffected = updateStmt.executeUpdate();if(rowsAffected >0){System.out.println("账号密码修改成功!");
conn.close();}else{System.out.println("账号密码修改失败!");
conn.close();Main2();}}catch(SQLException e){
e.printStackTrace();}}//账号注销publicstaticvoidDelete()throwsSQLException{System.out.println("\n***********************************************************************");System.out.println("**************************** 账号注销 *********************************");System.out.println("***********************************************************************");Connection conn =ConnectionString();if(conn !=null){System.out.print("请输入账号:");String username = scanner.nextLine();System.out.print("请输入密码:");String password = scanner.nextLine();String selectSql ="SELECT * FROM 账号登录 WHERE username = ? AND password = ?";PreparedStatement selectStmt = conn.prepareStatement(selectSql);
selectStmt.setString(1, username);
selectStmt.setString(2,EncryptWithSalt(username, password));ResultSet resultSet = selectStmt.executeQuery();if(resultSet.next()){//账号密码正确IsDelete(username);}else{System.out.println("账号或密码错误!");}}else{System.out.println("数据库连接失败!");}
conn.close();Main2();}//从数据库删除注销账号数据publicstaticvoidIsDelete(String username){Connection conn =ConnectionString();try{String deleteSql ="DELETE FROM 账号登录 WHERE username = ?";PreparedStatement deleteStmt = conn.prepareStatement(deleteSql);
deleteStmt.setString(1, username);int rowsAffected = deleteStmt.executeUpdate();if(rowsAffected >0){System.out.println("账号注销成功!");}else{System.out.println("账号注销失败!");}}catch(SQLException e){
e.printStackTrace();}}publicstaticvoidMain2()throwsSQLException{System.out.println("\n***********************************************************************");System.out.println(" 1、账号登录;2、账号注册;3、修改密码;4、注销账号;0、退出程序. ");System.out.println("***********************************************************************");System.out.print("请输入选择:");String num = scanner.nextLine().trim();while(true){switch(num){case"1"->Login();case"2"->Register();case"3"->Change();case"4"->Delete();case"0"->{System.out.println("程序已退出!\n");System.exit(0);}default->{System.out.print("请重新输入选择:");
num = scanner.nextLine().trim();}}}}publicstaticvoidmain(String[] args)throwsSQLException{Main2();}//数据库连接信息publicstaticConnectionConnectionString(){Connection conn =null;try{// 读取jdbc.properties文件InputStream is =Main1.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties props =newProperties();
props.load(is);// 获取数据库连接Class.forName(props.getProperty("jdbc.driverClassName"));
conn =DriverManager.getConnection(props.getProperty("jdbc.url"), props.getProperty("jdbc.username"), props.getProperty("jdbc.password"));}catch(IOException|ClassNotFoundException|SQLException e){
e.printStackTrace();}return conn;}//SHA-256加盐加密publicstaticStringEncryptWithSalt(String username,String password){String salt = username + password;// 盐值为用户名和密码拼接try{MessageDigest messageDigest =MessageDigest.getInstance("SHA-256");byte[] saltBytes = salt.getBytes(StandardCharsets.UTF_8);
messageDigest.update(saltBytes);byte[] bytes = messageDigest.digest(password.getBytes(StandardCharsets.UTF_8));StringBuilder builder =newStringBuilder();for(byte aByte : bytes){
builder.append(Integer.toString((aByte &0xff)+0x100,16).substring(1));}String encryptedPassword = builder.toString();int length = encryptedPassword.length();if(length %2==0){return encryptedPassword.substring(0, length /4);}else{return encryptedPassword.substring(0,(length -1)/4);}}catch(NoSuchAlgorithmException e){
e.printStackTrace();}returnnull;}}
五、结语
说实话,距离上一次发布文章,隔了将近1年的时间,这段时间一直没有动力,一直没有去锻炼自己的编程能力。接下来的时间还得继续努力,一起加油吧!
版权归原作者 书海shuhai 所有, 如有侵权,请联系我们删除。