数据库帮助类
package com.cwnu.uitl; import java.sql.*; /** * 数据库基础操作实现类 * * @author BlackWinter * * @date 2009-9-7 上午01:16:19 * * @file com.ebook.dao.DbHelper.java * * @version 3.0 */ public class DbHelper { // 数据库名 final static String database = "boaidb"; // 数据库连接方法 final static ConnectionType mode = ConnectionType.JDBC_MySQL; // 服务器IP final static String server = "localhost"; // 用户名 final static String userName = "root"; // 密码 final static String password = "123456"; // 编码格式 final static String encode = "UTF-8"; /** * 创建通用连接 * * @return 连接对象 */ public static Connection createConn() { if (mode == ConnectionType.JDBC_ODBC_BRIDGE) { // SQLServer桥连接 return getConn("sun.jdbc.odbc.JdbcOdbcDriver", "jdbc:odbc:driver=sql server;server=" + server + ";database=" + database); } else if (mode == ConnectionType.JDBC_MICROSOFT) { // SQLServer JDBC连接 return getConn("com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://" + server + ":1433;DataBaseName=" + database); } else if (mode == ConnectionType.JDBC_MySQL) { // MySQL连接 return getConn("com.mysql.jdbc.Driver", "jdbc:mysql://" + server + ":3306/" + database + "?characterEncoding=" + encode); } else if (mode == ConnectionType.JDBC_ORACLE) { // Oracle连接 return getConn("oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@" + server + ":1521:ORCL"); } return null; } /** * 创建专用连接 * * @param driver:驱动名称 * @param url:连接地址 * @param userName:用户名 * @param password:密码 * @return:连接对象 */ public static Connection createConn(String driver, String url, String userName, String password) { try { Class.forName(driver); return DriverManager.getConnection(url, userName, password); } catch (ClassNotFoundException ex) { System.out.println("数据库联接失败,详细信息为:" + ex.getMessage()); } catch (SQLException ex) { System.out.println("数据库联接失败,详细信息为:" + ex.getMessage()); } return null; } /** * 启动事务 * * @param conn * 连接对象 */ public static void beginTransaction(Connection conn) { try { conn.setAutoCommit(false); } catch (SQLException ex) { System.out.println(ex.getMessage()); } } /** * 提交事务 * * @param conn * 连接对象 */ public static void commitTransaction(Connection conn) { try { conn.commit(); } catch (SQLException ex) { System.out.println(ex.getMessage()); } } /** * 回滚事务 * * @param conn * 连接对象 */ public static void rollbackTransaction(Connection conn) { try { conn.rollback(); } catch (SQLException ex) { System.out.println(ex.getMessage()); } } /** * 执行数据库的增删改方法. * * @param sqlstr * 增删改Sql语句 * @param conn * 连接对象 * @return 是否成功 */ public static boolean execUpdate(String sqlstr, Connection conn) { if (conn == null) { System.out.println("数据联接对象为空.不能进行更新操作..."); return false; } try { Statement ps = conn.createStatement(); return (ps.executeUpdate(sqlstr) != -1); } catch (SQLException ex) { System.out.println("数据库执行更新失败,详细信息为:" + ex.getMessage()); return false; } } /** * 执行数据库的增删改方法 * * @param sqlstr * 增删改Sql语句 * @param conn * 连接对象 * @return 影响的行数 */ public static int execUpdateCounts(String sqlstr, Connection conn) { if (conn == null) { System.out.println("数据联接对象为空.不能进行更新操作..."); return 0; } try { Statement ps = conn.createStatement(); return (ps.executeUpdate(sqlstr)); } catch (SQLException ex) { System.out.println("数据库执行更新失败,详细信息为:" + ex.getMessage()); return 0; } } /** * 执行数据库的插入删除方法. 如进行Insert操作.sql语句为:insert into * testTable(字段1,字段2,字段3)values(?,?,?); 调用的时候需传入代替?号的对象数组.如: new * Object[]{val1,val2,val3} * * @param sqlstr * 增删改的Sql语句 * @param sqlParam * Sql参数 * @param conn * 连接对象 * @return 是否成功 */ public static boolean execUpdate(String sqlstr, Object[] sqlParam, Connection conn) { if (conn == null) { System.out.println("数据联接对象为空.不能进行更新操作..."); return false; } try { PreparedStatement ps = conn.prepareStatement(sqlstr); for (int i = 0; i < sqlParam.length; i++) { ps.setObject(i + 1, sqlParam[i]); } return (ps.executeUpdate() != -1); } catch (SQLException ex) { System.out.println("数据库执行更新失败,详细信息为:" + ex.getMessage()); return false; } } /** * * @param sqlstr * 查询Sql语句 * @param conn * 连接对象 * @return ResultSet结果集 */ public static ResultSet execQuery(String sqlstr, Connection conn) { if (conn == null) { System.out.println("数据联接对象为空.不能进行查询操作..."); return null; } try { Statement ps = conn.createStatement(); return ps.executeQuery(sqlstr); } catch (SQLException ex) { System.out.println("数据库执行查询失败,详细信息为:" + ex.getMessage()); return null; } } /** * 执行数据库的查询方法.外面操作完结果集,请记住调用close方法 list:SQL参数. 调用的时候需传入代替?号的对象数组. 如:new * Object[]{val1,val2,val3} * * @param sqlstr * 查询sql语句 * @param sqlParam * sql参数 * @param conn * 连接对象 * @return ResultSet结果集 */ public static ResultSet execQuery(String sqlstr, Object[] sqlParam, Connection conn) { if (conn == null) { System.out.println("数据联接对象为空.不能进行查询操作..."); return null; } try { PreparedStatement ps = conn.prepareStatement(sqlstr); for (int i = 0; i < sqlParam.length; i++) { ps.setObject(i + 1, sqlParam[i]); } return ps.executeQuery(); } catch (SQLException ex) { System.out.println("数据库执行查询失败,详细信息为:" + ex.getMessage()); return null; } } /** * 使用存贮过程查询 * * @param sql * 存储过程执行语句。如:"{call GetRecordAsPage(?,?,?,?)}" * @param sqlParam * 存储过程参数 * @param conn * 连接对象 * @return ResultSet结果集 */ public static ResultSet execCall(String sql, Object[] sqlParam, Connection conn) { if (conn == null) { System.out.println("数据联接对象为空.不能进行查询操作..."); return null; } try { PreparedStatement ps = conn.prepareCall(sql); for (int i = 0; i < sqlParam.length; i++) { if (sqlParam[i] == null) { ps.setNull(i + 1, 2); } else { ps.setObject(i + 1, sqlParam[i]); } } return ps.executeQuery(); } catch (SQLException ex) { System.out.println("数据库执行查询失败,详细信息为:" + ex.getMessage()); return null; } } /** * 创建连接 * @param driver 连接驱动 * @param url 连接字符串 * @return 连接对象 */ private static Connection getConn(String driver, String url) { try { Class.forName(driver); return DriverManager.getConnection(url, userName, password); } catch (ClassNotFoundException ex) { System.out.println("数据库联接失败,详细信息为:" + ex.getMessage()); } catch (SQLException ex) { System.out.println("数据库联接失败,详细信息为:" + ex.getMessage()); } return null; } /** * 数据库类型枚举 * * @author BlackWinter * * @date 2009-9-30 上午11:17:20 * * @file com.black.dao.impl.DbHelper.java * */ public enum ConnectionType { JDBC_ODBC_BRIDGE, JDBC_MICROSOFT, JDBC_MySQL, JDBC_ORACLE } }
数据抽象类
package com.zz.bean; import java.util.ArrayList; import java.util.Map; /** * Bean接口类 * @author zz * */ public interface BaseBean { /** * 添加一条数据,使用Map,对应数据库中表的字段 * @param entity * @return * @throws Exception */ public boolean Add(Map<String, Object> entity) ; public boolean Del(int id); public boolean Update(Map<String, Object> entity) throws Exception; public Map<String, Object> FindOne(int id); public Map<String, Object> FindOne(String condtion); /** * * @return * @throws Exception */ public ArrayList<Map<String, Object>> FindList() throws Exception; /** * 返回分页数据 * @param offset * @param pagecount * @return * @throws Exception */ public ArrayList<Map<String, Object>> FindList(int offset,int pagecount,String condition); /** * 返回数据记录数量 * @return */ public int GetCount(); /** * 根据条件返回数量 * @param condtion * @return */ public int GetCount(String condtion) ; }
数据实现类
package com.zz.bean; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import javax.servlet.http.Cookie; import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List; import com.zz.uitl.DbHelper; /** * 数据数的操作实现类 * @author zz * */ public class BeanImpl implements BaseBean { private Connection conn; private String tbname;//表名 private ArrayList<String> filed;//字段 public BeanImpl(){} public BeanImpl(String tbname) { conn=DbHelper.createConn(); filed=new ArrayList<String>(); this.tbname=tbname; if(conn!=null) { System.out.println("数据库连接成功的"); } Statement st; try { st = conn.createStatement(); String sql="select * from "+tbname; ResultSet rs = st.executeQuery(sql); ResultSetMetaData meta = rs.getMetaData(); for (int i = 1; i <= meta.getColumnCount(); i++) { String columnName = meta.getColumnName(i).toLowerCase(); filed.add(columnName);//往字段队列中添加 } rs.close();//关闭连接 } catch (SQLException e) { e.printStackTrace(); } } public boolean Add(Map<String, Object> entity) { String filed=""; String val=""; Object[] param=new Object[entity.size()];//创建一个和entity大小相等的数组 int i=0; for (Map.Entry<String, Object> item : entity.entrySet()) { filed+=item.getKey()+","; val+="?"+","; param[i]=item.getValue(); i++; } filed=filed.substring(0, filed.length()-1);//去除最后一个逗号 val=val.substring(0, val.length()-1);//去除最后一个逗号 String sql="insert into "+tbname+"("+filed+") values("+val+")"; System.out.println("sql语句:"+sql); return DbHelper.execUpdate(sql, param, conn); } /* * 删除操作 * @see com.cwnu.bean.BaseBean#Del(int) */ public boolean Del(int id) { String sql="delete from "+tbname+" where id="+id; return DbHelper.execUpdate(sql, conn); } /* * 更新数据的方法 * @see com.cwnu.bean.BaseBean#Update(java.util.Map) */ public boolean Update(Map<String, Object> entity) throws Exception { String upString=""; Object[] param=new Object[entity.size()];//创建一个和entity大小相等的数组 int i=0; for (Map.Entry<String, Object> item : entity.entrySet()) { upString+=item.getKey()+"=?,"; param[i]=item.getValue(); i++; } upString=upString.substring(0, upString.length()-1);//去除最后一个逗号 String sql="update "+tbname+" set "+upString+" where id="+entity.get("id"); System.out.println("sql语句:"+sql); return DbHelper.execUpdate(sql, param, conn); } public Map<String, Object> FindOne(int id) { String sql="select * from "+tbname+" where id="+id; ResultSet rs=DbHelper.execQuery(sql, conn); try { if(rs.next()) { Map<String,Object> item=new HashMap<String, Object>(); //获取一个Map对象 for (int i = 0; i < filed.size(); i++) { item.put(filed.get(i), rs.getObject(filed.get(i))); } return item; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public ArrayList<Map<String,Object>> FindList() throws Exception { ArrayList<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); String sql="select * from "+tbname; ResultSet rs=DbHelper.execQuery(sql, conn); while(rs.next()) { Map<String,Object> item=new HashMap<String, Object>(); //获取一个Map对象 for (int i = 0; i < filed.size(); i++) { item.put(filed.get(i), rs.getObject(filed.get(i))); } list.add(item); } return list; } public ArrayList<Map<String,Object>> FindList(int offset,int pagecount,String where) { ArrayList<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); //String sql="select * from "+tbname+" "+where+" limit "+offset+","+pagecount+" "; String sql="select * from %s %s limit ?,? "; Object[] param=new Object[]{offset,pagecount}; sql=String.format(sql, tbname,where); System.out.println(sql); ResultSet rs=DbHelper.execQuery(sql, param,conn); try { while(rs.next()) { Map<String,Object> item=new HashMap<String, Object>(); //获取一个Map对象 for (int i = 0; i < filed.size(); i++) { item.put(filed.get(i), rs.getObject(filed.get(i))); } list.add(item); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } public int GetCount() { String sql="select count(*) from "+tbname; Statement st; try { st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); int count=-1; if(rs.next()) { count=rs.getInt(1); } return count; } catch (SQLException e) { e.printStackTrace(); } return -1; } public int GetCount(String condtion) { String sql="select count(*) from "+tbname+" "+condtion; Statement st; try { st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); int count=-1; if(rs.next()) { count=rs.getInt(1); } return count; } catch (SQLException e) { e.printStackTrace(); } return -1; } public Map<String, Object> FindOne(String condtion) { String sql="select * from "+tbname+" "+condtion; System.out.println(sql); ResultSet rs=DbHelper.execQuery(sql, conn); try { if(rs.next()) { Map<String,Object> item=new HashMap<String, Object>(); //获取一个Map对象 for (int i = 0; i < filed.size(); i++) { item.put(filed.get(i), rs.getObject(filed.get(i))); } return item; } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }