ORM编程思想:
一个数据表对应一个Java类
表中的一条记录对应Java类的一个对象
表中的一个字段对应Java类的一个属性
下面是Customer类:
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import org.junit.Test;
import com1connection.ConnectionTest;
public class Customer {
private int id;
private String name;
private String email;
private Date birth;
//有参构造器
public Customer(int id,String name,String email,Date birth){
this.id=id;
this.name=name;
this.email=email;
this.birth=birth;
}
//空参构造器
public Customer(){
super();
}
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 getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String toString() {
return "id=" + id + ", name=" + name + ", email=" + email + ", birth=" + birth;
}
}
针对customer表的通用的查询操作
package com3preparedstatement;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Date;
import org.junit.Test;
import com3preparedstatement.bean.Customer;
import com3preparedstatement.jdbc.jdbcConnection;
/*
*
*
*/
public class CustomerForQuery {
@Test
public void testQueryForCustomer(){
String sql="select id,name,email,birth from customers where id=?";
Customer cust = queryForCustomers(sql,3);
System.out.println(cust);
}
public Customer queryForCustomers(String sql,Object ...args){
//1、获取连接
Connection conn=null;
//2、实例化PreparedStatement对象
PreparedStatement ps=null;
//4、执行查询操作,返回结果集
ResultSet rs=null;
try {
conn = jdbcConnection.connection();
ps = conn.prepareStatement(sql);
//3、填充sql中的占位符
for(int i=0;i<args.length;i++){
ps.setObject(i+1, args[i]);
}
rs = ps.executeQuery();
//获取结果集的元数据:ResultSetMetaData
ResultSetMetaData rsmd=rs.getMetaData();
//通过ResultSetMetaDate获取结果集中的列数
int columnCount=rsmd.getColumnCount();
//5、处理结果集中的数据
if(rs.next()){
Customer cust=new Customer();
//处理结果集一行数据中的每一个列
for(int i=0;i<columnCount;i++){
//获取列值
Object columnValue=rs.getObject(i+1);
//获取每个列的列名
String columnName=rsmd.getColumnName(i+1);
//给cust对象指定的某个属性,赋值为cloumnValue:通过反射
Field field=Customer.class.getDeclaredField(columnName);
field.setAccessible(true);
field.set(cust,columnValue);
}
return cust;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
jdbcConnection.CloseResource(conn, ps,rs);
}
return null;
}
}