(1)使用JDBC操作数据库(PreparedStatement)
(1)创建Dao接口
import java.util.List;
public interface Dao{
default int exeNonQuery(String sql,Object...params){return -1;};
default<T> List<T> exeQuery(Class<T> c,String sql,Object...params){return null;};
}
(2)创建JDBC类
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class Jdbc implements Dao{
private final String DRIVER = "com.mysql.jdbc.Driver";
private final String URL = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=true";
private final String USERNAME = "root";
private final String PASSWORD = "123.";
public Jdbc() throws ClassNotFoundException{
Class.forName(DRIVER);
}
private Connection getCon() throws SQLException{
return DriverManager.getConnection(URL,USERNAME,PASSWORD);
}
private PreparedStatement getPst(Connection con,String sql,Object...params)throws SQLException{
PreparedStatement pst=con.prepareStatement(sql);
if(null !=params && params.length>0){
for (int i=0;i<params.length;i++){
pst.setObject(i+1,params[i]);
}
}
return pst;
}
private void close(Connection con, PreparedStatement pst, ResultSet...rst){
if(null !=con){
try {con.close();}catch (SQLException e){e.printStackTrace();}
}
if (null !=pst){
try {pst.close();}catch (SQLException e){e.printStackTrace();}
}
if (null !=rst){
for (ResultSet r : rst){
if(null !=r){
try{r.close();}catch (SQLException e){e.printStackTrace();}
}
}
}
}
public int exeNonQuery(String sql,Object...params){
int rst=-1;
Connection con=null;
PreparedStatement pst=null;
try{
con=getCon();
pst=getPst(con,sql,params);
rst=pst.executeUpdate();
}catch (SQLException e){
e.printStackTrace();
}finally {
close(con,pst);
}
return rst;
}
public<T> List<T> exeQuery(Class<T> c,String sql,Object...params){
List<T> list=null;
Connection con=null;
PreparedStatement pst=null;
ResultSet rst=null;
try {
con=getCon();pst=getPst(con,sql,params);rst=pst.executeQuery();
if (null !=rst && rst.next()){
list=new ArrayList<T>();
Field[] fs=c.getDeclaredFields();
for (Field f:fs){f.setAccessible(true);}
do{
T t=c.newInstance();
for (Field f : fs){f.set(t,rst.getObject(f.getName()));}
list.add(t);
}while (rst.next());
}
}catch (Exception e){e.printStackTrace();}
finally {close(con,pst,rst);}
return list;
}
}