連接mysql數據庫的操作 有增刪改查
用的包有
commons-lang3-3.5
mysql-connector-java-5.1.40-bin
但是實際上也就是
數據查詢和數據處理兩種
所以對數據庫的操作DAO只有兩種方法
package com.javaweb.dao;
import java.lang.reflect.Field;
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.Date;
import java.util.List;
import com.javaweb.utils.StringUtlis;
import com.javaweb.utils.DBUtlis;
import com.javaweb.utils.DateUtlis;
/*
* 數據庫操作類
* */
public class DBDao<T> {
public <T> List<T> findAll(String sql,Class<T> clazz,List<Object> params)throws Exception{
List<T> list = new ArrayList<T>();
Connection conn=DBUtlis.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
Field field=null;
int index=1;
try {
pstmt = conn.prepareStatement(sql);
if(params != null && !params.isEmpty()){
for(int i=0; i<params.size(); i++){
pstmt.setObject(index++, params.get(i));
}
}
rs = pstmt.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int colsCount= metaData.getColumnCount();
while(rs.next()){
T obj=clazz.newInstance();
for(int i = 0; i<colsCount; i++){
String colsName = metaData.getColumnName(i+1);
Object colsValue = rs.getObject(colsName);
if(colsValue == null){
colsValue = "";
}
try{
field=clazz.getDeclaredField(StringUtlis.camelName(colsName));
}catch(NoSuchFieldException e){
Class clazz1=clazz.getSuperclass();
try{
field=clazz1.getDeclaredField(StringUtlis.camelName(colsName));
}catch(NoSuchFieldException n){
}
}
if(field!=null){
field.setAccessible(true);
if(colsValue instanceof java.sql.Date){
field.set(obj, DateUtlis.getStrDate((Date)colsValue));
}else{
field.set(obj, colsValue);
}
}
}
list.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}finally{
DBUtlis.close(conn, pstmt, rs);
}
return list;
}
public int execute(String sql, List<Object> params) {
// TODO Auto-generated method stub
int result = 0;
Connection conn = null;
PreparedStatement ps = null;
int index=1;
try {
conn = DBUtlis.getConnection();
ps = conn.prepareStatement(sql);
if(params != null && !params.isEmpty()){
for(int i=0; i<params.size(); i++){
ps.setObject(index++, params.get(i));
}
}
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
result = -1;
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtlis.close(conn, ps, null);
}
return result;
}
}
補:後來我才發現這玩意應該有高手寫到jar包裡面的.....
其實裡面的意思也不是數據查詢和數據操作
而是得到一個結果和多個結果的區別
對數據的Dao的處理
package com.javaweb.dao;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.javaweb.dao.DBDao;
import com.javaweb.bean.User;
public class UserDao {
private DBDao dao=new DBDao();
public List<User> findAll(){
List<User> list=new ArrayList<User>();
StringBuffer sql=new StringBuffer();
sql.append(" select id,username,password ");
sql.append(" from user ");
try {
list=dao.findAll(sql.toString(), User.class, null);
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public int add(User User) {
// TODO Auto-generated method stub
if(User==null){
return 0;
}
StringBuffer sql=new StringBuffer();
sql.append(" insert into user(id,username,password) ");
sql.append(" values(?,?,?) ");
List<Object> params =new ArrayList<Object>();
params.add(User.getId());
params.add(User.getUsername());
params.add(User.getPassword());
return dao.execute(sql.toString(), params);
}
public int delete(User user) {
// TODO Auto-generated method stub
if(user==null){
return 0;
}
StringBuffer sql=new StringBuffer();
sql.append(" delete from user where id=?");
List<Object> params =new ArrayList<Object>();
params.add(user.getId());
return dao.execute(sql.toString(), params);
}
public int update(User user) {
// TODO Auto-generated method stub
if(user==null){
return 0;
}
List<Object> params =new ArrayList<Object>();
StringBuffer sql=new StringBuffer();
sql.append(" update user set ");
if(StringUtils.isNoneBlank(user.getUsername())){
sql.append(" username= ?, ");
params.add(user.getUsername());
}
if(StringUtils.isNoneBlank(user.getPassword())){
sql.append(" password= ?,");
params.add(user.getPassword());
}
String strSql=sql.toString().substring(0, sql.toString().length()-1)+" where id=? ";
params.add(user.getId());
return dao.execute(strSql, params);
}
}
User類
package com.javaweb.bean;
public class User {
private String id;
private String username;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
servlet
package com.javaweb.action;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import com.javaweb.bean.User;
import com.javaweb.dao.UserDao;
public class ServletSql extends HttpServlet{
/**
* 用於版本控制
*/
private static final long serialVersionUID = -2357925750878300415L;
private UserDao dao=new UserDao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//純碎是用來判斷有沒有錯誤
req.setCharacterEncoding("UTF-8");
String op=req.getParameter("op");
if(StringUtils.isNotBlank(op)){
if("queryAll".equalsIgnoreCase(op)){
queryAll(req, resp);
}else if("add".equalsIgnoreCase(op)){
add(req, resp);
}else if("delete".equalsIgnoreCase(op)){
delete(req, resp);
}else if("update".equalsIgnoreCase(op)){
update(req, resp);
}else{
}
}
}
private void update(HttpServletRequest req, HttpServletResponse resp) {
// TODO Auto-generated method stub
User user;
try {
user = init(req,resp);
user.setId(req.getParameter("id"));
int rows=dao.update(user);
if(rows>0){
queryAll(req, resp);
}
} catch (ServletException|IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void delete(HttpServletRequest req, HttpServletResponse resp) {
// TODO Auto-generated method stub
User user=new User();
String id=req.getParameter("id");
user.setId(id);
int rows=dao.delete(user);
if(rows>0){
try {
queryAll(req, resp);
} catch (ServletException|IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public User init(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User user=new User();
String id=req.getParameter("id");
// user.setId(Integer.parseInt(id));
user.setId(id);
String name=req.getParameter("name");
user.setUsername(name);
String password=req.getParameter("password");
// user.setPassword(Integer.parseInt(password));
user.setPassword(password);
return user;
}
public void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
User User=init(req,resp);
int rows=dao.add(User);
if(rows>0){
queryAll(req, resp);
}else{
resp.sendRedirect("index.jsp");
}
}
public void queryAll(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<User> list=dao.findAll();
req.setAttribute("list", list);
req.getRequestDispatcher("/queryAll.jsp").forward(req, resp);
// resp.sendRedirect("queryAll.jsp");
}
}
有幾個方法後接throws ServletException, IOException應該會更加的整潔
.properties文件
#\u6570\u636e\u8fde\u63a5\u914d\u7f6e db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/javaweb db.userName=root db.password=123456789
DateUtils
package com.javaweb.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtlis {
/**
* 獲取當前日期
* @return
*/
public static String getCurrentTime() {
String returnStr = null;
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
returnStr = f.format(date);
return returnStr;
}
public static Date getDate(String strDate){
Date date=null;
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
try {
date = f.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static String getStrDate(Date date){
String strDate=null;
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
strDate = f.format(date);
return strDate;
}
}
DButils
package com.javaweb.utils;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 數據庫連接類
* @author SUMMER
*
*/
public class DBUtlis {
private static String driver;
private static String url;
private static String userName;
private static String password;
static{
driver=PropertiesUtil.getProperty("db.driver");
url=PropertiesUtil.getProperty("db.url");
userName=PropertiesUtil.getProperty("db.userName");
password=PropertiesUtil.getProperty("db.password");
}
/**
* 創建數據庫連接
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = java.sql.DriverManager.getConnection(url,userName, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn, PreparedStatement psm,ResultSet rs) {
close(rs);
close(psm);
close(conn);
}
public static void close(Connection conn, Statement st,ResultSet rs) {
close(rs);
close(st);
close(conn);
}
public static void close(Connection conn, PreparedStatement psm) {
close(psm);
close(conn);
}
public static void close(Connection conn) {
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs) {
if (null != rs) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(PreparedStatement psm) {
if (null != psm) {
try {
psm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(CallableStatement proc) {
if (null != proc) {
try {
proc.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* @param st
*/
public static void close(Statement st) {
if (null != st) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* @param conn
*/
public static void rollback(Connection conn) {
if(conn != null) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
/**
* @param conn
* @param auto
*/
public static void setAutoCommit(Connection conn, boolean auto) {
if(conn != null) {
try {
conn.setAutoCommit(auto);
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
public static void main(String[] args) {
DBUtlis.getConnection();
}
}
propertiesUtils
package com.javaweb.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 讀取properties文件
* @author SUMMER
*
*/
public class PropertiesUtil {
private static Properties prop;
/**
* 加載.properties文件,使用文件流
*/
private static void init() {
prop = new Properties();
InputStream is=PropertiesUtil.class.getResourceAsStream("/config/db.properties");
try {
prop.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 獲取value
* @param key
* @return
*/
public static String getProperty(String key) {
if (prop == null ) {
init();
}
return prop.get(key).toString();
}
public static void main(String[] args) {
System.out.println(getProperty("db.driver"));
}
}
StringUtils
package com.javaweb.utils;
import java.util.UUID;
/**
* 字符串處理工具類
*
*/
public class StringUtlis {
/**
* 獲取唯一ID
* @return
*/
public static String getUUID() {
UUID uuid = UUID.randomUUID();
String str = uuid.toString();
return str.replace("-", "");
}
/**
* 將駝峰式命名的字符串轉換為下劃線大寫方式。如果轉換前的駝峰式命名的字符串為空,則返回空字符串。</br>
* 例如:HelloWorld->HELLO_WORLD
* @param name 轉換前的駝峰式命名的字符串
* @return 轉換後下劃線大寫方式命名的字符串
*/
public static String underscoreName(String name) {
StringBuilder result = new StringBuilder();
if (name != null && name.length() > 0) {
// 將第一個字符處理成大寫
result.append(name.substring(0, 1).toUpperCase());
// 循環處理其余字符
for (int i = 1; i < name.length(); i++) {
String s = name.substring(i, i + 1);
// 在大寫字母前添加下劃線
if (s.equals(s.toUpperCase()) && !Character.isDigit(s.charAt(0))) {
result.append("_");
}
// 其他字符直接轉成大寫
result.append(s.toUpperCase());
}
}
return result.toString();
}
/**
* 將下劃線大寫方式命名的字符串轉換為駝峰式。如果轉換前的下劃線大寫方式命名的字符串為空,則返回空字符串。</br>
* 例如:HELLO_WORLD->HelloWorld
* @param name 轉換前的下劃線大寫方式命名的字符串
* @return 轉換後的駝峰式命名的字符串
*/
public static String camelName(String name) {
StringBuilder result = new StringBuilder();
// 快速檢查
if (name == null || name.isEmpty()) {
// 沒必要轉換
return "";
} else if (!name.contains("_")) {
// 不含下劃線,僅將首字母小寫
return name.substring(0, 1).toLowerCase() + name.substring(1);
}
// 用下劃線將原始字符串分割
String camels[] = name.split("_");
for (String camel : camels) {
// 跳過原始字符串中開頭、結尾的下換線或雙重下劃線
if (camel.isEmpty()) {
continue;
}
// 處理真正的駝峰片段
if (result.length() == 0) {
// 第一個駝峰片段,全部字母都小寫
result.append(camel.toLowerCase());
} else {
// 其他的駝峰片段,首字母大寫
result.append(camel.substring(0, 1).toUpperCase());
result.append(camel.substring(1).toLowerCase());
}
}
return result.toString();
}
public static void main(String[] args) {
System.out.println(getUUID());
}
}
utils就是工具類了
拿來就用,大多數情況下都有很多高手寫jar包含他們
但是我沒用那些jar直接上網找的
要求分門別類寫,是個好習慣
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();// 獲得當前的項目根目錄路徑
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
//完整路徑
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>這是首頁</title>
</head>
<body>
<table border=0 cellpadding=0 cellspacing=0 ><%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();// 獲得當前的項目根目錄路徑
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
//完整路徑
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="<%=basePath%>/servletSql?op=add" method="post">
<table align="center" border="1">
<tr>
<th colspan="3">
<label>添加信息</label>
</th>
</tr>
<tr>
<td>Id</td>
<td>
<input type="text" name="id" >
</td>
</tr>
<tr>
<td>用戶名</td>
<td>
<input type="text" name="name" >
</td>
</tr>
<tr>
<td>密碼</td>
<td>
<input type="text" name="password" >
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="保存">
<input type="reset" value="清空">
</td>
</tr>
</table>
</form>
</body>
</html>
delete
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();// 獲得當前的項目根目錄路徑
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
//完整路徑
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="<%=basePath%>/servletSql?op=delete" method="post">
<table align="center" border="1">
<tr>
<th colspan="3">
<label>刪除信息</label>
</th>
</tr>
<tr>
<td>Id</td>
<td>
<input type="text" name="id" >
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="保存">
<input type="reset" value="清空">
</td>
</tr>
</table>
</form>
</body>
</html>
queryAll
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();// 獲得當前的項目根目錄路徑
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
//完整路徑
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="<%=basePath%>/servletSql?op=delete" method="post">
<table align="center" border="1">
<tr>
<th colspan="3">
<label>刪除信息</label>
</th>
</tr>
<tr>
<td>Id</td>
<td>
<input type="text" name="id" >
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="保存">
<input type="reset" value="清空">
</td>
</tr>
</table>
</form>
</body>
</html>
update
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();// 獲得當前的項目根目錄路徑
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
//完整路徑
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="<%=basePath%>/servletSql?op=update" method="post">
<table align="center" border="1">
<tr>
<th colspan="3">
<label>修改信息</label>
</th>
</tr>
<tr>
<td>Id</td>
<td>
<input type="text" name="id" >
</td>
</tr>
<tr>
<td>用戶名</td>
<td>
<input type="text" name="name" >
</td>
</tr>
<tr>
<td>密碼</td>
<td>
<input type="text" name="password" >
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="保存">
<input type="reset" value="清空">
</td>
</tr>
</table>
</form>
</body>
</html>