package com.kfm.util;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
public class DBUtil<T> {
public static Object queryOne;
private static String url;
private static String user;
private static String password;
private Connection conn;
private PreparedStatement ps;
static{
InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
Properties prop = new Properties();
try {
prop.load(inputStream);
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
Class.forName(prop.getProperty("driver"));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection(){
if (conn == null){
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
public ResultSet query(String sql, Object...params) throws SQLException {
getConnection();
if (sql != null){
ps = conn.prepareStatement(sql);
setParams(params);
System.out.println(ps);
return ps.executeQuery();
}
return null;
}
public T queryOne(String sql, Class<T> cla, Object...params) throws SQLException {
ResultSet query = query(sql, params);
if (query != null && query.next()){
return mapper(query, cla);
}
return null;
// List<T> ts = queryList(sql, cla, params);
// return ts.size() > 0? ts.get(0) : null;
}
public List<T> queryList(String sql, Class<T> cla, Object...params) throws SQLException {
ResultSet query = query(sql, params);
List<T> list = new ArrayList<>();
while(query != null && query.next()){
T mapper = mapper(query, cla);
list.add(mapper);
}
return list;
}
private T mapper(ResultSet resultSet, Class<T> cla){
try {
Constructor<T> declaredConstructor = cla.getDeclaredConstructor();
T t = declaredConstructor.newInstance();
ResultSetMetaData metaData = resultSet.getMetaData();
// 迭代结果集中的所有列
for (int i = 1; i <= metaData.getColumnCount(); i ++){
// 获取当前的 列名
String columnLabel = metaData.getColumnLabel(i);
Object value = resultSet.getObject(columnLabel);
try {
// 数据库字段 --> java 字段
if (columnLabel.contains("_")){
// create_account => createAccount
columnLabel = toCamel(columnLabel);
}
// 获取列名在 class 中对应的 属性
PropertyDescriptor pd = new PropertyDescriptor(columnLabel, cla);
// 获取 setter 方法
Method writeMethod = pd.getWriteMethod();
// 设置值
writeMethod.invoke(t, value);
} catch (Exception e){
e.printStackTrace();
System.err.println(columnLabel + " 属性设置值失败");
}
}
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private String toCamel(String label){
// create_account => create, account
String[] s = label.split("_");
// 结果
StringBuffer sb = new StringBuffer(s[0]);
for (int i = 1; i < s.length; i++) {
// 单词
sb.append(s[i].substring(0, 1).toUpperCase() + s[i].substring(1));
}
return sb.toString();
}
public int update(String sql, Object...params) throws SQLException {
getConnection();
ps = conn.prepareStatement(sql);
setParams(params);
System.out.println(ps);
return ps.executeUpdate();
}
public int save(String sql, boolean isReturnKey, Object...params) throws SQLException {
getConnection();
ps = conn.prepareStatement(sql, isReturnKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
setParams(params);
System.out.println(ps);
int row = ps.executeUpdate();
if (isReturnKey){
// 获取自增主键
ResultSet generatedKeys = ps.getGeneratedKeys();
if (generatedKeys.next()){
return generatedKeys.getInt(1);
}
}
return row;
}
private void setParams(Object...params) throws SQLException {
// 设置值
for (int i = 0; i < params.length; i ++){
ps.setObject(i + 1, params[i]);
}
}
public void close(){
try {
if (ps != null){
ps.close();
}
if (conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String str = "hello_world_abc_efg";
String[] s = str.split("_");
// 结果
StringBuffer sb = new StringBuffer(s[0]);
for (int i = 1; i < s.length; i++) {
// 单词
sb.append(s[i].substring(0, 1).toUpperCase() + s[i].substring(1));
}
System.out.println(sb.toString());
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于java的学生信息管理系统.zip
共78个文件
java:36个
jsp:8个
css:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 133 浏览量
2023-01-10
11:40:53
上传
评论
收藏 641KB ZIP 举报
温馨提示
基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java的学生信息管理系统.zip基于java
资源推荐
资源详情
资源评论
收起资源包目录
基于java的学生信息管理系统.zip (78个子文件)
edu-student-master
sql
student.sql 589B
pom.xml 4KB
src
test
java
com
kfm
mapper
IClassesMapperTest.java 1KB
dao
UserDaoTest.java 1KB
MainTest.java 241B
StudentDaoTest.java 2KB
service
StudentServiceTest.java 574B
main
resources
db.properties 111B
mybatis-config.xml 1KB
log4j.properties 660B
config.properties 118B
com
kfm
mapper
IStudentMapper.xml 3KB
IClassesMapper.xml 324B
IUserMapper.xml 3KB
java
com
kfm
mapper
IClassesMapper.java 149B
IUserMapper.java 428B
IStudentMapper.java 492B
servlet
StudentServlet.java 5KB
LogoutServlet.java 632B
CaptchaServlet.java 559B
IndexServlet.java 571B
DeleteStudentServlet.java 1KB
UserEditServlet.java 3KB
LoginServlet.java 2KB
PageServlet.java 601B
FileServlet.java 850B
dao
UserDao.java 4KB
StudentDao.java 4KB
ClassesDao.java 379B
factory
BeanFactory.java 414B
service
UserService.java 1KB
StudentService.java 2KB
ClassesService.java 340B
IStudentService.java 407B
filter
CharsetEncodingFilter.java 810B
LoginFilter.java 3KB
entity
StudentDTO.java 500B
Classes.java 404B
Student.java 658B
User.java 2KB
util
UUIDUtil.java 177B
Contains.java 234B
DBUtil.java 6KB
Page.java 2KB
MD5Util.java 1001B
webapp
WEB-INF
user.jsp 1KB
pass.jsp 160B
index.jsp 2KB
welcome.jsp 171B
info.jsp 3KB
student
index.jsp 1KB
add.jsp 1KB
index.jsp 917B
four.jpg 40KB
static
img
six.jpg 136KB
th.jpg 17KB
four.jpg 40KB
bootstrap-3.4.1-dist
js
bootstrap.js 74KB
npm.js 484B
bootstrap.min.js 39KB
css
bootstrap-theme.min.css.map 74KB
bootstrap.min.css 119KB
bootstrap-theme.css.map 47KB
bootstrap-theme.css 25KB
bootstrap.css.map 382KB
bootstrap.css 143KB
bootstrap-theme.min.css 23KB
bootstrap.min.css.map 528KB
fonts
glyphicons-halflings-regular.svg 106KB
glyphicons-halflings-regular.ttf 44KB
glyphicons-halflings-regular.woff 23KB
glyphicons-halflings-regular.eot 20KB
glyphicons-halflings-regular.woff2 18KB
css
index1.css 1KB
base.css 53B
index.css 572B
http
login.http 130B
.gitignore 68B
共 78 条
- 1
资源评论
甜辣uu
- 粉丝: 9185
- 资源: 1103
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 电力系统分析设计仿真 基于遗传算法的最优潮流 图为以IEEE30节点的输电网为研究对象 以系统发电成本最小为目标函数 以机组出
- KSZ2008 SAS code 自用分享
- MATLAB代码:储能参与调峰调频联合优化模型 关键词:储能 调频 调峰 充放电优化 联合运行 仿真平台:MATLAB+CV
- 基于yolov8的肉鸡健康状态检测系统python源码+onnx模型+评估指标曲线+精美GUI界面.zip
- Cadence 两级放大电路,包括版图,已通过lvs ,drc检查 Cadence两级放大电路已经完成版图设计,并且已经通过了
- 蓄电池与超级电容混合储能并网matlab simulink仿真模型,混合储能采用低通滤波器进行功率分配,可有效抑制功率波动,并对
- 锂电池等效电路模型二阶RC模型二阶戴维南模型
- 欧姆龙 PLC CP1E 与电子称重仪表“柯力XK3101”Modbus RTU通信,稍微更改下Modbus通信地址可以跟其他M
- 汇川H5U走EtherCat控制伺服带HMI程序,轴控制和气缸控制有做功能块,通俗易懂,是学习汇川总线的好帮手
- 51单片机Proteus仿真LCD1602+DS18B20的温度读取显示编程.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功