JSF在使用mysql时没有添加用户

JSF在使用mysql时没有添加用户,mysql,jsf,jdbc,model,Mysql,Jsf,Jdbc,Model,我已经提高了两年的java知识。今天,我开始使用数据库。我有两个类,DatabaseConnection和UserModel。DatabaseConnection类有连接操作,UserModel将添加、删除、,更新等。方法。我还没有写删除和更新代码。我只写了添加方法。但它是添加到用户。我搜索了很多想法,但我无法修复 这是我的连接类: /* * To change this template, choose Tools | Templates * and open the template i

我已经提高了两年的java知识。今天,我开始使用数据库。我有两个类,DatabaseConnection和UserModel。DatabaseConnection类有连接操作,UserModel将添加、删除、,更新等。方法。我还没有写删除和更新代码。我只写了添加方法。但它是添加到用户。我搜索了很多想法,但我无法修复

这是我的连接类:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

/**
 *
 * @author KHn
 */
public abstract class DatabaseConnection {
    private Connection connect;
    private static final String dbUsername="root";
    private static final String dbPassword="";
    private static final String dbName="virtualblog";
    private static final String dbHost="jdbc:mysql://localhost:3306/";
    private String driver="com.mysql.jdbc.Driver";
    private Statement st;
    private ResultSet rs;
    /** Creates a new instance of DatabaseConnection */
    public DatabaseConnection(){
        try { 
        Class.forName(this.driver).newInstance();
        setConnect((Connection)DriverManager.getConnection(dbHost+dbName,dbUsername,dbPassword));

        } catch (Exception e) {
            System.out.println(e);
        }
    }
    public Connection getConnect() {
        return connect;
    }

    public void setConnect(Connection connect) {
        this.connect = connect;
    }



}
此外,这是一个UserModelClass:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.beans.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

    /**
 *
 * @author KHn
 */
@ManagedBean
@RequestScoped
public class UserModel extends DatabaseConnection{
    private PreparedStatement ps;
    private Statement st;
    private ResultSet ts;
    Register member =new Register();
    public Register getUser() {
        return member;
    }
    public void setUser(Register member) {
        this.member = member;
    }
    public boolean addUser(){
        try{
            ps=(PreparedStatement)getConnect().prepareStatement("INSERT INTO `members`(`id`, `username`, `email`, `password`, `name`, `avatar`, `blogname`) VALUES (null,?,?,'3694406','kaan','asdasd','blog adi')");
            ps.setString(2, member.getUsername());
            ps.setString(3, member.getEmail());
            ps.executeUpdate();
        }catch (Exception e) {
            System.err.println("ekleme hatasi: "+e);
        }
        return true;
    }
/** Creates a new instance of UserModel */
    public UserModel() {
    }
}

我哪里做错了?您能帮我一下吗?谢谢并致以最诚挚的问候。

您的JDBC连接可能处于事务模式。也就是说,通过连接传递的多个查询只有在连接提交或关闭时才会真正在隔离状态下执行

因此,调用connection.commit或connection.close应该可以做到这一点

您的代码中只有一个严重的设计错误,这使得它很难正确实现。你基本上需要重写一切。首先,您绝对不应该将昂贵的数据库资源(如Connection、Statement和ResultSet)作为类的实例变量。它们应该在尽可能短的范围内声明、获取和关闭,最好是在执行SQL查询的方法块中。另外,所有JDBC作业都属于单独的DAO类,而不是托管bean。DAO代码需要以这种方式设计,以便最终在addUser方法中得到如下结果:

公共void addUser引发SQLException{ memberDAO.createmember; } <>请进一步研究EJB/JPA。EJB允许对事务进行更细粒度的控制,并有一个健全的默认行为,例如,在请求结束时自动提交,而JPA会减少JDBC样板代码,所有JDBC代码基本上都可以用一行程序代替