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();
}
}
- 目前就发这么多来试试后面有空再发,对于网站后台的设计我的路还长,最后还是想说,不先做好规划,直接编码,在编码途中很容易忘记自己的初衷,所以我还是下次编码之前还是得有点规划再动手。