【Java】在Java中如何把用户绑定信息入库

现在都流行通过外站A账号去登陆B网站,从而为一些懒人用户免去再次注册账号的麻烦

当然,也必须要求此用户用外站A账号登陆本站B之后,重填B的信息,毕竟每个网站的用户信息表的结构是不同的,如果可以允许用户外站A账号登陆,又可以用本站B的账号登陆,那么程序就乱套了。

如果提供绑定服务,在后台的数据处理就多了一步,既要记录外站A账号的信息,又要为此用户建立本站B的账号信息。

举一个简单的例子,首先在数据库中建立3张表外站C用户信息表,本站D用户信息表,C与D的关联表,当然,本站的用户信息表一般是存在,用原来那张即可。

注意:此处的id都是自增列,下面的插入语句不用管这一列。c_d_link除主键外,各项都允许为空。

外键(参照完整性)的设置如下图:


那么在JAVA中把用户绑定信息入库的过程如下:

import java.sql.*;

class Dbcon {
	// 此处连接数据库,不再赘述
	public static Connection getCon() {
		Connection con = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/test";
			String user = "root";
			String password = "root";
			con = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return con;
	}
}

public class test {
	private void go() {
		// 假设网页外部请求:外站C的用户名为1,密码为2的信息与本站D的用户名为1,密码为2的信息绑定
		String c_username = "1";
		String c_password = "2";
		String d_username = "1";
		String d_password = "2";
		// con是用来操作连接的,也就是连接句柄,rs是用来控制查询结果的
		Connection con = new Dbcon().getCon();
		ResultSet rs = null;
		String sql = null;
		// 外站C的用户信息验证略去,一般通过调用外站C提供的API来验证,登陆成功之后看看其绑定了没有
		// 方法是查C表,是否已经存在这条信息
		sql = "select * from c where username='" + c_username + "'";
		try {
			rs = con.prepareStatement(sql).executeQuery();
			if (rs.next()) {
				con.close();
			} else {
				// 如果登陆成功且未绑定,插入本站D的来的用户信息
				sql = "INSERT INTO d(d_username,d_password) VALUES ('"
						+ d_username + "','" + d_password + "') ";
				// 注意:操作数据库的语句Insert into,update与查询数据库的语句select在Java的语句是不同的
				// 操作数据库为con.createStatement().execute(sql);
				// 查询数据库为rs
				// =con.prepareStatement(sql).executeQuery();而且查询结果必须被rs接住
				con.createStatement().execute(sql);

				sql = "INSERT INTO c(c_username,c_password) VALUES ('"
						+ c_username + "','" + c_password + "')";
				con.createStatement().execute(sql);
				// 用order by id desc命令查询刚刚插入c表的那条记录的id号,select语句嵌套在insert into中了
				// limit 1为仅显示1条记录
				sql = "insert into c_d_link(c_id) select id as c_id from c order by id desc limit 1;";
				con.createStatement().execute(sql);

				// 由于c_d_link表还没有插入完,所以用update把空项替换为查询结果
				// 这就是c_d_link除主键外,其余各项允许为空的原因
				// 首次插入用insert into,没有插入完毕用update
				// 判断是否为空要注意是where d_id is null而不是 where
				// d_id=null,后者是得不到任何想要的结果的,会出错的
				sql = "update c_d_link set d_id=(select id as d_id from d order by id desc limit 1) where d_id is null;";
				con.createStatement().execute(sql);
				//记得完成所有操作之后关闭数据库的连接哦!人走带门!
				con.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值