写点什么

JAVA JDBC

用户头像
Isuodut
关注
发布于: 2020 年 09 月 25 日



jdbc:mysql://<hostname>:<port>/<db>?key1=value1&key2=value2



static final String jdbcUrl = jdbc:mysql://localhost:3306/dbname?useSSL=false&characterEncoding=utf8;

static final String jdbcUname = root;

static final String jdbcPwd= root;



查询用executeQuery



List<Student> students = new ArrayList<>();
//加try 是为了释放链接
try( Connection conn = DriverManager.getConnection(jdbcUrl,jdbcUname,jdbcPwd)) {
try( PreparedStatement ps = conn.preparedStatement("select * from table where field=? and field2 >= ?)) {
ps.setInt(1,9);
ps.setInt(2,90);
try ( ResultSet rs = ps.executeQuery() ) {//相当于 select * from table where field = 9 and field2 >= 90;
while( rs.next()) {
students.add(extractRow(rs));
}
}
}
}
return students;
添加修改用 executeUpdate

操作成功 返回插入记录条数 1



调用getGeneratedKeys()获取一个ResultSet对象,这个对象包含了数据库自动生成的主键的值,读取该对象的每一行来获取自增主键的值。如果一次插入多条记录,那么这个ResultSet对象就会有多行返回值。如果插入时有多列自增,那么ResultSet对象的每一行都会对应多个自增值(自增列不一定必须是主键)。



try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) {
try (PreparedStatement ps = conn.prepareStatement(
"INSERT INTO students (grade, name, gender) VALUES (?,?,?)",
Statement.RETURN_GENERATED_KEYS)) {
ps.setObject(1, 1); // grade
ps.setObject(2, "Bob"); // name
ps.setObject(3, "M"); // gender
int n = ps.executeUpdate(); // 1
try (ResultSet rs = ps.getGeneratedKeys()) {
if (rs.next()) {
long id = rs.getLong(1); // 注意:索引从1开始
}
}
}
}
批量操作
try (PreparedStatement ps = conn.prepareStatement("INSERT INTO students (name, gender, grade, score) VALUES (?, ?, ?, ?)")) {
// 对同一个PreparedStatement反复设置参数并调用addBatch():
for (Student s : students) {
ps.setString(1, s.name);
ps.setBoolean(2, s.gender);
ps.setInt(3, s.grade);
ps.setInt(4, s.score);
ps.addBatch(); // 添加到batch
}
// 执行batch:
int[] ns = ps.executeBatch();
for (int n : ns) {
System.out.println(n + " inserted."); // batch中每个SQL执行的结果数量
}
}



用户头像

Isuodut

关注

小白的成长之路 2018.12.04 加入

土豆丝

评论

发布
暂无评论
JAVA JDBC