JavaでDBを作りたい

このQ&Aのポイント
  • Javaでデータベースを作成する方法について、コードを書いているが正常に動作しない。java.sql.SQLException: executeQuery メソッドを更新用に使用することはできませんというエラーメッセージが表示される。
  • 検索機能を追加する方法についてのアドバイスを求める。
  • テーブルデータを表示するためにJTableを使用しており、SQL文を実行して結果をテーブルに表示するためのコードも含まれている。
回答を見る
  • ベストアンサー

JavaでDBを作りたい

一応自分で出来る限りコードは書いたのですが、上手くいきません。 実行すると一応テーブルは表示されるのですが、更新や削除をしようとすると「java.sql.SQLException: executeQuery メソッドを更新用に使用することはできません」などというエラーが出てしまいます。 また、検索機能をつけるとすればどのようにすればいいでしょうか? (文字数の関係上import文など一部割愛しています) public class test extends BaseFrame implements MouseListener { static int KETU; private JLabel l_code, l_title, l_price; private JTextField tf_code, tf_title, tf_price; private String s_code, s_title, s_price; private JButton b_add, b_cha, b_del; private JTable tb; private JScrollPane sp; private JPanel pn; // パネル分割 private ResultSet rs = null; public static void main(String[] args) { new test("データの挿入"); } public test(String title) { super(title); Container cp = getContentPane(); // テーブル表示エリアの設定(省略)// tb = new JTable(new DefaultTableModel()); // テーブル初期は空の状態 sqlTable("select * from USERS"); // 起動と同時にテーブルを表示 } public void mouseClicked(MouseEvent evt) { Object src = evt.getSource(); s_code = tf_code.getText(); s_title = tf_title.getText(); s_price = tf_price.getText(); if (src == b_add) { sqlTable("insert into USERS values(" + (KETU + 1) + ",'" + s_title+ "'," + s_price + ")"); sqlTable("select * from USERS"); } else if (src == b_cha) { sqlTable("update USERS set title= '" + s_title + "', price= " + s_price + " WHERE code= " + s_code); sqlTable("select * from USERS"); } else if (src == b_del) { sqlTable("delete from USERS where code= " + s_code); sqlTable("select * from USERS"); } tf_code.setText(""); tf_title.setText(""); tf_price.setText(""); } public void mouseEntered(MouseEvent evt) { Object src = evt.getSource(); if (src == b_add) { tf_code.setBackground(Color.black); } else if (src == b_cha) { } else if (src == b_del) { tf_title.setBackground(Color.black); tf_price.setBackground(Color.black); } } public void mouseExited(MouseEvent evt) { Object src = evt.getSource(); if (src == b_add) { tf_code.setBackground(Color.white); } else if (src == b_cha) { } else if (src == b_del) { tf_title.setBackground(Color.white); tf_price.setBackground(Color.white); } } @Override public void mousePressed(MouseEvent evt) { } public void mouseReleased(MouseEvent evt) { } public void sqlTable(String sql) { // SQLテーブル表示用 System.out.println(sql); try { String drv = "org.apache.derby.jdbc.ClientDriver"; String url = "jdbc:derby://localhost:1527/jad2011"; Class.forName(drv); Connection cn = DriverManager.getConnection(url); Statement st = cn.createStatement(); rs = st.executeQuery(sql); //SQLの実行 ResultSet rs = st.executeQuery(sql); tb.setModel(new MyTableModel(rs)); rs.close(); st.close(); cn.close(); } catch (Exception e) { e.printStackTrace(); } } // テーブルモデルクラス class MyTableModel extends AbstractTableModel { private Vector<Object> colname; private Vector<Object> data; public MyTableModel(ResultSet rs) { try { // 列数の取得 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); colname = new Vector<Object>(cnum); // 列名の取得 for (int i = 1; i <= cnum; i++) { colname.addElement(rm.getColumnName(i)); } data = new Vector<Object>(); KETU = 0; while (rs.next()) { Vector<Object> rowdata = new Vector<Object>(); for (int i = 1; i <= cnum; i++) { rowdata.addElement(rs.getObject(i)); if (i == 1) { if (KETU < ((Integer) rs.getObject(i))) { KETU = ((Integer) rs.getObject(i)); } } } data.addElement(rowdata); } } catch (Exception e) { e.printStackTrace(); } } public int getRowCount() { return data.size(); } public int getColumnCount() { return colname.size(); } public Object getValueAt(int row, int column) { Vector rowdata = (Vector) data.elementAt(row); return rowdata.elementAt(column); } public String getColumnName(int column) { return (String) colname.elementAt(column); } }

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

DBを作りたい ではなく、DBアクセスしているだけなのね。 タイトル見てすごい人が来たと思ったわ。 executeQuery メソッドは検索にしか使えないのよ。

hukanou4
質問者

お礼

ややこしい書き方してすみません。 解答ありがとうございました。

関連するQ&A

  • javaで電卓を作りたいのですが(Swing

    こんにちは。プログラミング初心者なのでどうかご助言願います。 javaのSwing(JFRAME)で電卓を作ろうとしているのですが、一応動作はするのですが連続計算がうまくいきません たとえば66(画面表示は66)*3(画面表示は3)-(画面表示は198)8(画面表示は8)=190 という計算をさせたいのですが、途中でうまくいってないみたいで 最終的な答えが58、という答えが出てしまいます。(途中はきちんと198と表示されます) 下のメソッドのどこが間違っているかご指摘頂けるとありがたいです int val =0; int val0=0; String op = null; //数字 public void numberreturn(int i){ val=val*10+ i; resultTextField.setText((new Integer(val)).toString()); } //演算子 public void calculate(String x){ if(op==null){ if(val0!=0){ op=x; }else{ val0=val; val=0; op=x;} }else if(val==0){ op=x; }else if(val0!=0){ returning(val0,val,op); op=x; }else{ val0=val; val=0; op=x; } } //結果表示 public void ansreturn(int i){ resultTextField.setText((new Integer(i)).toString()); } //計算を行う関数 public void returning (int i,int j,String x){ if(x!=null){ int k; if(x=="plus"){ k=i+j; } else if(x=="minus"){ k=i-j; } else if(x=="mult"){ k=i*j; } else{ try{ k=i/j; }catch(Exception e){ k=0; } } i=k; ansreturn(i); j=0; x=null; }else{ j=0; x=null; } } ボタンのほうは一応こんな感じです private void minusButtonActionPerformed(java.awt.event.ActionEvent evt) { calculate("minus"); } private void equallButtonActionPerformed(java.awt.event.ActionEvent evt) { returning(val0,val,op); } よろしくお願いします

    • ベストアンサー
    • Java
  • javaの課題でjava.lang.NullPointerExcept

    javaの課題でjava.lang.NullPointerException というエラーが出て困っています いろいろ調べてやってみたのですがどうしても解決しないのでお願いします class ShoppingBag { private ShoppingBag[] Bag; private String name; private int price; private int sum; private int iLength; public ShoppingBag() { this.Bag = new ShoppingBag[20]; this.iLength = 0; } public void add(Shampoo bag) { this.Bag[iLength].price = bag.getPrice(); this.Bag[iLength].name = bag.getName(); sum += bag.getPrice(); iLength++; } public void add(Pc bag) { this.Bag[iLength].price = bag.getPrice(); this.Bag[iLength].name = bag.getName(); sum += bag.getPrice(); iLength++; } public void add(Book bag) { Bag[iLength].price = bag.getPrice(); this.Bag[iLength].name = bag.getName(); sum += bag.getPrice(); iLength++; } public int getSumPrice() { return sum; } public void printList() { for(int i = 0; i <iLength; i++){ } } } でthis.Bag[iLength].price =で代入するところでエラーが出ます

  • データ取得後、JTABLE列幅を変更できませんか

    データベースからデータを取得して(ResultSetMetaData)、Jtableに表示したのですが、列幅を項目ごとに変更したいのですが、できるのでしょうか? 項目ヘッダーはできたのですが。。。 ResultSetMetaData rm = rs.getMetaData(); int cnum = rm.getColumnCount(); colname = new ArrayList<String>(cnum); //列名の取得 String[] hder = {"月日","区分","コード","商品"}; for(int i=1; i<=cnum; i++){ colname.add(hder[i-1]); } //行の取得 data = new ArrayList<ArrayList>(); while(rs.next()){ ArrayList<String> rowdata = new ArrayList<String>(); for(int i=1; i<=cnum; i++){ if (rs.getObject(i)==null){ rowdata.add("");} else{ rowdata.add(rs.getObject(i).toString());} } data.add(rowdata); } 表示はできるのですが、各項目ごとに列幅が、しようとMaxsizeとかsetPreferredWidth などを行ってもうまくでいきません。

  • Javaのプログラムの質問です。

    Javaのプログラムについての質問です。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。  注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中に番号を振ってあります。 import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; import java.util.List; class LocalList implements List{  private int Count;  private String Data[];  private Iterator ite;  private ListIterator lite;  // コンストラクタ  void mylist(){   Data = new String[10];   Count = 0;  }  (1)  public boolean add(Object str){   if(Count >= 10){    return false;   }   Data[Count ++] = new String((String)str);   return true;  }  public void add(int i,Object str){  }        public boolean addAll(Collection c){   return false;  }        public boolean addAll(int i,Collection c){   return false;  }    (2)  public void clear(){   Count = 0;  }  public boolean contains(Object str){   return false;  }          public boolean containsAll(Collection c){   return false;  }  public boolean equals(Object str){   return false;  }    (3)  public Object get(int i){   return (i >= Count);  }  public int hashCode(){   return -1;  }  public int indexOf(Object str){   return -1;  }  public boolean isEmpty(){   return false;  }  public Iterator iterator(){   return ite;  }     public int lastIndexOf(Object str){   return -1;  }     public ListIterator listIterator(){   return lite;  }     public ListIterator listIterator(int i){   return lite;  }    (4)  public Object remove(int i){   return (i >= Count);  }    public boolean remove(Object str){   return true;  }         public boolean removeAll(Collection c){   return false;  }         public boolean retainAll(Collection c){   return false;  }    (5)  public Object set(int i,Object str){   return Data[i];  }    (6)  public int size(){   return Count;  }  public List subList(int i,int j){   return this;  }  public Object[] toArray(){   return Data;  }  public Object[] toArray(Object[] a){   return Data;  } } class Main {  public static void main(String[] args) {   mylist sub = new mylist();   sub.add("ビルドバーニングガンダム");   sub.add("ライトニングガンダム");   sub.add("ウイニングガンダム");   sub.add("ガンダムフェニーチェリナーシタ");   sub.add("R・ギャギャ");   for(int i = 0; i < sub.size(); i++){      System.out.println(sub.get(i));   }   // 改行   System.out.println();   // setメソッド   sub.set(1,"ガンダムエピオン");   for(int i = 0; i < sub.size(); i++){    System.out.println(sub.get(i));   }   // 改行   System.out.println();   // sizeメソッド   System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n");   // removeメソッド   sub.remove(1);   for(int i = 0; i < sub.size(); i++){       System.out.println(sub.get(i));   }   // clearメソッド   sub.clear();   System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです");    } } setメソッドとremoveメソッド以外は起動するのようになったのですが、この2つがうんともすんとも動きません。ジェネリクス型を使うという考え方もあるらしいのですが、ネットで調べてもピンと来ず寸詰まり状態になってしまっています。後少しだと思うのですが。。。。 どなたかご教授頂けないでしょうか?よろしくお願い致します。

  • JavaBeansにDBの値を格納

    JavaBeansにDBの値を格納したいのですがやり方がよくわかりません。 どなたかわかる方教えていただけないでしょうか? ちなみにこんなやり方でやってみました。 DAOは int i = 0; while(rs.next()){    jb.setId(i,rs.getString("syouhinid"));    i++; } JavaBeansは private String[] id = null; public void setId(int i, String val){ this.id[i] = val; } public String getId(int i){ return id[i]; } こんな感じです。 部分的ですがこんな感じです。 ソースコードを全部乗せると長くなるので、全部乗せられませんが、 いまいちJavaBeansにDBの値を格納するやり方がわからないので 皆さん色々教えてください。宜しく御願い致します。

  • javaの同期について

    javaの同期について package rwlock; public class App1 extends Thread { static private final int REFER = 0; static private final int UPDATE = 1; static private final int[] conf1 = { REFER, REFER, REFER, UPDATE }; static private final int[] conf2 = { REFER, UPDATE, REFER, REFER }; static private MyObj0 mo = new MyObj0(); // App1 + MyObj0 int id; private int[] conf; public App1(int id, int[] conf) { this.id = id; this.conf = conf; } public void run() { long tStart = Time.current(); for (int i = 0; i < conf.length; i++) { switch(conf[i]) { case REFER: mo.refer(); break; case UPDATE: mo.update(); break; default: assert false : "internal error"; } } if (id == 1) { Time.printElapsed(tStart); } } public static void main(String[] args) { App1 th1 = new App1(1, conf1); App1 th2 = new App1(2, conf2); th1.start(); th2.start(); } } public class MyObj0 { private Object countLock = new Object(); private int count; private void enter() { synchronized(countLock) { count++; } } private void leave() { synchronized(countLock) { count--; } } public MyObj0() { count = 0; } public void refer() { enter(); Time.sleep(300); leave(); } public void update() { enter(); synchronized(countLock) { assert count == 1; } Time.sleep(500); leave(); } において、updateの実行中は、他のスレッドでもupdateもreferも実行されないが、二つのスレッドで同時にreferは実行されうるという条件を満たすにはどうしたらよいでしょうか?updateにsynchronizedをつけてみましたが、referが同時に実行されてしまいました。

    • ベストアンサー
    • Java
  • javaのことで

    ---MainPanel.java--- import java.awt.Dimension; import java.awt.Graphics; import java.event.MouseEvent; import java.event.MouseListener; import javax.swing.JPanel; import java.util.Random; public class MainPanel extends JPanel implements MouseListener { public static final int WIDTH = 640; public static final int HEIGHT = 480; private static final int NUM_FILE = 4; private File[] file; private int prev; public MainPanel() { setPreferredSize(new Dimension(WIDTH, HEIGHT)); file = new File[NUM_FILE]; for (int i = 0; i < NUM_FILE; i++) { file[i] = new File(i, this); } select(); addMouseListener(this); } private void clear() { for (int i = 0; i < NUM_FILE; i++) { file[i].delete(); } } private boolean check(int a, int b) { return a == b || a == prev || b == prev; } private void select() { Random rand = new Random(); int a, b; do { a = rand.nextInt(NUM_FILE); b = rand.nextInt(NUM_FILE); } while (check(a, b)); file[a].set(0, 0); file[b].set(file[a].getX() + file[a].getWith() + File.SPACE, 0); } public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < NUM_FILE; i++) { if (file[i].isSelected()) { file[i].draw(g); } g.drawString("ファイル" + (i + 1) + " … " + file[i].getCnt(), 0, HEIGHT * 3 / 4 + i * 15); } } public void mouseClicked(MouseEvent e) { int x = e.getX(); int y = e.getY(); for (int i = 0; i < NUM_FILE; i++) { if (file[i].isSelected()) { // 表示されていて // 画像内なら if (x > file[i].getX() && x < file[i].getX() + file[i].getWidth() && y < file[i].getY() && y > file[i].getY() + file[i].getHeight()) { file[i].count(); prev = i; clear(); select(); break; } } } repaint(); } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } フレームを用意してMainPanelを付加し,pack();してください.

  • javaのプログラムについて

    以下のプログラムを実行するとエラーが起こるのですが原因はなんですか? class Tokuten { private String name; private int eng; private int math; private int sci; public void setData(String n, int e, int m, int s) { if(g>0 && g <1000){ name = n; eng = e; math = m; sci = s; } void show() { System.out.println("受験生の名前は" + name + "です。"); System.out.println("英語は" + eng + "点です。"); System.out.println("数学は" + math + "点です。"); System.out.println("理科は" + sci + "点です。"); } } class TokutenMain { public static void main(String[] args) { Tokuten jukensei = new Tokuten(); jukensei.setData("Hanako",81,67,78); jukensei.show(); } }

  • javaの初心者です。

    コンピュータとじゃんけんをするプログラムをつくりたいのですが コンパイルしたところ、次のようなエラーが出てきました。 java:8: メソッドの宣言が不正です。戻り値の型が必要です。 すいませんが、どこをどう直したらいいのかわかりません。 よろしければお教え願います。 以下がプログラムです。 import java.awt.event.*; import java.awt.*; import javax.swing.*; import java.applet.AudioClip; class Zyanken extends YJFrame implements ActionListener{ JButton bt1,bt2,bt3; JLabel lb1,lb2,lb3; YJFrame(String s, int w, int h,int b){ super(s,w,h,b); String[] ttl={"グー","チョキ","パー","Exit"}; String[] tips={"グーです","チョキです","パーです","終了します"}; int i; setUp(); Icon[] ic=new Icon[4]; for(i=0;i<4;i++) ic[i]=new ImageIcon("icon"+i+".gif"); btn=new JButton[4]; for(i=0;i<4;i++){ btn[i]=new JButton(ttl[i],ic[i]); btn[i].setToolTipText(tips[i]); btn[i].addActionListener(this); } JPanel p=new JPanel(); for(i=0;i<4;i++) p.add(btn[i]); p.setBackground(Color.pink); pane.add(p,BorderLayout.SOUTH); panel=new JPanel(); pane.add(panel,BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ int com=(int)(Math.random()*4); if(com==1){ lb2.setText("COMはグーです。"); } else if(com==2){ lb2.setText("COMはチョキです。"); } else{ lb2.setText("COMはパーです。"); } if(e.getSource()==bt1){ if(com==1){ lb3.setText("あいこです。"); } else if(com==2){ lb3.setText("あなたの勝ちです。"); } else{ lb3.setText("あなたの負けです。"); } } else if(e.getSource()==bt2){ if(com==1){ lb3.setText("あなたの負けです。"); } else if(com==2){ lb3.setText("あいこです。"); } else{ lb3.setText("あなたの勝ちです。"); } } else{ if(com==1){ lb3.setText("あなたの勝ちです。"); } else if(com==2){ lb3.setText("あなたの負けです。"); } else{ lb3.setText("あいこです。"); } } } }

  • Javaにおけるonclickメソッド

    環境としては Java 6 MySQL 5.5 Windows 7 と 8 です。 リンクをクリックしたらサーブレットやjspで処理させたページを表示させたいと思っています。 例、 ------------------------------------------------------------------------------- 映画サイト アクション ヒューマン ラブストーリー SF ドキュメンタリー DB側 作品名 ジャンル 制作年 監督名 aaaaa アクション 2012 あああ bbbbb SF 2000 いいい ccccc ラブストーリー 2009 ううう dddd アクション 1998 えええ アクションというハイパーリンクをクリックするとジャンルが アクションのデータのみ表示させる。 ------------------------------------------------------------------------------ javaとデータベース接続のコードは分かっているのですが、 クリックしたら処理したページに行くと言う部分が分かりません。 JavaScriptにあるonclickですが、Javaにあるのでしょうか? androidとは関係なくサーブレットなどでonclickを使いたいのですが、どんなコードを書けば 実現できるでしょうか? Databasebean.java(データベースに接続するBeanファイル) -------------省略---------------------------- リクエストを受け付けるサーブレット側 import mybeans.*; import javax.servlet.*; import javax.servlet.http.*; public class AAAAA extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { try{ ServletContext sc = getServletContext(); Databasebean cb = new Databasebean (); request.setAttribute("cb", cb); sc.getRequestDispatcher("/BBBB.jsp ") .forward(request, response); } catch(Exception e){ e.printStackTrace(); } } } HTMLとして表示するJSPファイル側 名前 BBBB.jsp <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="java.util.*" %> <jsp:useBean id="cb" class="mybeans. Databasebean" scope="request"/> <%! ArrayList colname; ArrayList data; %> <% colname = cb.getColname(); data = cb.getData(); %> <html> <head> <title>データベース表示</title> </head> <body> <center> <h2>Welcome</h2> <hr/> 表を表示します<br/> <br/> <table border="1"> <tr bgcolor="#E0C76F"> <% for(int column=0; column<colname.size(); column++){ %> <th> <%= (String) colname.get(column) %> </th> <% } %> </tr> <% for(int row=0; row<data.size(); row++){ %> <tr> <% ArrayList rowdata = (ArrayList) (data.get(row)); for(int column=0; column<rowdata.size(); column++){ %> <td> <%= rowdata.get(column) %> </td> <% } %> </tr> <% } %> </table> </center> </body> </html> 以上よろしくお願いします。

    • ベストアンサー
    • Java