反射的应用,jdbc封装
实现在Java中查询数据库并保存在Java中
1.创建Dept类(要查找的类)
package cn.ljs; public class Dept {
private int deptno;
private String dname;
private String loc; public int getDeptno() {
return deptno;
} public void setDeptno(int deptno) {
this.deptno = deptno;
} public String getDname() {
return dname;
} public void setDname(String dname) {
this.dname = dname;
} public String getLoc() {
return loc;
} public void setLoc(String loc) {
this.loc = loc;
} public Dept() {
super();
} public Dept(int deptno, String dname, String loc) {
super();
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
} @Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc
+ "]";
} }
2.自定义的工具类
package cn.ljs.utill; import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; public class Jdbcutill { private static String drive = "";
private static String url = "";
private static String user = "";
private static String password = ""; static {
try {
// 以流的形式获取db.properties
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"); // 创建Properties 类,通过load流读取到该对象中
Properties prop = new Properties();
prop.load(in);
drive = prop.getProperty("drive");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password"); System.out.println(drive);
System.out.println(url);
System.out.println(user);
System.out.println(password); // 1.加载数据库驱动类
Class.forName(drive); } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("配置文件失败");
}
} public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return connection; } public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.配置文件
# do not write space
drive=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
user=SCOTT
password=tiger
4实现在Java中查询数据库并保存在Java中
package cn.ljs; import java.lang.reflect.Field;
import java.lang.reflect.Method;
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.List; import cn.ljs.utill.Jdbcutill; public class TestUser {
public static void main(String[] args) throws Exception {
TestUser testUser = new TestUser();
List list = testUser.rowToBean("select * from dept", Dept.class);
for (int i = 0; i < list.size(); i++) {
Dept dept = (Dept)list.get(i);
System.out.println(dept);
}
} public List rowToBean(String sql,Class cls) throws Exception{
List list = new ArrayList<>();
//调用自定义的方法,加载数据库,创建数据库的连接对象
Connection conn = Jdbcutill.getConnection();
//创建预编译对象,结果集对象
PreparedStatement ps= null;
ResultSet rs = null; ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
// 每一个rs对象都对应一个ResultSetMetaData对象
ResultSetMetaData metaData = rs.getMetaData();
// 获取查询的列数
int count = metaData.getColumnCount(); //遍历
while(rs.next()){
Object object = cls.newInstance();
for (int i = 0; i < count; i++) {
//获取第几列的名字
String fieldName = metaData.getColumnName(i+1).toLowerCase();
//通过类名获取类中的属性的描述
Field field = cls.getDeclaredField(fieldName);
//通过类名,拼接的方法名,属性描述的类型获取set方法
Method method = cls.getDeclaredMethod(getSetMethodName(fieldName),field.getType());
//通过结果集获取数据库中的属性值
Object objval = rs.getObject(fieldName);
//执行setfangfa(需要类的对象名,数据库的属性值)
if (objval != null) {
if (objval instanceof Number) {
if (field.getType().getName().equals("int")
|| field.getType().getName().equals("java.lang.Integer")) {
method.invoke(object, rs.getInt(fieldName));
} else if (field.getType().getName().equals("long")
|| field.getType().getName().equals("java.lang.Long")) {
method.invoke(object, rs.getLong(fieldName));
} else if (field.getType().getName().equals("double")
|| field.getType().getName().equals("java.lang.Double")) {
method.invoke(object, rs.getDouble(fieldName));
} else if (field.getType().getName().equals("short")
|| field.getType().getName().equals("java.lang.Short")) {
method.invoke(object, rs.getShort(fieldName));
} else if (field.getType().getName().equals("byte")
|| field.getType().getName().equals("java.lang.Byte")) {
method.invoke(object, rs.getByte(fieldName));
} else if (field.getType().getName().equals("float")
|| field.getType().getName().equals("java.lang.Float")) {
method.invoke(object, rs.getFloat(fieldName));
}
} else {
method.invoke(object, objval);
}
}
//关闭资源 } list.add(object);
} Jdbcutill.close(conn, ps, rs); return list;
}
//拼接set方法名
public String getSetMethodName(String fieldName){
return "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
} }
反射的应用,jdbc封装的更多相关文章
- 优化JDBC封装
可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...
- jdbc封装代码
jdbc封装代码 package jdbcUtil; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...
- 利用java反射将结果集封装成为对象和对象集合
java反射机制是什么 反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法: 反射机制能够做什么 1.判断运行对象的所属类 2.构造任意一个类的对象 3.获取任意一个类的属 ...
- JDBC封装的工具类
1. JDBC封装的工具类 public class JDBCUtil { private static Properties p = new Properties(); private static ...
- Mysql,JDBC封装
1.完成对数据库的表的增删改的操作 2.查询返回单条记录 3.查询返回多行记录 4.可以使用反射机制来封装,查询单条记录 5.反射机制,查询多条记录 package myjdbc; import ja ...
- 使用DbUtils对JDBC封装实现面向实体查询
直接上代码 package org.smart4j.chapter2.helper; import org.apache.commons.dbcp2.BasicDataSource; import o ...
- java jdbc 封装。。
JDBC工具类...package it.cast.jdbcutils; import java.io.InputStream; import java.sql.Connection; import ...
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- Java JDBC封装模式
模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...
随机推荐
- 【原创】大叔问题定位分享(14)Kylin频繁OOM问题
公司一个kylin集群,每到周二下午就会逐个节点OOM退出,非常有规律,kylin集群5个节点,每个节点分配的内存已经不断增加到70多G,但是问题依旧: 经排查发现,每周二下午kylin集群的请求量确 ...
- Android开发之字体设置
默认字体 Android SDK自带了四种字体:"normal"“monospace",“sans”, “serif”,如下: 字体 看这四兄弟长的还是蛮像,我是看不 ...
- java集合(list,set,map)
集合 集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...
- 关于 UNIX 的哲理名言(中英文对照)
UNIX 的特点: Everything (including hardware) is a file.所有的事物(甚至硬件本身)都是一个的文件. Configuration data stored ...
- OpenCV绘制图像中RGB三个通道的直方图
一开始是看<OpenCV计算机视觉编程攻略(第2版)>这本书学做直方图,但是书本里说直方图的部分只详细说了黑白图像(单通道)的直方图绘制方法,RGB图像的直方图只说了如何计算,没有说计算完 ...
- python提取网页表格并保存为csv
0. 1.参考 W3C HTML 表格 表格标签 表格 描述 <table> 定义表格 <caption> 定义表格标题. <th> 定义表格的表头. <tr ...
- spark DataFrame的创建几种方式和存储
一. 从Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLContext及HiveContext接口来实现其对数据加载.转换.处理等功能.Sp ...
- CodeForces 623E Transforming Sequence 动态规划 倍增 多项式 FFT 组合数学
原文链接http://www.cnblogs.com/zhouzhendong/p/8848990.html 题目传送门 - CodeForces 623E 题意 给定$n,k$. 让你构造序列$a( ...
- skywalking6.0.0安装配置(windows),以mysql作为储存。
下载skywalking6.0.0http://skywalking.apache.org/downloads/ 下载jdk8https://www.oracle.com/technetwork/ja ...
- es ik分词插件安装
1.ik下载(下载es对应版本的ik分词包) https://github.com/medcl/elasticsearch-analysis-ik/releases 2.mac cd /usr/loc ...