こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JDBCについて

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

public class DBtest {
public static void main(String[] args){

try {
Connection con = null;
PreparedStatement ps = null;
String url = "jdbc:mysql://localhost/address";
String user = "test";
String password = "pass";

con = DriverManager.getConnection(url, user, password);
Statement st = (Statement) con.createStatement();
Statement st2 = (Statement) con.createStatement();
String sql = "SELECT * FROM data2";

ResultSet rs = st2.executeQuery(sql);
try {
System.out.println("ok");
// ここでクエリを実行
while(rs.next()){
System.out.println(rs.getString("name")+rs.getString("age"));
}
//氏名入力
System.out.println("氏名を入力してください。");
BufferedReader na =
new BufferedReader(new InputStreamReader(System.in));
String Na = na.readLine();
String ins = "INSERT INTO data2(name,age)VALUES('?',20)";
ps = (PreparedStatement) con.prepareStatement(ins);
ps.setString(1,Na);
ps.executeUpdate();
//INSERT実行
int rs2 = st2.executeUpdate(ins);
System.out.println(rs2);
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
finally {
// 直前の try ブロックに入ったら、ここは必ず実行される
con.close();
}
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
// 接続できない時

}

}

}
現在javaでmysqlに接続してDB内の検索や追加等を行うものを作成しています。
現状は入力されたものをDBに追加することまでできましたが 検索で
入力された値がDBの中に一致する、または部分一致したものを表示させるやり方がわかりません

投稿日時 - 2014-05-16 21:18:24

QNo.8598125

すぐに回答ほしいです

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

> 検索で入力された値がDBの中に一致する、
> または部分一致したものを表示させるやり方がわかりません
ps.executeUpdate()でINSERTが出来ているし
st2.executeQuery()でSELECTが出来ているのだから、
後はそれの複合技だ。
String sql = "SELECT * FROM data2";
ResultSet rs = st2.executeQuery(sql);
のところが今条件(where句)なしで全件取ってくるようになっているので、こいつを
String sql = "SELECT * FROM data2 where name='?'"; // この辺好きに変えてね
ps2 = (PreparedStatement) con.prepareStatement(sql);
ps2.setString(1,<何らかの入力値>);
ResultSet rs2 = ps2.executeQuery();
などとする事で、実行時に条件を変えてSELECTする事ができるようになる。
ここまで出来たら後はSQL文中のイコールをlikeに変えて部分一致させるのも簡単な応用になる。
StatementとPreparedStatementの使い分けは大丈夫かな? その辺はしっかり押さえておこう。

~~~~

後、直接は関係ないけど、JDBCは特定のJDBCドライバーに依存しない
データベース接続を目的として設計されている。
実際はSQL文自体に方言があるので完璧とは言えないけどね。
なので、importするStatementとPreparedStatementは特に理由がない限り
java.sql.Statementインターフェースとjava.sql.PreparedStatementインターフェースを
使う方がいいだろう。
そうすると(前述のSQLの方言はともかく)、
String url = "jdbc:mysql://localhost/address";
String user = "test";
String password = "pass";
con = DriverManager.getConnection(url, user, password);
のところで、urlをPostgreSQL用のものにしたらそのままPostgreSQLで動くようになる。
MySQL JDBCドライバーを直接インポートしてると実行時に型が合わなくてClassCastExceptionだ。
まぁ、実務でDB操作する時は生JDBCなんて普通使わなくてS2JDBCとかHibernateとか
使う事になるのでこの辺はさらっと「ふぅんそんなもんなんだ」と思っておいてくれてもいいだろう。
実行時に与えられる条件が変わる(SQL文のwhere句も動的に作らなきゃいけない)なんてところまで来ると素直にS2DAOなどを使うべきだろう。

投稿日時 - 2014-05-17 01:26:14

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問