代码地址:https://gitee.com/jkangle/test.git
具体的思路
- 将所有要实现的功能全部封装在一个工具类里面
- 建一个需要查询的对象的类
- 建一个适配器的接口,用来负责把Resultset对象转化为所需
工具类代码
package com.kfm;
import java.sql.*;
import java.util.List;
public class DButils <T>{
private String url = "jdbc:mysql://localhost:3306/h";
private String user = "root";
private String pass = "";
private Connection connection = null;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public DButils(){}
public DButils(String url,String user,String pass){
this.url = url;
this.user = user;
this.pass = pass;
}
public Connection getConnection() throws ClassNotFoundException, SQLException {
if(connection == null || connection.isClosed()){
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection(url,user,pass);
}
return connection;
}
public List<T> executeQuery(String sql, Recover<T> recover, Object... values) throws SQLException, ClassNotFoundException {
getConnection();
PreparedStatement statement = connection.prepareStatement(sql);
setObject(statement,values);
return recover.recover(statement.executeQuery());
}
public void close() throws SQLException {
if(connection !=null && !connection.isClosed()){
connection.close();
connection = null;
}
}
private void setObject(PreparedStatement Statement,Object... values) throws SQLException {
if(values==null){
return;
}
for (int i = 0; i < values.length; i++) {
Statement.setObject(i+1,values[i]);
}
}
}
适配器接口
package com.kfm;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
* @author jkk
*/
public interface Recover <T>{
public List<T> recover(ResultSet resultSet) throws SQLException;
}
查询对象
package model;
import com.kfm.Recover;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @author jkk
*/
public class Goods {
private String goodno;
private String goodsname;
private double cost;
private double price;
private int count;
private int catagory;
public String getGoodno() {
return goodno;
}
public void setGoodno(String goodno) {
this.goodno = goodno;
}
public String getGoodsname() {
return goodsname;
}
public void setGoodsname(String goodsname) {
this.goodsname = goodsname;
}
public double getCost() {
return cost;
}
public void setCost(double cost) {
this.cost = cost;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getCatagory() {
return catagory;
}
public void setCatagory(int catagory) {
this.catagory = catagory;
}
@Override
public String toString() {
return "Goods{" +
"goodno='" + goodno + '\'' +
", goodsname='" + goodsname + '\'' +
", cost=" + cost +
", price=" + price +
", count=" + count +
", catagory=" + catagory +
'}';
}
public static class GoodsRecover implements Recover<Goods>{
@Override
public List<Goods> recover(ResultSet resultSet) throws SQLException{
List<Goods> goodsList = new ArrayList<>();
while (resultSet.next()){
Goods goods = new Goods();
goods.setGoodno(resultSet.getString("goodno"));
goods.setGoodsname(resultSet.getString("goodsname"));
goods.setCost(resultSet.getDouble("cost"));
goods.setPrice(resultSet.getDouble("price"));
goods.setCount(resultSet.getInt("count"));
goods.setCatagory(resultSet.getInt("catagory"));
goodsList.add(goods);
}
return goodsList;
}
}
}
【注意】上面的代码中实现了适配器的Recover接口
测试代码
package com.kfm;
import model.Goods;
import java.sql.SQLException;
import java.util.List;
/**
* @author jkk
*/
public class Test {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
DButils<Goods> dButils = new DButils<>();
dButils.getConnection();
String sql = "Select * from goods";
List<Goods> goodsList = dButils.executeQuery(sql, new Goods.GoodsRecover());
for (Goods good :
goodsList) {
System.out.println(good);
}
}
}