加入数据库mysql实现android注册登陆功能的客户端服务器源码与解析socket

我11月21日发表了“实现android注册登陆功能的客户端服务器源码与解析”的博客,刚刚加入了数据库,把我自己加入数据库的过程和又完善了服务器的代码分享一下


一、阅读要求

同11月21日发表博文,如果没有阅读的话建议先阅读后再阅读本博文

对数据库有基本的了解和掌握


二、实现情况

1、解决了在注册时忽然退出再次注册这种情况下,服务器端的bug

2、解决了在注册时忽然退出直接登陆这种情况下,服务器端的bug

3、加入了数据库,可以进行大量用户名和密码存储


三、操作步骤

1、同上篇博文一样的操作环境

2、搭建mysql数据库,如果不会的请自行百度,我使用的是mysql workbench 6.3CE

3、在数据库中建表,建表语句在MyServer->mysql文件夹里面



4、运行MyServer,要注意是运行MyServer而不是运行整个工程


5、安装好app,打开MyClient,然后开始进行注册登陆等操作,可以检测一下是否还存在我在第二条实现情况里面提到的bug,图片界面和上一篇博文相同



四、代码讲解

1、首先客户端和上一篇博文代码是相同的,在这里就不粘贴了,如果想看的朋友请到上一篇博文观看


2、服务器代码


话不多说,解释都在注释中


MyServer.java



package com.test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.ResultSet;


public class MyServer {
	public static void main(String[] args){
		try{
			ServerSocket server=new ServerSocket(6666);
			while(true){
				System.out.println("服务器回归原点");//调试信息
				Socket s1 = server.accept();
				System.out.println("接到客户端socket请求");//调试信息
				InputStream is1 = s1.getInputStream();
				DataInputStream dis1=new DataInputStream(is1);
				String []getStr = dis1.readUTF().split(" ");;//用空格把账号和密码分开存储
				System.out.println(getStr[0]+" "+getStr[1]+" "+getStr[2]);//调试信息
				
				//如果发来注册的信息就做如下操作
				if(getStr[2].equals("Register")){
					System.out.println("等待下一步指令");
					Socket s2 = server.accept();
					InputStream is2 = s2.getInputStream();
					DataInputStream dis2 = new DataInputStream(is2);
					String []getStrSecond = dis2.readUTF().split(" ");//用空格把账号和密码分开存储
					//这个处理是针对有人注册没注册完就退出了程序然后另外有人开始登陆或者重新注册
					System.out.println(getStrSecond[0] + " " + getStrSecond[1]
							+ " " + getStrSecond[2]);// 调试信息
					if(getStrSecond[2].equals("Login")){
						/判断是否可以登录//
						login(s2,getStrSecond);
					}
					else if(getStrSecond[2].equals("Register")){
						//不需要处理
					}
					else if(getStrSecond[2].equals("Registered")){
						///数据库插入操作
						insertMasterDB(getStrSecond);
						///数据库插入操作
					}
					is2.close();
					s2.close();
					dis2.close();
				}
				//如果发来登录账号+密码+login做如下操作
				else if(getStr[2].equals("Login")){
					System.out.println("进入登陆判断");//调试信息
					/判断是否可以登录//
					login(s1,getStr);
					//System.out.println(getStr[0]+" "+getStr[1]+" "+getStr[2]);//调试信息
				}
				//这里是针对进入注册界面但是没有完成注册就退出且再次进入注册界面情况的处理
				else if(getStr[2].equals("Registered")){
					///数据库插入操作
					insertMasterDB(getStr);
					///数据库插入操作
				}
				dis1.close();
				s1.close();
			}
		}catch(IOException e){
			e.printStackTrace();
		}	
	}
	
	/**
	 * 该函数为是否允许用户登录函数
	 * @param s1 建立连接的socket变量
	 * @param getStr 要查找的_id和password都在里面
	 */
	public static void login(Socket s1,String []getStr){
		//如果账号和密码都对的话则返回允许登录命令
		/查找用户名和密码是否一致//
		ServerDatabase masterDB = new ServerDatabase();
		masterDB.connSQL();
		String select = "select * from userdata where _id = '" + getStr[0]
				+ "' and password = '" + getStr[1] + "';";
		ResultSet resultSet = masterDB.selectSQL(select);
		// ///查找用户名和密码是否一致//
		try {
			// 用户名和密码不一致
			if (resultSet.next() == false) {
				// 禁止登录命令
				OutputStream os=s1.getOutputStream();
				DataOutputStream dos=new DataOutputStream(os);
				dos.writeUTF("NO");
				dos.close();
				System.out.println("用户密码错误");//调试信息
			}
			// 用户名和密码一致
			else {
				// 允许登录命令
				OutputStream os=s1.getOutputStream();
				DataOutputStream dos=new DataOutputStream(os);
				dos.writeUTF("YES");
				dos.close();
				System.out.println("用户密码正确");//调试信息
			}
		} catch (Exception e) {
			System.out.println("显示出错。");
			e.printStackTrace();
		}
		masterDB.deconnSQL();// 关闭连接
	}
	
	/**
	 * 该函数为插入master数据库命令
	 * @param getStr 插入数据库的_id password都在里面
	 */
	public static void insertMasterDB(String []getStr){
		ServerDatabase masterDB = new ServerDatabase();
		masterDB.connSQL();
		String s = "select * from userdata";//调试信息
		String insert = "insert into userdata(_id,password) " +
				"values('"+getStr[0]+"','"+getStr[1]+"')";
		if (masterDB.insertSQL(insert) == true) {
			System.out.println("insert successfully");
			ResultSet resultSet = masterDB.selectSQL(s);//调试信息
			masterDB.layoutStyle2(resultSet);//调试信息
		}
		masterDB.deconnSQL();//关闭连接
	}
}


ServerDatabase.java


package com.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ServerDatabase {
	private Connection conn = null;
	private PreparedStatement statement = null;
	// connect to MySQL
	public void connSQL() {
		String urle = "jdbc:mysql://localhost:3306/masterdatabase";//port:3306 database:masterdatabase
		String username = "root";//user
		String password = "102938475610";//password
		try { 
			Class.forName("com.mysql.jdbc.Driver" );//加载驱动,连接数据库
			conn = DriverManager.getConnection(urle,username, password ); 
			}
		//捕获加载驱动程序异常
		 catch ( ClassNotFoundException cnfex ) {
			 System.err.println(
			 "装载 JDBC/ODBC 驱动程序失败。" );
			 cnfex.printStackTrace(); 
		 } 
		 //捕获连接数据库异常
		 catch ( SQLException sqlex ) {
			 System.err.println( "无法连接数据库" );
			 sqlex.printStackTrace();
		 }
	}

	// disconnect to MySQL
	public void deconnSQL() {
		try {
			if (conn != null)
				conn.close();
		} catch (Exception e) {
			System.out.println("关闭数据库问题 :");
			e.printStackTrace();
		}
	}

	// execute selection language
	public ResultSet selectSQL(String sql) {
		ResultSet rs = null;
		try {
			statement = conn.prepareStatement(sql);
			rs = statement.executeQuery(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}

	// execute insertion language
	public boolean insertSQL(String sql) {
		try {
			statement = conn.prepareStatement(sql);
			statement.executeUpdate();
			return true;
		} catch (SQLException e) {
			System.out.println("插入数据库时出错:");
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("插入时出错:");
			e.printStackTrace();
		}
		return false;
	}
	//execute delete language
	public boolean deleteSQL(String sql) {
		try {
			statement = conn.prepareStatement(sql);
			statement.executeUpdate();
			return true;
		} catch (SQLException e) {
			System.out.println("插入数据库时出错:");
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("插入时出错:");
			e.printStackTrace();
		}
		return false;
	}
	//execute update language
	public boolean updateSQL(String sql) {
		try {
			statement = conn.prepareStatement(sql);
			statement.executeUpdate();
			return true;
		} catch (SQLException e) {
			System.out.println("插入数据库时出错:");
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("插入时出错:");
			e.printStackTrace();
		}
		return false;
	}
	
	// show data in ju_users
	public void layoutStyle2(ResultSet rs) {
		System.out.println("-----------------");
		System.out.println("_id" + "\t" + "password");
		System.out.println("-----------------");
		try {
			while (rs.next()) {
				System.out.println(rs.getString("_id") + "\t"
						+ rs.getString("password") + "\n");
				//"\t" + rs.getInt("age") + "\t"+ rs.getString("work") + "\t" + rs.getString("others") +"\n");
			}
		} catch (SQLException e) {
			System.out.println("显示时数据库出错。");
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("显示出错。");
			e.printStackTrace();
		}
	}

	/*public static void main(String args[]) {

		ServerDatabase h = new ServerDatabase();
		h.connSQL();
		String select = "select * from userdata where _id="
				+ "'w'" + " and password="
				+ "'w'" + ";";
		ResultSet resultSet = h.selectSQL(select);
		h.layoutStyle2(resultSet);//调试信息
		String s = "select * from userdata";

		String insert = "insert into userdata(_id,password) " +
				"values('aaron','102938475610')";
		String update = "update userdata set password ='123456789' where _id= 'aaron'";
		String delete = "delete from userdata where _id= 'aaron'";

		if (h.insertSQL(insert) == true) {
			System.out.println("insert successfully");
			ResultSet resultSet = h.selectSQL(s);
			h.layoutStyle2(resultSet);
		}
		if (h.updateSQL(update) == true) {
			System.out.println("update successfully");
			ResultSet resultSet = h.selectSQL(s);	
			h.layoutStyle2(resultSet);
		}
		if (h.insertSQL(delete) == true) {
			System.out.println("delete successfully");
			ResultSet resultSet = h.selectSQL(s);
			h.layoutStyle2(resultSet);
		}
		h.deconnSQL();
	}*/
}


五、注意

1、在java中使用mysql前,要加入相应的jar包,在我的工程中有,但是有可能需要再次添加


mysql-connector-java-5.0.5-bin.jar我使用的jar包,如果工程中没有的话,请自行查找如何添加

2、由于本人在做一个android项目,名字叫做Master,所以在服务器端会提到相关的变量,请读者不要过于在意

3、在使用前,客户端要改掉LogIn.java和Register.java的ip地址,在命令行中用ipconfig查询,服务器端请改掉username password,这两个是你在mysql中设置的用户名和密码

4、在ServerDatabase.java中有一段注释掉的main函数,这个是给读者提供update和delete函数的用法,因为在MyServer.java中并没有调用


源码链接

源码链接


静坐常思己过,闲谈莫论人非


  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
微信小程序连接MySQL数据库可以通过以下几个步骤实现注册登陆功能的代码。 首先,在小程序的app.js文件中进行数据库的配置。可以使用微信提供的wx.request()函数向服务器发送请求,并配置请求的header、method和data等参数。需要在服务器端进行数据库的操作,所以需要提供服务器的API接口。 其次,在小程序的pages文件夹中创建注册登录页面。注册页面需要获取用户输入的注册信息,并通过wx.request()函数将信息传递给服务器API接口。在服务器端将接收到的注册信息存储到MySQL数据库中。登录页面同样需要获取用户输入的登录信息,并通过wx.request()函数将信息传递给服务器API接口进行验证。 接下来,在服务器端编写API接口的代码。通过接口的路由来处理注册登录的请求。注册请求需要将接收到的数据插入到MySQL数据库的用户表中,可以使用MySQL的INSERT语句实现登录请求需要查询用户表中是否存在匹配的用户名和密码,可以使用MySQL的SELECT语句实现。 最后,根据服务器返回的结果,在小程序中进行相应的处理。如果注册成功,可以给用户显示注册成功的提示,并跳转到登录页面。如果登录成功,可以给用户显示登录成功的提示,并跳转到其他页面。 需要注意的是,MySQL数据库连接的配置需要涉及小程序、服务器数据库三个部分的配置,包括数据库的IP地址、端口号、用户名、密码等信息。此外,为了保证用户信息的安全,可以在通信过程中使用数据加密技术进行保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值