我是靠谱客的博主 怡然羽毛,最近开发中收集的这篇文章主要介绍Preparestatement实现对数据库的增删改查(二)(以mysql数据库为例),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

上一篇,写了利用Preparestatemen实现对表的增删改,这次写利用preparestatement实现对表的查询操作

利用Preparestatement查询指定表中的一条记录

这里以customers表为例子进行查询
1.在JavaBean创建一个返回Customers类来封装数据

public class Customers {
private int id;
private String name;
private String email;
private Date birth;
public Customers(int id, String name, String email, Date birth) {
this.id = id;
this.name = name;
this.email = email;
this.birth = birth;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getBrith() {
return birth;
}
public void setBrith(Date date) {
this.birth = date;
}
@Override
public String toString() {
return "Customers{" +
"id=" + id +
", name='" + name + ''' +
", email='" + email + ''' +
", birth=" + birth +
'}';
}
public Customers(){
super();
}
}

2.创建一个实现查询的方法,参数为所要实现的sql语句,和填充占位符的数据。返回值为Customers类型。
queryforcustomers实现方法为:
1.获取数据库连接
2.预编译sql语句
3.利用for循环填充占位符
4.利用ps.executeQuery()导出结果集
5.获取结果集的元数据(因为查询时需要根据列名来得到列值,也需要利用for循环来找到sql语句所要查找的数据,而这些都在结果集的元数据中,而不是在结果集中,所以我们需要得到结果集的元数据)
6.利用rsdm.getColumnCount()来获取元数据中的列数
7.获取列值和列名,并利用反射将列值赋给对应的列名

public Customers queryforcustomers(String sql,Object...args){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
for(int i=0;i< args.length;i++){
ps.setObject(i+1,args[i]);
}
rs = ps.executeQuery();
/*
结果集的元数据
*/
ResultSetMetaData rsmd = rs.getMetaData();
/*
通过ResultSetMetaData来获取元数据中的列数
*/
int ColumnCount = rsmd.getColumnCount();
if(rs.next()){
Customers customers = new Customers();
for(int i=0;i<ColumnCount;i++) {
/*
获取列值
*/
Object value = rs.getObject(i + 1);
/*
获取每个列的列名
*/
String cloumnname = rsmd.getColumnName(i + 1);
/*
给customers的指定的某个属性赋值为value:通过反射
*/
Field field = Customers.class.getDeclaredField(cloumnname);
field.setAccessible(true);
field.set(customers, value);
}
return customers;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResourse(conn,ps,rs);
}
return null;
}

利用Preparement查询不同表中的记录(返回一条记录)

相比于针对特定表的查询,针对不同表的查询操作.不同的只是方法的返回类型不同,返回类型使用泛型 T,返回所要查询表所对应的类(前提是这个类已经在JavaBean中创建且完成了初始化以及构造方法)
将想要查询的表对应的类以及sql语句和填充占位符的数据传入参数.

public <T> T getInstance(Class<T> clazz,String sql,Object...args){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
for(int i=0;i< args.length;i++){
ps.setObject(i+1,args[i]);
}
rs = ps.executeQuery();
/*
结果集的元数据
*/
ResultSetMetaData rsmd = rs.getMetaData();
/*
通过ResultSetMetaData来获取元数据中的列数
*/
int ColumnCount = rsmd.getColumnCount();
if(rs.next()){
T t = clazz.newInstance();
for(int i=0;i<ColumnCount;i++) {
/*
获取列值
*/
Object value = rs.getObject(i + 1);
/*
获取每个列的列名
*/
String cloumnlabel = rsmd.getColumnLabel(i+1);
/*
给customers的指定的某个属性赋值为value:通过反射
*/
Field field = clazz.getDeclaredField(cloumnlabel);
field.setAccessible(true);
field.set(t, value);
}
return t;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils.closeResourse(conn,ps,rs);
}
return null;
}

最后

以上就是怡然羽毛为你收集整理的Preparestatement实现对数据库的增删改查(二)(以mysql数据库为例)的全部内容,希望文章能够帮你解决Preparestatement实现对数据库的增删改查(二)(以mysql数据库为例)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部