package com.booksystem.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class DS {
public static String driver = "oracle.jdbc.driver.OracleDriver";
public static String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
public static String user = "root";
public static String password = "root";
public static Connection conn = null;
public static Statement stat = null;
public static ResultSet rs = null;
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection conn() {
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 查询
* */
public static ResultSet query(String sql) {
Connection c2 = conn();
try {
stat = c2.createStatement();
rs = stat.executeQuery(sql);
return rs;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 查询 返回一个对象
* @param sql select语句
* @param beanClass 该select语句的结果集
* 最终封装成该类型
* @return T对象
*
*
* select id,name
* from student
*
* */
public static <T> List<T> query(String sql,
Class<T> beanClass) {
//构建list集合存放对象
List<T> list = new ArrayList<T>();
//1,获得beanClass的所有属性
Field[] fields = beanClass.getDeclaredFields();
//2,执行sql
ResultSet rs = query(sql);
try {
//获得结果集的mate对象,用来获得结果集中的列名
ResultSetMetaData md = rs.getMetaData();
while(rs.next()) {
//使用字节码对象 产生新对象
T t = beanClass.newInstance();
//本次循环 创建的新对象添加到集合中
list.add(t);
//获得当前结果集中总包含多少列
int length = md.getColumnCount();
for(int i = 1;i<=length;i++) {
//获得列名
String columnName =
md.getColumnLabel(i);
//列的类型
String typeName = md.getColumnTypeName(i).toLowerCase();
//列的值获取
//Object value = rs.getObject(i);
//通过列名 获得 对应的属性名
Field fie = beanClass.getDeclaredField(
columnName.toLowerCase());
//设置私有属性可见
fie.setAccessible(true);
//给t对象的属性设置值
//setName();
//columnName.substring(0, 1).toUpperCase()
//columnName.substring(1).toLowerCase()
Method setMethod = beanClass.getMethod(
"set"+columnName.substring(0, 1).toUpperCase()
+columnName.substring(1).toLowerCase(),
fie.getType());
//判断当前列的类型
if("number".equals(typeName)) {
int value = rs.getInt(i);
//反射调用set方法
setMethod.invoke(t, value);
}else if("varchar2".equals(typeName)) {
String value = rs.getString(i);
setMethod.invoke(t, value);
}else if("date".equals(typeName)) {
Date date = rs.getDate(i);
if(date!=null) {
java.util.Date value = new java.util.Date(date.getTime());
setMethod.invoke(t, value);
}
}else {}
}
}
}catch (Exception e) {
e.printStackTrace();
}finally {
close();
}
return list;
}
/**
* 通过id删除 参数二类对应的表中数据<br>
* @param id 主键值
* @param beanClass 被删除的表对应javaBean
* */
public static <T> void delelte(Object id,
Class<T> beanClass) {
//delete 表名 where id = id
StringBuffer sb = new StringBuffer();
sb.append("delete");
sb.append(" ");
sb.append(beanClass.getSimpleName());
sb.append(" ");
sb.append("where id = ");
sb.append(id);
//执行sql
query(sb.toString());
close();
}
/**
* 保存 ORM
* */
public static <T> void save(T t) {
Class<? extends Object> tc = t.getClass();
//获得表名
String tableName = tc.getSimpleName();
//insert into 表名(列名,列名...) values(值,值,'值');
//获得所有属性
Field[] fields = tc.getDeclaredFields();
//(列名,列名,)
StringBuffer colNames = new StringBuffer();
colNames.append("(");
for(Field f :fields) {
colNames.append(f.getName());
colNames.append(",");
}
//去除最后多余的,号
colNames.delete(colNames.length()-1,
colNames.length());
colNames.append(")");
//拼接列的值 values(值,值,'值')
StringBuffer colValues = new StringBuffer();
colValues.append(" ");
colValues.append("values");
colValues.append("(");
//遍历所有属性,获得属性值
for(Field f :fields) {
//设置可见性
f.setAccessible(true);
//获得值
try {
Object value = f.get(t);
if(value.getClass().toString().contains("String")) {
colValues.append("'");
colValues.append(value);
colValues.append("'");
colValues.append(",");
}else if(value.getClass().toString().contains("Date")) {
java.util.Date d = (java.util.Date) value;
// values(1,'tom',to_date('','yyyy-mm-dd hh24:mi:ss'))
colValues.append("to_date('");
colValues.append(d.toLocaleString());
colValues.append("','yyyy-mm-dd hh24:mi:ss'),");
}else{
colValues.append(value);
colValues.append(",");
}
} catch (Exception e) {
e.printStackTrace();
}
}
colValues.delete(colValues.length()-1, colValues.length());
colValues.append(")");
String sql = "insert into "+tableName+colNames.toString()+colValues.toString();
//System.out.println(sql);
query(sql);
close();
}
/**
* 关闭资源
* */
public static void close() {
try {
if(rs!=null) {
rs.close();
}
if(stat!=null) {
stat.close();
}
if(conn!=null) {
conn.close();
}
}catch (Exception e) {
System.out.println("关闭资源异常");
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于servlet+jsp+jdbc的图书借阅管理系统.zip (68个子文件)
Graduation Design
BookSystem
.classpath 824B
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.jdt.core.prefs 357B
.jsdtscope 555B
org.eclipse.wst.common.component 474B
org.eclipse.wst.common.project.facet.core.xml 335B
org.eclipse.wst.jsdt.ui.superType.container 49B
src
com
booksystem
web
Delete.java 1KB
Check.java 1KB
Update.java 1KB
ShowBorrow.java 1KB
AllSave.java 2KB
ToAdmin.java 1KB
RepayBook.java 1KB
Pass.java 1KB
ToIndex.java 1KB
SaveOrUpdate.java 2KB
Borrow.java 1KB
Login.java 2KB
SearchBook.java 2KB
dao
DS.java 6KB
filter
LoginFilter.java 1KB
test
Test1.java 284B
util
SimplePage.java 4KB
bean
Book.java 355B
Person.java 264B
Bp.java 208B
build
classes
com
booksystem
web
SaveOrUpdate.class 4KB
Pass.class 2KB
ShowBorrow.class 3KB
ToAdmin.class 2KB
Login.class 3KB
Check.class 3KB
AllSave.class 3KB
SearchBook.class 3KB
Update.class 2KB
Borrow.class 3KB
Delete.class 2KB
ToIndex.class 2KB
RepayBook.class 2KB
dao
DS.class 7KB
filter
LoginFilter.class 2KB
test
Test1.class 452B
util
SimplePage.class 4KB
bean
Person.class 3KB
Bp.class 2KB
Book.class 4KB
WebContent
include
four.jsp 8KB
souBook.jsp 1KB
WEB-INF
lib
jstl-1.2.jar 405KB
ojdbc14.jar 1.48MB
lombok.jar 1.64MB
poi-3.8.jar 1.74MB
index.jsp 2KB
check.jsp 1KB
img
preview.jpg 112KB
qq_06.png 75KB
back.jpg 173KB
prompt.jpg 23KB
0.jpg 21KB
bg.png 424KB
qq.png 79KB
qq_02.png 4KB
adminIndex.jsp 3KB
borrow.jsp 2KB
META-INF
MANIFEST.MF 36B
login.jsp 3KB
.project 879B
共 68 条
- 1
资源评论
学术菜鸟小晨
- 粉丝: 1w+
- 资源: 4949
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JAVA实现Modbus RTU或Modbus TCPIP案例.zip
- 基于YOLOv8的FPS TPS AI自动锁定源码+使用步骤说明.zip
- JAVA实现Modbus RTU或Modbus TCPIP案例.zip
- 基于yolov8+streamlit的火灾检测部署源码+模型.zip
- 测试aaaaaaabbbbb
- VID20240521070643.mp4
- Android系统原理与开发学习要点详解-培训课件.zip
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功