| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2825 人关注过本帖
标题:利用Dbutils实现往两个有关联的表新增数据的问题
只看楼主 加入收藏
会龙庄
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2019-4-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
利用Dbutils实现往两个有关联的表新增数据的问题
最近在编程时遇到遇到一个,在实现用户注册时,需要将用户信息存入到User表(主键UserId,自动增加,存姓名、密码),同时将主键UserId和其他该用户一起注册的信息存入到User_Message表中,两个表通过UserId进行关联。
现在的问题:不知道如何编写实现将注册信息存入到两个表中,查了很多资料都说用事务或者触发器,本人第一次做此类功能,不知道触发器或事务应该写在java文件里还是sql语句内,希望大家能够解答。下面附上源码。
Register.java(表单传过来的后台处理文件)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String username=LM.toChinese(request.getParameter("username"));
        String password=request.getParameter("password");
        String sex=LM.toChinese(request.getParameter("sex"));
        System.out.println(sex);
        String email=request.getParameter("email");
        response.setContentType("text/html;charset=utf-8");
        NowTime time=new NowTime();
        String ts=time.getDate();
        String createby=username;
        UserBean user=new UserBean();
        UserImple ui=new UserImple();
        User_Message um=new User_Message();
        
        user=ui.AddUser(username,password,email,sex,createby,ts);
        response.sendRedirect("Login.jsp");
    }
```

UserImple.java(目前是往单一表存储数据)
public UserBean AddUser(String username, String password, String email, String sex, String createby, String ts) {
        // TODO Auto-generated method stub
        try{
            QueryRunner qr=new QueryRunner(JavaUtils.getPools());
            String sql="insert into user (Username,UserPassword,Email,Sex,Create_Time,Create_By) values (?,?,?,?,?,?);";
            Object[] params={username,password,email,sex,ts,createby};
            qr.update(sql, params);
            return null;
        }catch(SQLException e){
            throw new RuntimeException("注册失败!");
        }
    }
```


请大家多指点指点,谢谢
```
```
搜索更多相关主题的帖子: String username password email new 
2019-04-25 15:00
rind
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:49
专家分:368
注 册:2018-3-8
收藏
得分:10 
你要理解jdbc的话,学习一些数据库的基础知识比较好。

jdbc中会有常用sql语句的对应方法,简单来说,jdbc是用java语言与sql的翻译,
(个人感觉是纯翻译,不怎么处理逻辑的,你的sql是什么逻辑,就能产生什么效果的那种),
不过这个是大纲。而对应数据库的驱动包则是对翻译的实现,这个是细节。

如果你在命令行中写sql语句很熟练了,那么jdbc的一些方法、写法其实也好理解了,就是对应关系。

菜鸟教程上有简单的教程,sql语句那个过一遍,mysql那个过一遍,然后命令行写一写,
sql基本入门,至少能看懂大部分sql语句了,当然写得好,又是另一回事。


[此贴子已经被作者于2019-4-25 17:00编辑过]


仅供参考,欢迎指正
2019-04-25 16:55
会龙庄
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2019-4-25
收藏
得分:0 
回复 2楼 rind
sql这些我都看了,网上的关于事务或者触发器的都是直接谈核心。我重点看了关于事务的,基本的事务代码我能看到了,但是写的时候我不知道事务代码是写在String sql="事务代码"还是说类似于java方法去调用,另外事务变量@a,这个@a可不可以是一个sql语句。因为事务一般至少都会涉及两次对数据库的操作。求解答疑问,谢谢
2019-04-25 17:09
rind
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:49
专家分:368
注 册:2018-3-8
收藏
得分:0 
额,抱歉说错了。

jdbc的事务是默认开启、而且自动提交。

所以想要在java中写两条作为一个事务,需要手动提交。
connection.setAutoCommit(false);     // 关闭自动提交
Statement s = connection.createStatement();
try {
    String sql1 = "insert into pet(id,name) VALUES (10,'cat')";
    String sql2 = "insert into pet(id,name) VALUES (11,dog)";  //dog没有单引号
    s.execute(sql1);       //没错
    s.execute(sql2);       //出错
    ();                 // 手动提交
} catch (SQLException e) {
    connection.rollback();                //回滚。
}


仅供参考,欢迎指正
2019-04-26 14:43
逆向学习
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2019-4-28
收藏
得分:10 
回复 楼主 会龙庄
长知识了,感谢分享
2019-04-28 16:22
快速回复:利用Dbutils实现往两个有关联的表新增数据的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020197 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved