牛妹:偶尔吃包泡面改善一下伙食
0 点赞 评论 收藏
分享
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 点赞 评论 收藏
分享
牛妹:东北-----锅包肉
0 点赞 评论 收藏
分享
牛客4859027号:牛妹
0 点赞 评论 收藏
分享
牛妹前男友:我读书少,你别骗我-------李小龙
0 点赞 评论 收藏
分享
牛妹前男友:这代码也注释?
轮到看别人代码的时候,这没有注释的代码怎么看?!
0 点赞 评论 收藏
分享
牛油:同样详细的一个校招总结帖子:非CS水硕的2016研发岗位校招总结 = = 互联网求职失败的经验教训
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
无务:我举报你
0 点赞 评论 收藏
分享
向宇同桌:从产品角度看激活码,一般需要涉及到
1. 要随机,不能简单,否则容易被人爆破
2. 不要有混淆的字母,比如数字零0和字母欧,爱(I)和小写的L,2和Z等等,否则输入容易出错
0 点赞 评论 收藏
分享
我不懂了:自己在北京的房子,自己装饰的很有爱,不舍的删
查看图片

0 点赞 评论 收藏
分享
恭喜您又涨工资了:2017上半年要找到好实习,下半年要签好工作,加油
0 点赞 评论 收藏
分享
向宇同桌:少看片,多玩球

0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: