このチュートリアルの目的は、Javaに記述された別のレイヤーを使用してデータベース内のテーブルにアクセスすることです。このレイヤーは通常、データアクセスレイヤー(DAL)と呼ばれます
DALを使用することの最大の利点は、常にリンクを実行してからいくつかのクエリを実行するのではなく、挿入()やfind()などのメソッドを直接使用することにより、データベースのアクセス操作を簡素化することです。
このレイヤーは、その内部のすべてのデータベース関連呼び出しとクエリを処理します。
データベースを作成します
ユーザー向けのシンプルなテーブルを作成したい場合は、これらのフィールドを使用して作成できます。
id int
名前Varchar(200)
パスワードvarchar(200)
年齢int
データ転送オブジェクト
このレイヤーには、データ転送オブジェクト(DTO)と呼ばれる単純なクラスが含まれている必要があります。このクラスは、データベースのテーブルに対応する単純なマップであり、テーブル内の各列はクラスのメンバー変数に対応しています。
私たちの目標は、SQLステートメントやその他のデータベース関連コマンドを処理して、データベースを削除、変更、チェックするのではなく、単純なJavaオブジェクトを使用することです。
テーブルをJavaコードにマップする場合は、同じフィールドを含むクラス(Bean)を作成するだけです。
より良いカプセル化するには、コンストラクターに加えて、すべてのフィールド変数をプライベートとして宣言する必要があります。
パブリッククラスユーザー{private integer id;プライベート文字列名;プライベート文字列パス。プライベート整数年齢;}フィールドを正しくマッピングするには、データベースのnull値を考慮する必要があります。 INTタイプなどのJavaの元のデフォルト値の場合、そのデフォルト値は0であるため、null値に対応できる新しいデータ型を提供する必要があります。整数などの特別なタイプ - カプセル化クラスを使用してINTを置き換えることができます。
最後に、私たちのクラスは次のようになるはずです:
パブリッククラスユーザー{private integer id;プライベート文字列名;プライベート文字列パス。民間整数年齢; public user(){} public user(string name、string pass、integer age){this.name = name; this.pass = pass; this.age = age; } public user(integer id、string name、string pass、integer age){this.id = id; this.name = name; this.pass = pass; this.age = age; } public Integer getage(){return age; } public void Setage(整数年齢){this.age = age; } public Integer getId(){return id; } public void setid(integer id){this.id = id; } public string getname(){return name; } public void setName(string name){this.name = name; } public string getPass(){return pass; } public void setPass(string pass){this.pass = pass; }}良い習慣は、デフォルトの空のコンストラクター、完全なコンストラクター、IDパラメーターのない完全なコンストラクターを提供することです。
データベースに接続します
中間クラスを使用して、データベースへの接続を容易にすることができます。このクラスでは、データベースJDBC、URL、ユーザー名、パスワードなどのデータベース接続パラメーターを提供し、これらの変数を最終的なものとして定義します(プロパティまたはXML構成ファイルからこのデータを取得する方が良いでしょう)
接続オブジェクトを返したり、接続が失敗したり、ランタイムの例外をスローしたときにnullを返す方法を提供します。
public static final string url = "jdbc:mysql:// localhost:3306/testdb"; public static final string user = "testuser"; public static final string pass = "testpass";/** @return connection object* @return object*/public static connection getConnection(){drivermanager.registerdridir(); drivermanager.getConnection(url、user、pass)を返します。 } catch(sqlexception ex){throw new runtimeexception( "データベースに接続するエラー"、ex); }}また、接続をテストするためにクラスにメインメソッドを含めることもできます。完全なクラスは次のようになります:
com.mysql.jdbc.driverをインポート;インポートjava.sql.connection; Import java.sql.drivermanager; Import java.sql.sqlecception;/** * connece * @author hany.sad */public connectionfactory {public yurl = public url = 「JDBC:mysql:// localhost:3306/testdb」; public static final string user = "testuser"; public static final string pass = "testpass"; / ** *データベースへの接続を取得 * @return接続オブジェクト */ public static Connection getConnection(){try {driverManager.registerDriver(new Driver()); drivermanager.getConnection(url、user、pass)を返します。 } catch(sqlexception ex){throw new runtimeexception( "データベースに接続するエラー"、ex); }} / ** * test connection * / public static void main(string [] args){connection connection = connectionfactory.getConnection(); }}データアクセスオブジェクト
DAOレイヤーはCRUD操作を実行できます。テーブルを追加、削除、変更、確認できます。
DAOレイヤーインターフェイスは次のようになります。
public interface userdao {user getUser(); set <user> getAllusers();ユーザーgetUserbyUserNAMENDPASSWORD(); boolean insertuser(); boolean updateUser(); boolean deleteuser();}ユーザーを見つけます
ユーザーは、ID、名前、電子メールなどの一意のフィールドを照会できます。この例では、IDを使用してユーザーを見つけます。最初のステップは、コネクタクラスを介して接続を作成し、選択ステートメントを実行してID 7を使用してユーザーを取得することです。このステートメントを使用してユーザーを照会できます。
[ユーザーからid = 7]を選択します
ここで、パラメーターからIDを取得するための動的なステートメントを作成します。
このクエリを実行することにより、結果セットが取得され、ユーザーまたはnullが保存されます。次の()結果のメソッドを使用して、値があるかどうかを検出できます。 trueが返された場合、データゲッターを使用して結果からユーザーデータを取得します。すべてのデータをユーザーにカプセル化すると、返します。このIDを持つユーザーが存在しない場合、または他の例外が発生しない場合(無効なSQLステートメントなど)、このメソッドはnullを返します。
public user getUser(int id){connection connection = connectionfactory.getConnection(); try {Statement stmt = connection.createStatement(); resultet rs = stmt.executequery( "select * from user where id =" + id); if(rs.next()){user user = new user(); user.setId(rs.getint( "id")); user.setname(rs.getString( "name")); user.setPass(rs.getString( "pass")); user.setage(rs.getint( "age"));ユーザーを返します。 }} catch(sqlexception ex){ex.printstacktrace(); } nullを返します;}多くの方法でそれを呼び出すため、結果セットからデータを抽出するために個別の方法を使用する方が便利です。
この新しい方法はsqlexceptionを投げ、制限のために、それはプライベートでなければなりません:
プライベートユーザーextractuserfromResultset(resultSet rs)はsqlexception {user user = new user(); user.setId(rs.getint( "id")); user.setname(rs.getString( "name")); user.setPass(rs.getString( "pass")); user.setage(rs.getint( "age"));ユーザーを返します;}上記の方法は、新しい方法に変更する必要があります。
public user getUser(int id){connection connection = connectionfactory.getConnection(); try {Statement stmt = connection.createStatement(); resultet rs = stmt.executequery( "select * from user where id =" + id); if(rs.next()){return extractuserfromResultset(rs); }} catch(sqlexception ex){ex.printstacktrace(); } nullを返します;}ログインメソッド
ログイン操作は似ています。パラメーターリストとクエリステートメントに影響しないユーザーおよびパスワードの代替IDを提供したいと考えています。ユーザー名とパスワードが正しい場合、このメソッドは有効なユーザーを返します。それ以外の場合はnullです。多くのパラメーターがあるため、準備段階を使用する方が便利です。
パブリックユーザーgetUserByUserNAMENDPASSWORD(String User、String Pass){connector connector = new connector();接続接続= connector.getConnection(); try {preatedstatement ps = connection.preparestatement( "select * from user where user =?and pass =?"); ps.setString(1、user); ps.setString(2、pass);結果rs = ps.executequery(); if(rs.next()){return extractuserfromResultset(rs); }} catch(sqlexception ex){ex.printstacktrace(); } nullを返します;}すべてのユーザーを照会する方法
この方法はすべてのユーザーを返すため、配列のようなコンテナに返す必要があります。しかし、レコードの数がわからないからです。セットやリストなどのコレクションを使用する方が良いでしょう。
public set getallusers(){connector connector = new connector();接続接続= connector.getConnection(); try {Statement stmt = connection.createStatement(); resultet rs = stmt.executequery( "select * from user"); set users = new Hashset(); while(rs.next()){user user = extractuserfromResultset(rs); users.add(user); }ユーザーを返します。 } catch(sqlexception ex){ex.printstacktrace(); } nullを返します;}メソッドを挿入します
挿入メソッドは、ユーザーをパラメーターとして使用し、prepedStatementオブジェクトを使用してSQLアップデートステートメントを実行します。 executeUpdateメソッドは、影響を受ける行の数を返します。単一の行を追加すると、メソッドが1を返す必要があることを意味します。もしそうなら、trueを返します。そうしないと、falseを返します
public boolean insertuser(user user){connector connector = new connector();接続接続= connector.getConnection(); try {preatedstatement ps = connection.preparestatement( "ユーザー値に挿入(null、?、?、?)"); ps.setString(1、user.getName()); ps.setString(2、user.getPass()); ps.setint(3、user.getage()); int i = ps.executeupdate(); if(i == 1){return true; }} catch(sqlexception ex){ex.printstacktrace(); } falseを返します;}更新方法
更新方法は、挿入方法に似ています。唯一の変更は、SQLステートメントです
public Boolean updateUser(ユーザーユーザー){connector connector = new connector();接続接続= connector.getConnection(); try {preatedstatement ps = connection.preparestatement( "ユーザーセットname =?、pass =?、age =?where id =?"); ps.setString(1、user.getName()); ps.setString(2、user.getPass()); ps.setint(3、user.getage()); ps.setint(4、user.getid()); int i = ps.executeupdate(); if(i == 1){return true; }} catch(sqlexception ex){ex.printstacktrace(); } falseを返します;}メソッドを削除します
削除する方法は、次のような簡単なクエリを使用することです
id = 7でユーザーから削除します
IDパラメーターでクエリを送信すると、このレコードが削除されます。削除された場合、1は返されます
public boolean deleteuser(int id){connector connector = new connector();接続接続= connector.getConnection(); try {Statement stmt = connection.createStatement(); int i = stmt.executeupdate( "delete from user where id =" + id); if(i == 1){return true; }} catch(sqlexception ex){ex.printstacktrace(); } falseを返します;}読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!