c 入库mysql_【Mysql】在Java中如何把用户绑定信息入库 | 学步园

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

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

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

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

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

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

1fa1c1507acff05584774f714a3d931b.png

那么在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/scholat_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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值