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();
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
八、 采用MVC设计模式开发一个web应用程序,项目名称为学号,要求资源文件命名规范,组织有序,通过截图方式给出程序验证结果,并提交压缩的工程文件。具体要求如下:[第八周] 1) 将第7周作业实现的版本SeventhHomework(见群文件)进行改写,具体改写要求如下: a) 采用DBUtil实现对于数据库读写操作的改写,可参考AdvancedJDBCApp(见群文件); b) 实现分页功能的jsp页面manageCourseByPage.jsp,相应的Dao、Service、Control都需要改写,并且增加一个entity类CoursePage用于封装control与jsp之间数据传递。
资源推荐
资源详情
资源评论
收起资源包目录
EighthHomework.rar (74个子文件)
EighthHomework
src
db.properties 100B
edu
njust
entity
CoursePage.java 1KB
Course.java 1KB
Login.java 482B
dao
ILoginDao.java 133B
LoginDaoImpl.java 1KB
ICourseDao.java 520B
CourseDaoImpl.java 6KB
controller
AddCourseController.java 5KB
LoginController.java 2KB
DeleteCourseController.java 4KB
ShowCourseByPageController.java 3KB
ModifyCourseController.java 5KB
utils
CalendarUtil.java 2KB
DBConnectionPool.java 5KB
DBUtil.java 21KB
DBTest.java 4KB
service
CourseService.java 1KB
LoginService.java 427B
.classpath 803B
.settings
com.genuitec.eclipse.j2eedt.core.prefs 1009B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 361B
org.eclipse.core.resources.prefs 129B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.component 502B
.jsdtscope 522B
org.eclipse.jdt.core.prefs 364B
org.eclipse.ltk.core.refactoring.prefs 106B
.myeclipse
profiler
CourseDao (2).xml 1KB
.project 1KB
WebRoot
META-INF
MANIFEST.MF 39B
addCourse.jsp 3KB
img.jsp 2KB
loginFailure.jsp 1KB
failure.jsp 1KB
js
My97DatePicker
lang
zh-cn.js 1KB
en.js 631B
zh-tw.js 1KB
calendar.js 21KB
skin
WdatePicker.css 149B
default
img.gif 2KB
datepicker.css 3KB
datePicker.gif 1KB
whyGreen
img.gif 2KB
datepicker.css 4KB
bg.jpg 307B
WdatePicker.js 8KB
date.js 8KB
manageCourseByPage.jsp 4KB
modifyCourse.jsp 3KB
css
login.jsp 5KB
WEB-INF
classes
db.properties 100B
edu
njust
entity
Course.class 2KB
CoursePage.class 2KB
Login.class 848B
dao
ICourseDao.class 549B
CourseDaoImpl.class 7KB
ILoginDao.class 164B
LoginDaoImpl.class 2KB
controller
ShowCourseByPageController.class 3KB
DeleteCourseController.class 4KB
ModifyCourseController.class 4KB
AddCourseController.class 5KB
LoginController.class 2KB
utils
DBUtil.class 14KB
DBConnectionPool.class 3KB
DBTest.class 4KB
CalendarUtil.class 2KB
service
LoginService.class 695B
CourseService.class 2KB
lib
c3p0-0.9.1.jar 594KB
mysql-connector-java-5.1.8-bin.jar 707KB
web.xml 3KB
共 74 条
- 1
资源评论
giant潘潘潘潘潘潘潘潘潘潘潘潘潘
- 粉丝: 44
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功