Java后端类 一

本文介绍了一个用于简化Java应用程序数据库操作的工具类设计,包括连接管理、SQL执行、结果解析和资源释放等功能,同时提供了实体类User和DAO层的具体实现。

Java语言

  • 数据库工具类,为减少代码量,方便其它service的调用,而写下的工具类。

环境:
– jdbc驱动:mysql-connector-java-5.1.7-bin.jar 点击下载 提取码:w0cm

– MySQL 8.0
– JDK 1.8

其中MySQL的东八区 时区问题已解决,解决方法如下代码:


– set global time_zone = ‘+8:00’;
– flush privileges;
– SELECT now();


工具类如下:

package com.gu_ppy.Javabean.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 工具类(数据库连接)
 * @author gu-ppy
 *
 */
public class DBconnection {
	private static final String DBdriver="com.mysql.cj.jdbc.Driver";
	private static final String DBurl="jdbc:mysql://localhost:3306/shop_online";
	private static final String DBuser="root";
	private static final String DBpassword="PQS2017214206";
	
	private Connection con=null;
	private PreparedStatement pst=null;
	private ResultSet rs=null;
	/**默认构造函数,实现数据库的连接(Connection)*/
	public DBconnection() {
		try {
			Class.forName(DBdriver);
			this.con=DriverManager.getConnection(DBurl,DBuser,DBpassword);
		} catch (Exception e) {e.printStackTrace();System.out.println("数据库连接失败!");}
	}
	public Connection getCon() {
		return con;
	}
	/**
	 * 传入sql语句及需要设置的params[]数组,最后返回一个int类型数据,
	 * 为-1表示失败,非-1代表成功且 其值为数据库记录受影响的行数
	 * @param sql
	 * @param params
	 * @return
	 */
	 public int updateData(String sql,Object[]params) {
		 int result=-1;
		 try {
			pst=con.prepareStatement(sql);
				  if(params!=null) {
					  for(int i=0;i<params.length;i++) {
						  pst.setObject(i+1, params[i]);
					  }
				  }
				  result=  pst.executeUpdate();
		} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("执行更新语句失败!");
		}
			 return result;   
}
	 /**
	  * 执行查询语句,并返回ResultSet集
	  * @param sql
	  * @param params
	  * @return ResultSet
	  */
	 public ResultSet QueryData(String sql,Object[]params) {		 
		 try {
			 pst=con.prepareStatement(sql);
			 if(params!=null) {
				  for(int i=0;i<params.length;i++) {
					  pst.setObject(i+1, params[i]); 
					 }
			  	}
			 rs=  pst.executeQuery();
			 } catch (SQLException e) {
				e.printStackTrace();
				System.out.println("执行查询语句失败!");
			 }
			 return rs; 
	}
	 /**
	  * 将result集中的数据通过List<Map<String,String>>方式返回
	  * @return List<Map<String,String>>
	  */
	 public List<Map<String, String>> getResult() {
			Map<String, String> m = null;
			ResultSetMetaData rsmd = null;
			try {
				rsmd = rs.getMetaData();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			List<Map<String, String>> list = new ArrayList<Map<String, String>>();
			try {
				while (rs.next()) {
					m = new HashMap<String, String>();
					for (int i = 1; i <= rsmd.getColumnCount(); i++) {
						m.put(rsmd.getColumnName(i), rs.getString(i));
						list.add(m);
					}
				}

			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("结果获取失败!");
			}

			return list;
		}
	public void close() {
		try {
			if(rs!=null)
				rs.close();
			if(pst!=null)
				pst.close();
			if(con!=null)
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}


  • 实体类 User,其中有用户ID,名称,密码,头像等属性
package com.gu_ppy.Javabean.vo;
/**
* 用户类
* @author gu-ppy
*
*/
public class User {
   private int ID;
   private String name;
   private String  password;
   private String sex;
   /**头像,其为保存头像的相对路径*/
   private String touxiang;
   
   public User() {}
   public User(int id,String  password) {this.ID=id;this.password=password;}
   public User(int id,String name,String  password,String touxiang) 
   	{this.ID=id;this.name=name;this.password=password; this.touxiang=touxiang;}
   public int getID() {
   	return ID;
   }
   
   public void setID(int iD) {
   	ID = iD;
   }
   public String getSex() {
   	return sex;
   }
   public void setSex(String sex) {
   	this.sex = sex;
   }
   public String getPassword() {
   	return password;
   }
   public void setPassword(String password) {
   	this.password = password;
   }
   public String getName() {
   	return name;
   }
   public void setName(String name) {
   	this.name = name;
   }
   public String getTouxiang() {
   	return touxiang;
   }
   public void setTouxiang(String touxiang) {
   	this.touxiang = touxiang;
   }
   @Override
   public String toString() {
   	return "用户编号:"+this.ID+"\n用户姓名:"+this.name+"\n用户性别:"+this.sex+"\n用户头像存放路径:"+this.touxiang;
   }

}


  • 工具类使用(Dao),User类通过调用上面的工具类来访问数据库。
package com.gu_ppy.Javabean.dao;


import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.gu_ppy.Javabean.db.DBconnection;
import com.gu_ppy.Javabean.vo.User;

/**
 * 用户操作类
 * @author gu-ppy
 *
 */
public class UserDo {
	DBconnection dbc=null;

	public UserDo() {
		dbc=new DBconnection();
	}
	/**
	 * 查询符合条件的用户并返回该User对象
	 * @param ID
	 * @param password
	 * @return 用户类(User)
	 */
	public User selectUser(int ID,String password) throws SQLException {
		String sql="select * from user where userid=? and password='?';";
		Object params[]= {ID,password};
		ResultSet  rs=dbc.QueryData(sql, params);
		User user=null;
		
		//查询符合条件的用户
		try {
			while(rs.next()) {
				user=new User(ID,password);
				user.setName(rs.getString("username"));
				user.setTouxiang(rs.getString("touxiang"));
				user.setSex(rs.getString("sex"));
			}
		} catch (SQLException e) {
			e.printStackTrace();System.out.println("用户查询出错!");
		}
		try {
			if(rs!=null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return user;
	}
	/**
	 * 通过用户名查询用户,并将查询到的用户通过List返回
	 * @param name
	 * @return List<User>
	 */
	public List<User> selectUser(String name){
		String sql="select * from user where username='?';";
		Object params[]= {name};
		List <User> list=new ArrayList<User>();
		ResultSet rs=null;
		rs=dbc.QueryData(sql, params);
		User user=null;
		
		//查询符合条件的用户
		try {
			while(rs.next()) {
				user=new User();
				user.setID(Integer.parseInt(rs.getString("userid")));
				user.setName(rs.getString("username"));
				user.setTouxiang(rs.getString("touxiang"));
				user.setSex(rs.getString("sex"));
				list.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();System.out.println("用户查询出错!");
		}
		try {
			if(rs!=null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
	/**
	 * 参数为User对象,其功能为将User写入数据库,返回true添加成功,返回false添加失败
	 * @param user
	 * @return true or false
	 */
	public int addUser(User user) {
		String sql="insert into user (username,sex,password,toxiang) "
				+ "values(?);";
		Object params[]= {user.sqlInsert()};
		return dbc.updateData(sql, params);
	}
	/**
	 * 传入用户ID与修改后的密码,修改数据库中该ID的密码,返回1成功,返回-1失败
	 * @param ID
	 * @param password
	 * @return 1 or -1
	 */
	public int modifyUser(int ID,String password) {
		String sql="update user set password='?' where userid=?;";
		Object params[]= {password,ID};
		return dbc.updateData(sql, params);
	}
	/**
	 * 输入一个User对象,在数据库中修改该对象已修改的信息,并返回1与-1
	 * @param user
	 * @return 1 or -1
	 */
	public int modifyUser(User user) {
		String sql="update user set name='?',sex='?',touxiang='?' where userid=?;";
		Object params[]= {user.getName(),user.getSex(),user.getTouxiang(),user.getID()};
		return dbc.updateData(sql, params);
	}
	/**
	 * 输入一个User的ID,在数据库中删除该对象,并返回1与-1
	 * @param ID
	 * @return  1 or -1
	 */
	public int deleteUser(int ID) {
		String sql="delete from User where userid=?;";
		Object params[]= {ID};
		return dbc.updateData(sql, params);
	}
	/**
	 * 关闭DBconnection资源,减少资源浪费
	 */
	public void close() {
		if(dbc!=null)
			dbc.close();
	}
}

  • 目前就发这么多来试试后面有空再发,对于网站后台的设计我的路还长,最后还是想说,不先做好规划,直接编码,在编码途中很容易忘记自己的初衷,所以我还是下次编码之前还是得有点规划再动手。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值