jdbcUtils
1.四大參數(shù)的出現(xiàn)了硬編碼
static String className;
static String url;
static String user;
static String password;
static {
try {
Properties p = new Properties();
p.load(new FileInputStream("jdbc.properties"));
className = p.getProperty("className");
url = p.getProperty("url");
user = p.getProperty("user");
password = p.getProperty("password");
Class.forName(className);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
Connection connection = DriverManager.getConnection(url,user,password);
return connection;
}
2.sql字符串拼接:不方便,sql有注入
通過prepareStatement防止sql注入
String sql="select * from user where username=? and password=?";
PreparedStatement ps = con.prepareStatement(sql);
for(int i=0;i<value.length;i++){
ps.setObject(i+1,value[i]);
}
ResultSet rs = ps.executeQuery();
3.javabean的封裝不方便
泛型+反射
注意:類中的數(shù)據(jù)名要和表中的完全相同
//得到單個對象
if(!rs.next()){
return null;
}
T obj = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
String name = field.getName();
field.setAccessible(true);
if(field.getType()==int.class){
int value1=rs.getInt(name);
field.set(obj, value1);
}
else if(field.getType()==String.class){
String value1=rs.getString(name);
field.set(obj, value1);
}
else if(field.getType()==float.class){
float value1=rs.getFloat(name);
field.set(obj, value1);
}
else{
double value1=rs.getDouble(name);
field.set(obj, value1);
}
}
return obj;
//得到對象的集合
ArrayList<T> list = new ArrayList<T>();
Connection con = getConnection();
PreparedStatement ps = con.prepareStatement(sql);
for (int i = 0; i < value.length; i++) {
ps.setObject(i + 1, value[i]);
}
ResultSet rs = ps.executeQuery();
while (rs.next()) {
T obj = getBean(clazz, rs);
list.add(obj);
}
return list;
}
查找單個數(shù)
if(rs.next()){
return rs.getObject(1);
}
return null;
String sql="select count(*) from user";
Number num = (Number)JdbcUtils.selectNum(sql);
int i = num.intValue();
System.out.println(i);
查詢封裝
ArrayList list = new ArrayList();
String sql = "update user set id=?";
list.add(user.getId());
if (user.getUsername() != null &&!"".equals(user.getUsername())) {
sql=sql+",username=?";
list.add(user.getUsername());
}
if (user.getPassword()!= null &&!"".equals(user.getPassword())) {
sql=sql+",password=?";
list.add(user.getPassword());
}
sql=sql+" where id="+user.getId();
int i = JdbcUtils.update(sql, list.toArray());
return i;
}
增刪改封裝
ArrayList list = new ArrayList();
String sql = "select * from user where 1=1";
if (user.getUsername() != null && !"".equals(user.getUsername())) {
sql = sql + " and username like ?";
list.add("%" + user.getUsername() + "%");
}
if (user.getPassword() != null && !"".equals(user.getPassword())) {
sql = sql + " and password like ?";
list.add("%" + user.getPassword() + "%");
}
System.out.println(sql);
System.out.println(list);
ArrayList<User> list2 = JdbcUtils.toList(User.class, sql,
list.toArray());
return list2;
配置文件
property是map與io流(FilleInputStream)的結(jié)合
Property p=new Property();//創(chuàng)建對象
p.load(new FileInputStream("文件名"));//讀取文件對象
Object obj=p.getProperty(key)//傳入key得到文件中對應(yīng)的對象