package edu.njust.utils;
//import com.sun.istack.internal.Nullable;
import java.sql.*;
import java.util.*;
import java.util.regex.Pattern;
/**
* 数据库JDBC连接工具类
* Created by yuandl on 2016-12-16.
*/
public class DBUtil {
/**
* 执行数据库插入操作
*
* @param valueMap 插入数据表中key为列名和value为列对应的值的Map对象
* @param tableName 要插入的数据库的表名
* @return 影响的行数
* @throws SQLException SQL异常
*/
public static int insert(String tableName, Map<String, Object> valueMap) throws SQLException {
/**获取数据库插入的Map的键值对的值**/
Set<String> keySet = valueMap.keySet();
Iterator<String> iterator = keySet.iterator();
/**要插入的字段sql,其实就是用key拼起来的**/
StringBuilder columnSql = new StringBuilder();
/**要插入的字段值,其实就是?**/
StringBuilder unknownMarkSql = new StringBuilder();
Object[] bindArgs = new Object[valueMap.size()];
int i = 0;
while (iterator.hasNext()) {
String key = iterator.next();
columnSql.append(i == 0 ? "" : ",");
columnSql.append(key);
unknownMarkSql.append(i == 0 ? "" : ",");
unknownMarkSql.append("?");
bindArgs[i] = valueMap.get(key);
i++;
}
/**开始拼插入的sql语句**/
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO ");
sql.append(tableName);
sql.append(" (");
sql.append(columnSql);
sql.append(" ) VALUES (");
sql.append(unknownMarkSql);
sql.append(" )");
return executeUpdate(sql.toString(), bindArgs);
}
/**
* 执行数据库插入操作
*
* @param datas 插入数据表中key为列名和value为列对应的值的Map对象的List集合
* @param tableName 要插入的数据库的表名
* @return 影响的行数
* @throws SQLException SQL异常
*/
public static int insertAll(String tableName, List<Map<String, Object>> datas) throws SQLException {
/**影响的行数**/
int affectRowCount = -1;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
/**从数据库连接池中获取数据库连接**/
connection = DBConnectionPool.getInstance().getConnection();
Map<String, Object> valueMap = datas.get(0);
/**获取数据库插入的Map的键值对的值**/
Set<String> keySet = valueMap.keySet();
Iterator<String> iterator = keySet.iterator();
/**要插入的字段sql,其实就是用key拼起来的**/
StringBuilder columnSql = new StringBuilder();
/**要插入的字段值,其实就是?**/
StringBuilder unknownMarkSql = new StringBuilder();
Object[] keys = new Object[valueMap.size()];
int i = 0;
while (iterator.hasNext()) {
String key = iterator.next();
keys[i] = key;
columnSql.append(i == 0 ? "" : ",");
columnSql.append(key);
unknownMarkSql.append(i == 0 ? "" : ",");
unknownMarkSql.append("?");
i++;
}
/**开始拼插入的sql语句**/
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO ");
sql.append(tableName);
sql.append(" (");
sql.append(columnSql);
sql.append(" ) VALUES (");
sql.append(unknownMarkSql);
sql.append(" )");
/**执行SQL预编译**/
preparedStatement = connection.prepareStatement(sql.toString());
/**设置不自动提交,以便于在出现异常的时候数据库回滚**/
connection.setAutoCommit(false);
System.out.println(sql.toString());
for (int j = 0; j < datas.size(); j++) {
for (int k = 0; k < keys.length; k++) {
preparedStatement.setObject(k + 1, datas.get(j).get(keys[k]));
}
preparedStatement.addBatch();
}
int[] arr = preparedStatement.executeBatch();
connection.commit();
affectRowCount = arr.length;
System.out.println("成功了插入了" + affectRowCount + "行");
System.out.println();
} catch (Exception e) {
if (connection != null) {
connection.rollback();
}
e.printStackTrace();
throw e;
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
}
return affectRowCount;
}
/**
* 执行更新操作
*
* @param tableName 表名
* @param valueMap 要更改的值
* @param whereMap 条件
* @return 影响的行数
* @throws SQLException SQL异常
*/
public static int update(String tableName, Map<String, Object> valueMap, Map<String, Object> whereMap) throws SQLException {
/**获取数据库插入的Map的键值对的值**/
Set<String> keySet = valueMap.keySet();
Iterator<String> iterator = keySet.iterator();
/**开始拼插入的sql语句**/
StringBuilder sql = new StringBuilder();
sql.append("UPDATE ");
sql.append(tableName);
sql.append(" SET ");
/**要更改的的字段sql,其实就是用key拼起来的**/
StringBuilder columnSql = new StringBuilder();
int i = 0;
List<Object> objects = new ArrayList<>();
while (iterator.hasNext()) {
String key = iterator.next();
columnSql.append(i == 0 ? "" : ",");
columnSql.append(key + " = ? ");
objects.add(valueMap.get(key));
i++;
}
sql.append(columnSql);
/**更新的条件:要更改的的字段sql,其实就是用key拼起来的**/
StringBuilder whereSql = new StringBuilder();
int j = 0;
if (whereMap != null && whereMap.size() > 0) {
whereSql.append(" WHERE ");
iterator = whereMap.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
whereSql.append(j == 0 ? "" : " AND ");
whereSql.append(key + " = ? ");
objects.add(whereMap.get(key));
j++;
}
sql.append(whereSql);
}
return executeUpdate(sql.toString(), objects.toArray());
}
/**
* 执行删除操作
*
* @param tableName 要删除的表名
* @param whereMap 删除的条件
* @return 影响的行数
* @throws SQLException SQL执行异常
*/
public static int delete(String tableName, Map<String, Object> whereMap) throws SQLException {
/**准备删除的sql语句**/
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM ");
sql.append(tableName);
/**更新的条件:要更改的的字段sql,其实就是用key拼起来的**/
StringBuilder whereSql = new StringBuilder();
Object[] bindArgs = null;
if (whereMap != null && whereMap.size() > 0) {
bindArgs = new Object[whereMap.size()];
whereSql.append(" WHERE ");
/**获取数据库插入的Map的键值对的值**/
Set<String> keySet = whereMap.keySet();
Iterator<String> iterator = keySet.iterator();
int i = 0;
while (iterator.hasNext()) {
String key = iterator.next();
whereSql.append(i == 0 ? "" : " AND ");
whereSql.append(key + " = ? ");
bindArgs[i] = whereMap.get(key);
i++;
}
sql.append(whereSql);
}
ret
没有合适的资源?快使用搜索试试~ 我知道了~
J2EE课程结课作业
共45个文件
png:8个
class:7个
java:7个
需积分: 16 9 下载量 201 浏览量
2020-09-09
15:48:16
上传
评论 1
收藏 2.61MB RAR 举报
温馨提示
期末编程考试 2020年 J2EE上机考试题 采用MVC设计模式开发名为“User_学号”的web应用程序(注意这里务必用本人的学号代入),实现用户信息管理。 功能要求的1,2,3,4必须按照顺序实现【必做题,50分】; 5,6 可以按照自己设定的顺序实现【附加题,15分,不做不得分】,任何jsp页面均不出现数据库访问代码,需要的辅助类可以自行添加。总分:50分。 考试时间要求:3.5个小时完成。 请考生仔细试题的功能要求、产物要求和扣分项,共2页纸。 具体需要实现的功能要求如下: 1) [创建数据库] (5分) a) 在Mysql中创建数据库,命名为“EXAM-学号”(注意这里务必用本人的学
资源推荐
资源详情
资源评论
收起资源包目录
APK_918106840742.rar (45个子文件)
User_918106840742
.project 1KB
.settings
org.eclipse.wst.common.project.facet.core.prefs.xml 750B
.jsdtscope 522B
org.eclipse.wst.common.component 510B
org.eclipse.jdt.core.prefs 364B
com.genuitec.runtime.libraries.xml 341B
org.eclipse.wst.common.project.facet.core.xml 509B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.jsdt.ui.superType.name 6B
WebRoot
login.jsp 1KB
WEB-INF
web.xml 2KB
lib
c3p0-0.9.1.jar 594KB
mysql-connector-java-5.1.8-bin.jar 707KB
classes
edu
njust
utils
DBUtil.class 14KB
DBConnectionPool.class 3KB
dao
UserDao.class 5KB
controller
UserController.class 3KB
ShowUserController.class 1009B
service
UserService.class 2KB
entity
UserBean.class 1KB
db.properties 135B
META-INF
MANIFEST.MF 39B
failure.jsp 1KB
adduser.jsp 1KB
showmessage.jsp 2KB
src
edu
njust
utils
DBConnectionPool.java 5KB
DBUtil.java 21KB
dao
UserDao.java 5KB
controller
UserController.java 3KB
ShowUserController.java 4KB
service
UserService.java 1KB
entity
UserBean.java 624B
db.properties 135B
.classpath 803B
截图演示
登陆界面.png 15KB
数据库截图.png 71KB
密码错误演示.png 14KB
新增界面显示.png 28KB
用户信息展示.png 28KB
新增用户界面.png 24KB
用户名不存在演示.png 14KB
删除操作后截图.png 26KB
APK_918106840742.war 1.21MB
exam_918106840742
usr.frm 8KB
db.opt 65B
共 45 条
- 1
资源评论
giant潘潘潘潘潘潘潘潘潘潘潘潘潘
- 粉丝: 38
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功