JAVA的JDBC封装,简单实现增删查改

JDBC极简封装,三行代码实现操作

使用JDBC完成数据库的操作需要写很多的重复代码,写起来也很麻烦。
于是我将新增、删除、修改、查询的代码都封装了起来,包过了变量类型处理也直接进行了封装。
在使用时只需三四行代码就能完成一个操作。

1.封装配置及加载

public  class JdbcPz {
	private static String url="";
	private static String username="";
	private static String password="";
	//加载
	static{
		System.out.println("-------JDBC_XT_1.0------\n");
		System.out.println("》》》 开始加载配置……");
		//配置存放在Properties中
		Properties pro = new Properties();
		try {
		    //读取配置
			pro.load(new FileReader(new File("src\\jdbc.properties")));
			url=pro.getProperty("url");
			username=pro.getProperty("username");
			password=pro.getProperty("password");
			String driver = pro.getProperty("driver");
			System.out.println("》》》 配置加载完成!");
			//加载驱动
			Class.forName(driver);
			System.out.println("》》》 驱动加载完成!\n");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {  
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//连接数据库
	public static Connection getConnection() throws SQLException{
		System.out.println("✔  数据库已连接!(ノ ̄▽ ̄)\n");
		return DriverManager.getConnection(url, username, password);
	}
    //关闭连接
	public void close(Connection conn,PreparedStatement ps,ResultSet rs){
		try {
			if (conn != null) {
				conn.close();
			}
			if(ps !=null){
				ps.close();
			}
			if(rs!=null){
				rs.close();
			}
			System.out.println("* 所有连接已关闭  !");
		} catch (SQLException e) { 
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

封装SQL操作

初始化:使用时调用LoadJdbc()即刻完成连接数据库的初始化

//实例JdbcPz 
public static JdbcPz jdb = new JdbcPz();
//需用到的变量
private static Connection conn=null;
private static PreparedStatement ps=null;
private static ResultSet rs=null;
public static String SQLsen=null;
//参数数组,SQL语句的参数直接放入ArrayList
public static ArrayList<Object> parameter = new ArrayList<>();
//初始化
public static void LoadJdbc(){
	try {
	   //调用配置JdbcPz 中的连接方法完成初始化
		conn=JdbcPz.getConnection();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

新增、删除、修改、删除
下面的方法封装了简单新增、删除、修改、删除的操作,使用时只需传入SQL语句及参数就能返回结果,参数类型的也能通过判断直接在封装中处理。

//afferentSQL() 接收出传入的SQL语句
public static void  afferentSQL(String Sqlsentence){
	try {
		SQLsen = Sqlsentence;
		ps = conn.prepareStatement(Sqlsentence,Statement.RETURN_GENERATED_KEYS);
	} catch (SQLException e) {
		e.printStackTrace();
	}
}

/**
* //增、修、删 一条数据并返回影响条数
* @Sqlsentence SQL语句
* @author JDBC_XT by 丘秋
*/
//变量赋值返回影响条数
public static int UpdatemoveXT(){
	int a = 0;
	try {
	    //遍历变量
		for(int i=0;i<parameter.size();i++){
		    //下标从0开始,要加个1
			int o = i + 1;
			//取出变量元素
			Object param = parameter.get(i);
			//判断变量的类型并完成赋值 (只写三种,可以继续处理更多类型)
			if (param instanceof Integer) { 
				ps.setInt(o,(int)param);
			} else if (param instanceof Double) {
				ps.setDouble(o,(double)param);
			} else if (param instanceof String) {
				ps.setString(o,(String)param);
			}
		}
		//执行SQL,完成操作
		a = ps.executeUpdate();
		System.out.println("✔ 操作 "+ a +" 条数据成功 !");
	} catch (SQLException e) {
		e.printStackTrace();
	}finally{
	     //关闭流
		closeXT();
	}
	//返回影响条数
	return a;
}

/**
* 查询数据
 */
public static List<Object> SelectXT(){
    //要返回的List数组
	List<Object> users = new ArrayList<Object>();
	try {
	    //处理变量
		for(int i=0;i<parameter.size();i++){
			int o = i + 1;
			Object param = parameter.get(i);
			if (param instanceof Integer) { 
				ps.setInt(o,(int)param);
			} else if (param instanceof Double) {
				ps.setDouble(o,(double)param);
			} else if (param instanceof String) {
				ps.setString(o,(String)param);
			}
		}
		//执行SQL
		rs=ps.executeQuery();
		int ts= 0;
		//获取数据库表的属性
		ResultSetMetaData rsmd = rs.getMetaData(); 
		//遍历返回结果并存入List
		while (rs.next()) { 
			ts++;
			//使用Map集合保存每条数据
			Map<String, Object> rowData = new HashMap<String, Object>();
			//遍历当前条的每一列
			for(int l=1;l<=rsmd.getColumnCount();l++){
				rowData.put(rsmd.getColumnName(l),rs.getObject(l));
			}
			//追加到List中
			users.add(rowData);
		}
		System.out.println("✔ 查询数据成功,共返回"+ts+" 条数据 !");
	} catch (SQLException e) {
		e.printStackTrace();
	}finally{
	    //关闭
		closeXT();
	}
	//返回数据
	return users;
}

//关闭
private static void closeXT(){
	parameter.clear();
	try {
		if(ps!=null){
			ps.close();
		}
		if(rs!=null){
			rs.close();
		}
		ps=null;rs=null;
	} catch (SQLException e) {
		e.printStackTrace();
	}	
}

使用Demo

//需先继承封装的操作类
public class demoxt extends Xt_Operate{
  //初始化,直接完成JDBC的配置与数据库连接
  LoadJdbc();
  
  //新增一条数据并返回影响条数
  //使用afferentSQL() 传入SQL语句
  afferentSQL("insert into user(name,password) values(?,?)"); 
  // parameter.add() 按顺序传入变量,**数据类型不需要管**
  parameter.add(0,"sss");
  parameter.add(1,888);
  //UpdatemoveXT()执行并返回影响条数
  int a = UpdatemoveXT(); 
  
  //修改一条数据并返回影响条数
  afferentSQL("update user set name=?,password=? where id=?"); 
  parameter.add(0,"jxt"); 
  parameter.add(1,"123456");    
  parameter.add(2,b);
  int c = UpdatemoveXT();
  
  //删除一条数据并返回影响条数
  afferentSQL("delete from user where id=?"); 
  parameter.add(0,b);
  int d = UpdatemoveXT();
  
  //查询数据并返回查询结果
  afferentSQL("SELECT * from user"); 
  //SelectXT()使用list接收返回结果
  List<Object> usersa = SelectXT();
  
  //数据读取示例
  //获取第一条数据
  Map<String, Object> rowData = (Map<String, Object>)usersa.get(0);
  //获取第一条数据的name字段
  rowData.get("name");
  
  System.out.println("第1条数据的name字段:"+rowData.get("name"));
}

JAVA的JDBC封装,简单实现增删查改