我已经提高了我对java的知识2年了。今天,我开始使用databases.I有2个类是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() {
}
}
我哪里做错了?你可以帮我解决这个问题吗。谢谢你们。
答案 0 :(得分:0)
您的JDBC连接可能处于事务模式。即通过连接传递的(多个)查询只有在提交(或关闭)连接时才会真正执行(在隔离中)。
因此,调用connection.commit()
或connection.close()
应该这样做。
您的代码中只有一个主要的设计错误,这使得很难正确实现这一点。你基本上需要重写一切。首先,您绝对不应该使用昂贵的数据库资源,例如Connection
,Statement
和ResultSet
作为类的实例变量。应该在尽可能短的范围内声明,获取和关闭它们,最好是在与执行SQL查询的方法块相同的方法块中。此外,所有JDBC作业都属于单独的DAO类,而不是托管bean。您的DAO代码需要以这种方式设计,以便您最终在addUser()
方法中得到如下结果:
public void addUser() throws SQLException {
memberDAO.create(member);
}
为了更进一步,请考虑学习EJB / JPA。 EJB允许对事务进行更精细的控制,并且具有合理的默认行为(例如,在请求结束时自动提交),JPA导致更少的JDBC样板代码,所有JDBC代码基本上可以被oneliner替换。