jdbc底层封装
来源:互联网 发布:linux分区方案 知乎 编辑:程序博客网 时间:2024/04/30 13:16
package Demo;import java.sql.SQLException;import java.util.List;import java.util.Map;import com.mysql.jdbc.Connection;public interface Dao<T> {public Connection getConnection() throws ClassNotFoundException, SQLException; /** * 根据sql查询列表数据(查询多条),不支持预编译的方式 */ public List<Map<String, Object>> executeQueryForList(String sql) throws ClassNotFoundException, SQLException; public List<T> executeQueryForList1(String sql,Class<T> returnClass) throws ClassNotFoundException, SQLException;}
package Demo;import java.io.InputStream;import java.lang.reflect.Field;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.Types;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import com.mysql.jdbc.Connection;public class DaoImpl<T> implements Dao<T>{Connection con = null;String sDBDriver = "org.gjt.mm.mysql.Driver";String sConnStr = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";//设置数据库名称为:pubsString username = "root"; //登录数据库用户名String password = ""; //登录数据库密码//数据库连接@Overridepublic Connection getConnection(){Connection con = null;Properties properties = new Properties();String driver = sDBDriver;String url = sConnStr;String user = username;try {Class.forName(driver);con = (Connection) DriverManager.getConnection(url, user, password);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return con;} /** * 根据sql查询列表数据,不支持预编译的方式 */ public List<Map<String, Object>> executeQueryForList(String sql) throws ClassNotFoundException, SQLException{ System.err.println("查询多条:"+sql); Connection connect =this.getConnection();Statement stmt = connect.createStatement();ResultSet rs = stmt.executeQuery(sql);List<Map<String, Object>> list = this.rsToList(rs);this.releaseConnection(rs, stmt, connect);//关闭连接return list;} /** * 将ResultSet中的结果包装成list中装Map的结构 */private List<Map<String, Object>> rsToList( ResultSet rs ) throws SQLException{List<Map<String, Object>> row = new ArrayList<Map<String, Object>>(); while (rs.next()) { Map<String, Object> col = new HashMap<String, Object>(); for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { //System.out.println( rs.getMetaData().getColumnType(i) ); switch( rs.getMetaData().getColumnType(i) ){ case Types.VARCHAR: col.put(rs.getMetaData().getColumnName(i), rs.getString(i)); break; case Types.INTEGER: col.put(rs.getMetaData().getColumnName(i), rs.getInt(i)); break; case Types.BLOB: InputStream in = rs.getBinaryStream(i); col.put(rs.getMetaData().getColumnName(i), in ); break; default: col.put(rs.getMetaData().getColumnName(i), rs.getString(i)); break; } }row.add(col);} return row;}/** * 将ResultSet结果集存入list中 * @param <T> * @param rs * @param stmt * @param connect * @throws IllegalAccessException * @throws InstantiationException * @throws SQLException */public List<T> rsList1(ResultSet rs,Class<T> returnClass) throws InstantiationException, IllegalAccessException, SQLException{System.out.println("name:"+returnClass.getName());List<T> list = new ArrayList<T>();Field[] ss = returnClass.getDeclaredFields();T da = returnClass.newInstance();while (rs.next()) { for (int i = 0; i < ss.length; i++) { switch( rs.getMetaData().getColumnType(i+1) ){ case Types.VARCHAR: ss[i].set(da, rs.getString(i+1)); break; case Types.INTEGER: ss[i].set(da, rs.getInt(i+1)); break; case Types.BLOB: InputStream in = rs.getBinaryStream(i+1); ss[i].set(da, in); break; default: ss[i].set(da, rs.getString(i+1)); break; } }}list.add(da);return list;} /** * 根据sql查询数据,返回对象结果集 */public List<T> executeQueryForList1(String sql,Class<T> returnClass) throws ClassNotFoundException, SQLException{ System.err.println("查询多条:"+sql+"当前对象:"+returnClass); Connection connect =this.getConnection();Statement stmt = connect.createStatement();ResultSet rs = stmt.executeQuery(sql);List<T> list = null;try {list = this.rsList1(rs,returnClass);} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}this.releaseConnection(rs, stmt, connect);//关闭连接return list;} //关闭连接private void releaseConnection(ResultSet rs, Statement stmt, Connection connect) throws SQLException{ try { if (rs != null){ rs.close(); } if (stmt != null){ stmt.close(); } if (connect != null && !connect.isClosed()){ connect.close(); } } catch (SQLException se){ System.out.println("Close the connection encounter error!\n" + se.getMessage()); throw new SQLException("关闭连接异常!"); }}}
package Demo;import java.sql.SQLException;import java.util.List;public class TestController {Dao<User> dao = new DaoImpl<User>();public List<User> query() throws ClassNotFoundException, SQLException{ List<User> list = dao.executeQueryForList1("select * from user",User.class); System.out.println("id:"+list.get(0).getId()); return list;}public static void main(String[] args) throws ClassNotFoundException, SQLException {TestController TestController = new TestController();TestController.query();}}
package Demo;public class User {Integer id;String username;Integer password;String email;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getPassword() {return password;}public void setPassword(Integer password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}
1 0
- jdbc底层封装
- ORM底层封装( JDBC \ DBUtils)
- jdbc底层
- jdbc底层
- JDBC封装
- jdbc 封装
- JDBC封装
- JDBC封装
- JDBC封装
- jdbc 封装
- JDBC 封装
- JDBC封装
- JDBC封装
- 封装jdbc
- JDBC底层源代码
- jdbc底层实现
- JDBC底层代码
- JDBC底层代码
- PHP codeigniter框架
- Java线程总结(六):并发包------线程同步Lock
- 平衡三进制(可推广到n进制)
- 22. Generate Parentheses
- 使用glide和volley创建自己的网络图库
- jdbc底层封装
- 包含cv::Mat和cv::Rect的人眼ROI结构体在内存中的分布
- [LeetCode]3Sum
- nodejs搭建一个简单的httpserver
- 插播-管理书目
- CSS3的calc()使用
- 运算符重载
- Hadoop集群搭建
- C#中如何把XML转化成强类型操作