JDBC 连接数据库(增,删,改,查)公用类及DAO类实现

来源:互联网 发布:今晚大非农数据结果 编辑:程序博客网 时间:2024/05/11 02:59
import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.Hashtable;public class DbHelper {/** * 常见错误 * 1、在ResultSet迭代的时候,没有用<=导致没有获得当前数据行的列的最后的一列数据, *    这个错误会导致,在获取之以后给实体bean对象赋值的时候抛出空指针异常 * 2、pstmt.setObject(i + 1, params.get(i));正确的 *   pstmt.setObject(i, params.get(i));错误的写法没有把数据参数的索引从1开始 *  *  */// 连接数据库private static Connection connection;// 执行带预处理的sql语句private static PreparedStatement pstmt;// 接受数据的查询的返回结果集private static ResultSet rs;// jdbc:jtds:sqlserver://<hostname>[:<port>]/<dbname>private static String sqlurlString = "jdbc:jtds:sqlserver://localhost:1433/First";private static String dbname = "sa";private static String dbpwd = "";/** *  * 获得数据库的连接的方法 *  * @return */public static Connection getConnction() {// 获得驱动连接数据库try {Class.forName("net.sourceforge.jtds.jdbc.Driver");connection = java.sql.DriverManager.getConnection(sqlurlString,dbname, dbpwd);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return connection;}/** * 执行查询的通用方法 * @param sql * @param params * @return */public static ArrayList<Hashtable<String, Object>> executeQuery(String sql,ArrayList<Object> params) {ArrayList<Hashtable<String, Object>> resultArrayList = null;// 执行查询,必须先判断是否有正常的数据连接try {if (null == connection || connection.isClosed()) {getConnction();}pstmt = connection.prepareStatement(sql);if (null != params) {if (params.size() > 0) {for (int i = 0; i < params.size(); i++) {//System.out.println(params.set(1, 0));//预处理的pstmt对象设置值pstmt.setObject(i + 1, params.get(i));}}}rs = pstmt.executeQuery();if (null != rs) {resultArrayList = new ArrayList<Hashtable<String, Object>>();while (rs.next()) {// 获得数据库表的结构ResultSetMetaData rsmdData = rs.getMetaData();Hashtable<String, Object> rowHashtable = new Hashtable<String, Object>();for (int j = 1; j <= rsmdData.getColumnCount(); j++) {rowHashtable.put(rsmdData.getColumnName(j).toLowerCase(), rs.getObject(j));}resultArrayList.add(rowHashtable);}}} catch (SQLException e) {e.printStackTrace();}finally{closeAll();}return resultArrayList;}/** * 该方法执行数据库数据的添加,删除,和修改的操作 * @param sql  执行的T-SQL 语句,也就是结构化查询语句 * @param params  执行sql语句有可能用到的参数的集合 * @return int */public static int executeSave(String sql, ArrayList<Object> params){int result  = 0;/** * 1、判断数据库的连接状态,如果没有连接则连接数据库,先获得数据库的连接 * 2、执行预处理的sql语句对象,PreparedStatement,有可能该sql有相关的参数 * 3、判断是否有参数,如果有则进行参数的绑定 * 4、执行sql语句,获得返回的执行结果,会是int返回数据中受影响的行数 * 5、执行资源的回收 *  */try {//1、判断数据库的连接状态,如果没有连接则连接数据库,先获得数据库的连接if(null == connection || connection.isClosed()){getConnction();}//2、执行预处理的sql语句对象,PreparedStatement,有可能该sql有相关的参数//执行该对象,需要一个有效的SQL语句pstmt = connection.prepareStatement(sql);//3、判断是否有参数,如果有则进行参数的绑定if(null != params){if(params.size()>0){for(int i=0; i<params.size();i++){pstmt.setObject(i+1, params.get(i));}}}//4、执行sql语句,获得返回的执行结果,会是int返回数据中受影响的行数result = pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}finally{//5、执行资源的回收closeAll();}return result;}public static void closeAll() {try {if (null != rs) {rs.close();rs = null;}if(null !=pstmt){pstmt.close();pstmt = null;}if (null != connection) {connection.close();connection= null;}} catch (SQLException e) {e.printStackTrace();}}}

测试:

@Test public void textGetConnection(){//java.sql.Connection con = DbHelper.getConnection();//System.out.println(con);String sqlString = "select * from Users WHERE UName=? AND UPwd=?";ArrayList<Object> params = new ArrayList<Object>();params.add("李四");params.add("234");ArrayList<Hashtable<String, Object>> tempresult = DbHelper.executeQuery(sqlString,params);for (Hashtable<String, Object> row: tempresult) {for(String key: row.keySet()){System.out.println(row.get(key));}}}


DAO类实现方法:

登录:

public Users login(String uname) {Users result = null;String sqlString = "select * from Users where UName=?";ArrayList<Object> params = new ArrayList<Object>();params.add(uname);ArrayList<Hashtable<String, Object>> templist = DbHelper.executeQuery(sqlString, params);if(null != templist){if(templist.size()==1){result = getModelByHashtable(templist.get(0));}}return result;}

查询所有:

public ArrayList<Users> findAll() {ArrayList<Users> result = null ;//执行查询所有用户的SQlString sql = "SELECT * FROM [Users]";//调用数据库的底层类,通过查询方法获得数据库中的所有用户信息ArrayList<Hashtable<String, Object>> tempList = DbHelper.executeQuery(sql, null);//判断执行查询是否成功if(null != tempList){//如果数据执行查询成功则判断查询是否获得相关的数据if(tempList.size()>0){//如果查询获得相关的数据则创建用于封装数据返回的对象实例result = new ArrayList<Users>();//通过循环遍历查询的集合,获得集合中的每个数据,并封装成用户对象for (Hashtable<String, Object> hashtable : tempList) {Users users = getModelByHashtable(hashtable);result.add(users);}}}return result;}
private Users getModelByHashtable(Hashtable<String, Object> ht){      Users users = new Users();      users.setuId(ht.get("uid").toString());      users.setuName(ht.get("uname").toString());      System.out.println(ht);      System.out.println(users);      users.setuPwd(ht.get("upwd").toString());      return users;  }

或者:

private Users getModelUsersByHashtable(Hashtable<String, Object> row){Users result = new Users();//获得当前类的所有的私有字段Field[] fileds = result.getClass().getDeclaredFields();for (Field field : fileds) {//设置私有的属性可以被调用field.setAccessible(true);try {field.set(result, row.get(field.getName().toLowerCase()));} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}return result;}

删除:

public int delete(String id) {String sql = "DELETE [Users] WHERE [Uid]=? ";ArrayList<Object> params = new ArrayList<Object>();params.add(id);int result = DbHelper.executeSave(sql, params);return result;}

增加:

public int save(Users t) {int result = 0 ;String sql= "INSERT INTO Users(UName,UPwd) VALUES(?,?)";ArrayList<Object> params = new ArrayList<Object>();params.add(t.getuName());params.add(t.getuPwd());result = DbHelper.executeSave(sql, params);return result;}

修改:

public int update(Users obj) {String sql = "update [User Info] set username=?,Age=?,Address=? where LoginName=?";ArrayList<Object> params = new ArrayList<Object>();      params.add(obj.getUserName());params.add(obj.getAge());params.add(obj.getAddress());params.add(obj.getLoginName());int result = DbHelper.excuteSave(sql, params);return result;} 

 

原创粉丝点击