• ベストアンサー

beansの作成方法

データベースと連携したwebアプリケーションを作っているのですが、各JAVAファイルのソース中にあるデータベースとの接続部分をbeans化しろと言われました。 String url="jdbc:postgresql://localhost/#######/"; String user="#######"; String pass="****"; Class.forName("org.postgresql.Driver"); Connection con=DriverManager.getConnection(url,user,pass); Statement stm=con.createStatement(); →String sql="delete from a_table where id='"+id+"'"; →int num=stm.executeUpdate(sql); stm.close(); con.close();  →の部分は各ファイルによって若干異なるのですが・・・いまいちbeansというものをよく理解しておらず、単純に上の6行だけ別ファイルで作ってインポートしてもうまくいきません。コンパイルでシンボルを解決できませんと言われてしまいます。もちろん、直接各ファイル内に上の構文を書けば動くのですが・・・。  この場合、beansってどういう風に書けば、また読み込ませればいいんでしょうか?

  • rusya
  • お礼率56% (167/295)
  • Java
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • nice21cy
  • ベストアンサー率100% (1/1)
回答No.2

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectionManager { Connection getConnect() { String url = "jdbc:postgresql://localhost/#######/"; String user = "#######"; String pass = "****"; try { Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection(url, user, pass); return con; } catch (Exception e) {} return null; } } // ------------------------------------------------ import java.sql.Statement; import java.sql.Connection; class UseCon { void execut() { String id = "aaa"; String sql = "delete from a_table where id='" + id + "'"; Connection con = null; Statement stm = null; try { con = (new ConnectionManager()).getConnect(); stm = con.createStatement(); int num = stm.executeUpdate(sql); } catch (Exception e) { e.printStackTrace(); } finally { try { if (stm != null) { stm.close(); } if (con != null) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } すみませんが、 こんな風にしたらどうですか?

rusya
質問者

お礼

遅くなりましたが、回答ありがとうございます。 どうにか形になりました。

その他の回答 (2)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

私もJavaBeansってよくわからないんですよね~(いいのか>自分) JSPで使わないってことは、単なる部品化・共通化しろってことだと思うんで、こんなんでいいんじゃないかな と思います。 本当は、Serializableをインプリメントして、SerialVersionUIDを持たないと駄目みたいです。(Eclipseさんは警告してきます) あ、もちろん、ちゃんとエラー処理は入れてください。 public class DBAccessBean{   private final String default_url = "jdbc:postgresql://localhost/#######/";   private final String default_user = "#######";   private final String default_pass = "****";   private String url = null;   private String user = null;   private String pass = null;   private Connection con = null;   private Statement stm = null;   public DBAccessBean(){    this.url = this.default_url;    this.user = this.default_user;    this.pass = this.default_pass;   }   public DBAccessBean(String url, String user, String pass){    this.url = url;    this.user = user;    this.pass = pass;   }   public Connection getConnection(){    Class.forName("org.postgresql.Driver");    Connection con=DriverManager.getConnection(url,user,pass);    this.con = con;    return con;   }   public Statement createStatement(){    Statement stm=this.con.createStatement();   }   →の処理の数だけ用意する   public int delObject(String id){    String sql="delete from a_table where id='"+id+"'";    int num=this.stm.executeUpdate(sql);    return num;   }   public void closeConnection(){    this.con.close();   }   public void closeStatement(){    this.stm.close();   } }

rusya
質問者

お礼

遅くなりましたが、回答ありがとうございます。 もう少しbeansを勉強しようと思います(苦笑)

noname#49428
noname#49428
回答No.1

言われたその方に聞くことはできないのですか? ファイルでインポートということは、JSPでしょうか? JavaBeansとは、以下の条件を満たすもののことです。 1. public 宣言されているクラスであること。 2. デフォルトコンストラクタ(引数を持たないコンストラクタ)があること。 3. java.io.Serializable インタフェースを implements していること。 一般的には、ValueObjectとして使うのですが、おそらくその方は、部品化しろということなのでしょう。 実行するSQLだけが違うのであれば、Templateパターンを使うのが一番楽じゃないでしょうか。

参考URL:
http://www.javafaq.jp/S132.html
rusya
質問者

お礼

回答ありがとうございます。 beansをインポートしているのはJSPでなく、サーブレットです。部品化しろというのはたぶんその通りだと思うのですが、beansはずいぶん前に一回だけ触ったきりなので、記述方法も含めほとんど分からない状態です・・・。

関連するQ&A

  • JAVA+MySQLのテーブルロックについて

    Java + MySQL5(MyISAM)でテーブルをロックする処理をかけようと 試みているのですが、上手くロックが掛からずにエラーになります。 テーブル「AAA」と「BBB」にロック処理を行おうと思います。 Connection con = null; Statement ps = null; String sql = null; Class.forName("com.mysql.jdbc.Driver"); con = (Connection) DriverManager.getConnection(url, user, pass); ps = con.createStatement(); sql = "LOCK TABLES AAA WRITE,BBB WRITE"; int a = ps.executeUpdate(sql); sql = "UPDATE AAA SET ~省略~"; a = ps.executeUpdate(sql); sql = "INSERT INTO BBB SET ~省略~"; a = ps.executeUpdate(sql); sql = "UNLOCKS TABLES"; a = ps.executeUpdate(sql); 上記の記述でどこに誤りがあるのでしょうか? お知恵を拝借できないでしょうか。 宜しくお願い致します。

  • JDBC PostgreSQLで必要なファイルはあるのでしょうか?

    LinuxでPostgreSQLのデータベースをJDBCでアクセスしたいのですが、以下のソースで次のエラーが発生します。何か必要なファイルでもあるのでしょうか? java.lang.ClassNotFoundException:org.postgres.Driver また、LinuxのODBCも必要なファイルがあるのでしょうか? import java.sql.*; class jdbcSample2 { public static void main(String argv[]) { int a; String b; try { //Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver"); //String url = "jdbc:odbc:test"; Class.forName ("org.postgres.Driver"); String url = "jdbc:postgresql://127.0.0.1:5432/test"; String user = ""; String password = ""; Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement (); String query = "select * from member;"; ResultSet rs = stmt.executeQuery (query); while(rs.next()){ a = rs.getInt(1); b = rs.getString(2); System.out.println(a + ", " + b); } rs.close(); stmt.close(); con.close(); } catch (SQLException ex) { System.err.println("SQL failed."); ex.printStackTrace (); } catch (Exception ex) { ex.printStackTrace (); } } }

  • JavaサーブレットからSQL Server の接続ができません。

    環境は、 OS:win XP Webサーバ:tomcat5.5 統合開発環境:eclipse3.2 DB:SQL server 2005 です。 SQLserverのJDBCドライバ(sqljdbc.jsp)を、%CATALINA_HOME%common/libに配置し、DB接続用のサーブレットを作成、デバッグを行いましたが、 com.microsoft.sqlserver.jdbc.SQLServerException: TDS ログイン前応答が不完全です。対象サーバーは SQL Server 2000 以降である必要があります。 とのエラーが表示され接続できませんでした。 またデバッグを行ったところ、 Class.forName(driver); までは通りますが、次の行の con = DriverManager.getConnection(url,user,passwd); でエラーになるようです。次のステップは、データベース切断の public synchronized void close() throws Exception { 行に飛んでしまいます。 どなたかお気づきの方がおられればご回答願います。 ソースは以下の通りです。 //////////////////////////////////////////// package report.pack; import java.sql.*; public class DatabaseAccess { private String driver; private String url; private String user; private String passwd; private Connection con; private Statement stmt; private ResultSet rs; /** * コンストラクタ */ public DatabaseAccess() { driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; url = "jdbc:sqlserver://localhost:8080;databaseName=testdb;"; user = ""; passwd = ""; } /** * データベースに接続 */ public synchronized void open() throws Exception { // ドライバクラスをロード Class.forName(driver); // データベースへ接続 con = DriverManager.getConnection(url,user,passwd); // ステートメントオブジェクトを生成 stmt = con.createStatement(); } /** * データベースから切断 */ public synchronized void close() throws Exception { if (stmt!=null) { stmt.close(); } if (con!=null) { con.close(); } } /** * クエリーを実行(検索) */ public ResultSet executeQuery(String sql) throws Exception { return stmt.executeQuery(sql); } /** * クエリーを実行(新規、更新、削除) */ public int executeUpdate(String sql) throws Exception { return stmt.executeUpdate(sql); } } //////////////////////////////////////

  • Javaでデータベースの内容をGUIで表示したい

    お世話になります。 SQL文で発行された内容をJListでリスト化して表示したいです。 コマンドライン上で内容を表示することは出来ていますが、上手くGUIで表示できません。 簡単に言えば、以下の2つのプログラムを組み合わせたいです。宜しくお願い致します。 // JListプログラム // import java.awt.*; import javax.swing.*; import javax.swing.event.*; class JListTest extends JFrame implements ListSelectionListener { JListTest() { getContentPane().setLayout(new FlowLayout()); String[] data = { "ListA", "ListB", "ListC", "ListD" }; JList lst = new JList(data); lst.addListSelectionListener(this); getContentPane().add(lst); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("JListTest"); setSize(200, 120); setVisible(true); } public void valueChanged(ListSelectionEvent e) { JList lst = (JList)e.getSource(); System.out.println(lst.getSelectedValue()); } public static void main(String[] args) { new JListTest(); } } // SQLプログラム // import java.sql.*; class DbTest { public static void main(String[] args) { int id; String name; try { // JDBCドライバの登録 String driver = "org.postgresql.Driver"; // データベースの指定 String server = "192.168.1.0"; // PostgreSQL サーバ ( IP または ホスト名 ) String dbname = "test"; // データベース名 String url = "jdbc:postgresql://" + server + "/" + dbname; String user = "test"; //データベース作成ユーザ名 String password = "xxxxxxxxxx"; //データベース作成ユーザパスワード Class.forName (driver); // データベースとの接続 Connection con = DriverManager.getConnection(url, user, password); // テーブル照会実行 Statement stmt = con.createStatement (); String sql = "SELECT * FROM test"; ResultSet rs = stmt.executeQuery (sql); // テーブル照会結果を出力 while(rs.next()){ id = rs.getInt("num"); name = rs.getString("name"); System.out.println(id); System.out.println(name); } // データベースのクローズ rs.close(); stmt.close(); con.close(); } catch (SQLException e) { System.err.println("SQL failed."); e.printStackTrace (); } catch (ClassNotFoundException ex) { ex.printStackTrace (); } } }

  • Java PostgreSQL スクリプトレット

    スクリプトレットを使用し、ログイン画面を作成しようと考えています。 <%@ page import="java.io.*,javax.servlet.*,javax.servlet.http.*,java.net.*,java.sql.*" %> <% request.setCharacterEncoding("Shift_JIS"); String id = (String)request.getParameter("id"); String pass = (String)request.getParameter("pass"); String drv = "org.postgresql.Driver"; String dsn = "jdbc:postgresql://localhost:5432/?user=postgres&password=aipo"; String sql = "SELECT * FROM TURBINE_USER"; Connection cn = DriverManager.getConnection(dsn); Statement st = cn.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()) { out.println("<P>" + rs.getString(1) + "</P>"); } rs.close(); st.close(); cn.close(); %> 上記を実行すると org.apache.jasper.JasperException: Exception in JSP: /get.jsp:18 となり、 ResultSet rs = st.executeQuery(sql); の時点でエラーとなります。 Statement st = cn.createStatement(); まで正常に動作するのは確認済みです。 類似する質問に http://oshiete1.goo.ne.jp/qa3522131.html がありましたが、解決できませんでした。 どこが間違っていますでしょうか。

  • データベースへ接続してからのデータ追加方法

    掲示板を作成しているのですが、DAOクラスの使いかたがいまいちわかりません。 public ArrayList<textbeen> findAll(){ //スレッド一覧を保持するリスト ArrayList<textbeen> list = new ArrayList<textbeen>(); Connection con = null; try{ //データベースに接続 con = createConnection(); //データベースにSQL文を送信 String sql = "select * from TEXT"; Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String name = rs.getString("KB_NAME"); String title = rs.getString("KB_TITLE"); String mail = rs.getString("KB_MAIL"); String text = rs.getString("KB_TEXT"); String pass = rs.getString("KB_TITLE_PASS"); textbeen thread = new textbeen(name, title, mail, text, pass); //TO(Threadオブジェクト)を、保持するリストに追加 list.add(thread); } //スレッド一覧を返す。 return list; }catch(Exception e){ e.printStackTrace(); return null; }finally{ //データベースからの切断 closeConnection(con); } } public void create(textbeen emp){ Connection con = null; try{ //データベースに接続 con = createConnection(); //データベースにSQL文を送信 String sql = "insert into TEXT values(?, ?, ?, ? ,?)"; PreparedStatement stmt = con.prepareStatement(sql); stmt.setString(1, emp.getName()); stmt.setString(2, emp.getTitle()); stmt.setString(3, emp.getMail()); stmt.setString(4, emp.getText()); stmt.setString(5, emp.getPassword()); stmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ //データベースからの切断 closeConnection(con); } } 以上のようにTextDAOクラスを作り、MVCモデルに従ってサーブレットからJSPにて追加用のページを表示したいのですが、どうすればDAOクラスのメソッドを使えるのかがわかりません。DAOクラスは入門書に書いてあったのを名前だけ変えたりして使っております。 すでにtextbeen.javaファイルにてsetName()やgetName()などは定義しております。 宜しく御願い致します。

    • ベストアンサー
    • Java
  • JDBCで配列を使ったSQL文(INSERT)

    早速ですがお願いします。例えば下のプログラムでのSQL文なのですが、配列str1[0]の中身”みかん”をINSERTしたいのですが、やりかたがわかりません。プログラミングの素人なので簡単な質問で申し訳ないですけど、どなたか教えてくれないでしょうか? ちなみにこのプログラムでstr1[0]のところを直接みかんと入れたらデータベースに追加することはできました。 import java.sql.*; class jdbc{ public static void main(String args[]){ String[] str1 = new String[1]; str1[0] = "みかん"; try{ Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql:test"; String user = ""; String password = ""; System.out.println("URL :" + url); System.out.println("USER :" + user); System.out.println("PASSWORD :" + password); Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); int insertCount = stmt.executeUpdate("INSERT INTO shinamono (hinmei,nedan) VALUES ('+str1[0]+', 1500)"); if (insertCount >0){ System.out.println("追加しました"); }else{ System.out.println("追加できませんでした"); } conn.commit(); stmt.close(); conn.close(); }catch(SQLException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } } なおエラーメッセージは次の通りです。 java.sql.SQLException: ERROR: column "みかん" does not exist at org.postgresql.Connection.ExecSQL(Connection.java:533) at org.postgresql.jdbc2.Statement.execute(Statement.java:294) at org.postgresql.jdbc2.Statement.executeUpdate(Statement.java:78) at jdbc.main(jdbc.java:21)

  • データ数をカウントしたいのですが

    JAVAのJDBCを使いMySqlを操作しデータ数を取得するプログラムです。自分なりに考えたプログラムは Connection con = null; String sql = "select count(*) from テーブル名"; // コネクションを作成する。 con = DriverManager.getConnection(url, user, pass); Statement st = con.createStatement(); // SQLを実行する。 ResultSet rs = st.executeQuery(sql); String count = rs.getString("count(*)"); 実行した結果上手く出来ないのですが、この部分での間違いはありますか?

    • ベストアンサー
    • Java
  • ラジオボタンを使って更新 eclipse Tomcat mysql

    ラジオボタンを使って更新するときにデータがnullになってしまう。 更新するときデータが表示状態でデータを買えて更新したい kousin1.java import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class kousin1 extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); } public void doPost PrintWriter out = response.getWriter(); String url = "jdbc:mysql://localhost:3306/aiue"; String user = "root"; //ユーザ名 String pass =""; //パスワード String id1 =""; String name1=""; String address1=""; Connection con = null; //データベースへの接続を行なう Statement smt = null; //SQL実行の仲介者 int syutoku = 0; ResultSet rs = null; String id = request.getParameter("id"); String name = request.getParameter("name"); String address = request.getParameter("address"); String radio = request.getParameter("radio"); try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); con = DriverManager.getConnection(url,user,pass); smt = con.createStatement(); System.out.println("更新"); String sql1 = "UPDATE System.out.println(sql1); smt.executeUpdate(sql1); smt.close(); }catch(SQLException e){ throw new ServletException(e); }catch(Exception e){ e.printStackTrace(); }finally{ if(smt != null){ try{smt.close();}catch(SQLException ignore){} } if(con != null){ try{con.close();}catch(SQLException ignore){} } kousin1.jspへ kousin.jsp <html> <head> </head> <form method="POST" action="kousin1"> <body> <div>コード:<input type="text" name="id" value="<%=request.getAttribute("id")%>" size=40></div> <div>名称:<input type="text" name="name" value="<%=request.getAttribute("name")%>" size=42></div> <div>住所:<input type="text" name="address" value="<%=request.getAttribute("address")%>" size=42></div> <div><input type="hidden" name="syutoku" value="<%=request.getAttribute("syutoku")%>" size=40></div> <input type="submit" value="更新"> </form> </body> </html>

  • 『ClassNotFoundException: org.postgresql.Driver』というエラーが出る。

    CygwinにpostgreSQLをインストールして、JSPでデータベースを操作しようと考えています。 /usr/share/postgresql/java/postgresql.jarをCLASSPATHに追加し、以下に示すJSPを作成して実行したのですが、『java.lang.ClassNotFoundException: org.postgresql.Driver 』というエラーが出てデータベースにアクセスできません。 『$jar -xvf /usr/share/postgresql/java/postgresql.jar』を実行したところ、『org/postgresql/Driver.class』が抽出されましたので、ドライバクラスは間違ってはいないと思います。一体何が悪いのでしょうか。 <%@ page language="java" %> <%@ page contentType="text/html; charset=EUC_JP" %> <%@ page import="java.sql.*" %> <% Connection con = null; Statement stmt = null; try { Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql:(データベース名)"; con = DriverManager.getConnection(url, "(ユーザー名)", "(パスワード)"); stmt = con.createStatement(); (途中の処理) } catch(Exception e) { out.println(e); } finally { (データベースの切断処理) } postgreSQLはまだ始めたばかりですので初心者同然です。なるべく分かりやすく説明してくれると嬉しいです。 OSはWindowsXP, JSPコンテナはTomcat3.3.1を使用しています。どうぞよろしくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう