2012-04-18 8 views
0

2年間javaについての知識を向上させていました。今日はデータベースで作業を開始しました.2つのクラスのDatabaseConnectionとUserModel.Databaseconnectionクラスに接続操作とUserModel私は削除と更新コードを書いていません。私はメソッドを追加するだけです。しかし、それはユーザーに追加します。私は多くのことを考えましたが、私はそれを修正しませんでした。JSFはmysqlを使って作業している間にユーザーを追加していません

これは私の接続クラスです:

/* 
* 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

JDBC接続はトランザクションモードである可能性があります。私。接続を介して渡された(複数の)クエリは、接続がコミット(またはクローズ)されたときに(分離されて)実際にのみ実行されます。

したがって、connection.commit()またはconnection.close()を呼び出す必要があります。

あなたはコードで重大な設計ミスを犯しましたが、これを適切に実装することは困難です。基本的にはすべてを書き直す必要があります。まず、クラスのインスタンス変数として、Connection,StatementResultSetなどの高価なDBリソースを絶対に使用しないでください。可能な限り短く、好ましくはSQLクエリを実行しているのと同じ方法ブロックで宣言し、取得し、終了する必要があります。また、そのJDBCジョブはすべて、管理対象Beanではなく、別のDAOクラスに属します。同様EJB/JPAを学んで検討し、更なるステップを取得するには

public void addUser() throws SQLException { 
    memberDAO.create(member); 
} 

:あなたのDAOコードは次のようにあなたが最終的にあなたのaddUser()方法で終わるように、そのように設計する必要があります。 EJBはトランザクションの細かい制御を可能にし、デフォルトの動作(たとえばリクエストの終了による自動コミット)を持ち、JPAのJDBC定型コードが少なくなり、すべてのJDBCコードを基本的にonelinerで置き換えることができます。

関連する問題