您的位置:首页 > 其它

JDBC学习总结5-------使用了内部类后的改造

2012-07-14 14:28 369 查看
1.com.hanchao.entity包
package com.hanchao.entity;
/**
* 实体类
* @author hanlw
* 2012-07-09
*/
public class User {

private int id;
private String username;
private String address;

//get...set...方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

}

2.com.hanchao.util包《1》.一个接口
package com.hanchao.util;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
* 顶一个泛型的RowMapper接口
* @author hanlw
* 2012-07-09
*/
public interface RowMapper<T> {
/**
* 注意:T表示一个泛型的实体类。
*/
public T mapperRow(ResultSet rs) throws SQLException;
}
《2》.工具类
package com.hanchao.util;

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

/**
* 顶一个泛型的工具类
* @author hanlw
* 2012-07-09
*/
public class DBHelp<T> {
//定义几个常量
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/mydb";
private static final String DB_NAME = "root";
private static final String DB_PASSWORD = "root";

/**
* 连接数据库
* @return
*/
public Connection getConnection() {
Connection con = null;
try {
Class.forName(DRIVER);
con = DriverManager.getConnection(URL,DB_NAME,DB_PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}

/**
* 返回一个对象的查询★
* @param sql SQL语句
* @param rm  该接口的所有实现类对象
* @param args 不定项参数
* @return
*/
public T queryForObject(String sql, RowMapper<T> rm, Object...args) {
Connection con = getConnection();
PreparedStatement sta = null;
ResultSet rs = null;

T obj = null;

try {
sta = con.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
sta.setObject(i+1, args[i]);//★
}
rs = sta.executeQuery();
if(rs.next()) {
obj = rm.mapperRow(rs);//实际上运行是其实现类中的mapperRow()方法,即实现类重现后的方法
}

} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rs,sta,con);
}

return obj;
}

/**
* 返回一个集合的查询
* @param sql → SQL语句
* @param rm → RowMapper<T>接口的实现类对象
* @param args → 不定项参数
* @return
*/
public List<T> queryForList(String sql,RowMapper<T> rm, Object...args) {
Connection con = getConnection();
PreparedStatement sta = null;
ResultSet rs = null;

List<T> list = new ArrayList<T>();

try {
sta = con.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
sta.setObject(i+1, args[i]);
}

rs = sta.executeQuery();
while(rs.next()) {
T obj = rm.mapperRow(rs);
list.add(obj);
}

} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rs,sta,con);
}
return list;
}

/**
* 用来执行insert、update、delete方法
* @param sql → SQL语句
* @param args → 不定项参数
* @return
*/
public int executeSQL(String sql, Object...args) {
Connection con = getConnection();
PreparedStatement sta = null;
int rows = 0;

try {
sta = con.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
sta.setObject(i+1, args[i]);
}

rows = sta.executeUpdate();
if(rows > 0) {
System.out.println("ok");
} else {
System.out.println("no");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(sta,con);
}
return rows;
}

/**
* 关闭 → 注意关闭的顺序 rs,sta,con.
* @param rs
* @param sta
* @param con
*/
public void close(ResultSet rs, PreparedStatement sta, Connection con) {
try {
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(sta != null) {
sta.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
/**
* sta,con的关闭
* @param sta
* @param con
*/
public void close(PreparedStatement sta, Connection con) {
this.close(null, sta, con);
}
//************************************************
}
3.com.hanchao.dao包
package com.hanchao.dao;

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

import com.hanchao.entity.User;
import com.hanchao.util.DBHelp;
import com.hanchao.util.RowMapper;

/**
* 对User对象操作的Dao类
* @author hanlw
* 2012-07-09
*/
public class UserDao {

private DBHelp<User> db = new DBHelp<User>();

/**
* 添加操作
* @param name
* @param address
* @return
*/
public int save(String name, String address) {
String sql = "insert into t_user(username,address) values(?,?)";
return db.executeSQL(sql, name,address);
}

/**
* 更新操作
* @param user
* @return
*/
public int update(User user) {
String sql = "update t_user set username=?,address=? where id=?";
return db.executeSQL(sql, user.getUsername(),user.getAddress(),user.getId());
}

/**
* 删除操作
* @param id
* @return
*/
public int delete(int id) {
String sql = "delete from t_user where id=?";
return db.executeSQL(sql, id);
}

/**
* 查找单独的一个用户
* @param name
* @return
*/
public User findByName(String name) {
String sql = "select id,username,address from t_user where username=?";
return db.queryForObject(sql, new UserRowMpper(), name);
}

/**
* 查询所有
* @return
*/
public List<User> findAll() {
String sql = "select id,username,address from t_user";
return db.queryForList(sql, new UserRowMpper());
}

/**
* 接口RowMapper的一个实现类  (这是一个内部类哦)
* ★具体了解内部类的知识:http://hanchaohan.blog.51cto.com/2996417/930721
* @author hanlw
*
*/
private class UserRowMpper implements RowMapper<User> {
/**
* 实现该接口的所有的方法
*/
public User mapperRow(ResultSet rs) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setAddress(rs.getString("address"));
return user;
}

}
}
4.com.hanchao.test包
package com.hanchao.test;

import java.util.List;

import com.hanchao.dao.UserDao;
import com.hanchao.entity.User;

/**
* 测试
* @author hanlw
* 2012-07-09
*/
public class Test {

public static void main(String[] args) {

/**
* 1.添加操作
*/
UserDao dao = new UserDao();
dao.save("tom", "cherry");

/**
* 2.更新操作
*/
User user = new User();
user.setId(32);
user.setAddress("");
user.setUsername("chenchen");
dao.update(user);

/**
* 3.删除操作
*/
dao.delete(31);

/**
* 4.查找一个对象
*/
User u = dao.findByName("hanchao");
System.out.println("----"+u.getAddress());

/**
* 查找一个集合
*/
List<User> list = dao.findAll();
for(User us : list) {
System.out.println(us.getUsername());
}
}
}
关于泛型,可以了解一下这篇文字:http://www.cnblogs.com/yinhaiming/articles/1749738.html

本文出自 “我的JAVA世界” 博客,请务必保留此出处http://hanchaohan.blog.51cto.com/2996417/930862
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: