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);
}
}
お礼
どうもありがとうございます。 ブレーキなんてポジションがあるんですか!初めてです。一昔前は2とかスノーモードとかありましたがエンジンブレーキ専用のポジションが・・・。 やはりゲート裏のトリムをはずすんですね。蓋になっていないのが面白いというか不便というか。内張り外しを使わなきゃならないなあ。 リアスピーカーと一緒にやってみようと思います。