获赞
1.6W
粉丝
5877
关注
82
看过 TA
4171
哈尔滨理工大学
2025
前端工程师
IP属地:北京
帮助大家求职
私信
关注
2016-12-08 17:25
已编辑
牛客运营
上周我们进行了酷炫的优惠码生成:       叶神给大家的建议:   从产品角度看激活码,一般需要涉及到   1. 要随机,不能简单,否则容易被人爆破   2. 不要有混淆的字母,比如数字零0和字母欧,爱(I)和小写的L,2和Z等等,否则输入容易出错    ps:因为上周有牛友问我们这个有没有要求,我说的是无限发挥,但是后来想了想确实不能这样,我们做项目或者写代码也好,终究是要做成产品的,还是要有需求的,没有需求的程序员跟咸鱼有什么区别~~~~      于是我们以后会更贴近生活和产品,所以大家也尽量优化自己的代码哦,养成这种把这些需求都考虑进去的习惯~#人人都是产品经理#      我们在使...
Matrix42:今天做了一下午才做完 用到了JDBC和反射,虽然以前学过,但是没真正用过所以做的挺费劲 首先是表设计: id为用户id promo_code为优惠码 value为面值(可以是具体价值或折扣) condition为使用条件 expire_data为优惠码过期时间 思路:把优惠码信息封装成一个javaBean,然后读取和写入都用bean对象,字段和赋值都是用反射完成的 下面是代码: package nowcoder; import java.lang.reflect.Field; import java.lang.reflect.Method; 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.List; /** * 用来连接数据库,查询以及执行SQL语句 * @author Matrix42 * */ public class JDBCConnector { private Connection conn; private String JDBCUrl; private String driverUrl; public JDBCConnector(String JDBCUrl,String driverUrl,String username,String password) { this.JDBCUrl = JDBCUrl; this.driverUrl = driverUrl; conn = getConnection(JDBCUrl,driverUrl,username,password); } /** * 与数据库建立连接 * @param JDBCUrl * @param driverUrl * @param username * @param password * @return */ private Connection getConnection(String JDBCUrl,String driverUrl,String username,String password){ try { //加载驱动 Class.forName(JDBCUrl); } catch (ClassNotFoundException e) { System.out.println("驱动加载失败!"); e.printStackTrace(); } Connection connection = null; try { //建立连接 connection = DriverManager.getConnection(driverUrl,username,password); } catch (SQLException e) { System.out.println("建立连接失败!"); e.printStackTrace(); } return connection; } /** * 插入一条数据 * @param object * @param table * @return */ public int insert(Object object,String table){ int rows = 0; String sql = "insert into "+table + " values" +getValue(object); System.out.println(sql); PreparedStatement statement = null; try { statement = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } try { rows = statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return rows; } /** * 所有结果封装到List里 * @param primaryKey * @param table * @return */ public List queryAll(Class<?> clazz,String table){ List<Object> resultList = new ArrayList<Object>(); PreparedStatement statement = null; String sql = "select * from "+table; try { statement = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } ResultSet resultSet = null; try { resultSet = statement.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } ResultSetMetaData metaData = null; int colCount = 0; try { metaData = resultSet.getMetaData(); colCount = metaData.getColumnCount(); } catch (SQLException e1) { e1.printStackTrace(); } //获取字段的个数 Field[] fields = clazz.getDeclaredFields(); try{ while (resultSet.next()) { //构造实例 Object object = clazz.newInstance(); for(int i=1;i<=colCount;i++){ //获取单个结果 Object value = resultSet.getObject(i); //遍历字段,如果相同则赋值 for(int j=0;j<fields.length;j++){ Field f = fields[j]; if(f.getName().equalsIgnoreCase(metaData.getColumnName(i))){ f.setAccessible(true); f.set(object, value); } } } //存入list resultList.add(object); } }catch(Exception e){ e.printStackTrace(); } return resultList; } /** * 获取列 * @param object * @return */ public static String getColomns(Object object){ String colomns = "("; Class<?> clazz = object.getClass(); Field[] fields = clazz.getDeclaredFields(); for(int i=0;i<fields.length;i++){ if(i<fields.length-1){ colomns+=fields[i].getName()+","; }else { colomns+=fields[i].getName(); } } colomns+=") "; return colomns; } /** * 获取值 * @param object * @return */ public static String getValue(Object object){ String colomns = "("; Class<?> clazz = object.getClass(); Field[] fields = clazz.getDeclaredFields(); try { for(int i=0;i<fields.length;i++){ fields[i].setAccessible(true); if(i<fields.length-1){ colomns+="'"+fields[i].get(object)+"'"+","; }else { colomns+="'"+fields[i].get(object)+"'"; } } } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } colomns+=")"; return colomns; } /** * 获取方法 * @param clazz * @return */ public static Method[] getSetFunc(Class<?> clazz){ Method[] methods = clazz.getDeclaredMethods(); for(int i=0;i<methods.length;i++){ methods[i].setAccessible(true); } return methods; } } javaBean package nowcoder; import java.sql.Timestamp; public class CodeBean { private int id; private String promo_code; private double value; private double condition; private Timestamp expire_data; public CodeBean() { super(); } public CodeBean(int id, String promo_code, double value, double condition, Timestamp expire_data) { super(); this.id = id; this.promo_code = promo_code; this.value = value; this.condition = condition; this.expire_data = expire_data; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPromo_code() { return promo_code; } public void setPromo_code(String promo_code) { this.promo_code = promo_code; } public double getValue() { return value; } public void setValue(double value) { this.value = value; } public double getCondition() { return condition; } public void setCondition(double condition) { this.condition = condition; } public Timestamp getExpire_data() { return expire_data; } public void setExpire_data(Timestamp expire_data) { this.expire_data = expire_data; } @Override public String toString() { return "CodeBean [id=" + id + ", promo_code=" + promo_code + ", value=" + value + ", condition=" + condition + ", expire_data=" + expire_data + "]"; } } package nowcoder; import java.sql.Timestamp; public class Client { public static void main(String[] args) { JDBCConnector connector = new JDBCConnector("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/nowcoder","root","123456"); //插入操作 CodeBean bean = new CodeBean(); bean.setCondition(12); bean.setExpire_data(new Timestamp(System.currentTimeMillis())); bean.setId(4); bean.setPromo_code("121"); bean.setValue(2333); connector.insert(bean, "code"); //查询所有数据 for (Object object : connector.queryAll(CodeBean.class, "code")) { System.out.println(object); } } } 下面是输出结果,就几条数据查看图片
0 点赞 评论 收藏
分享
2016-12-06 17:34
牛客运营
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务