工具:Eclipse,Oracle,smartupload.jar。语言:jsp,Java;数据存储:Oracle。

实现功能介绍:

主要是新建相冊,能够建多个相冊,在相冊中加入多张照片,删除照片,删除相冊,当相冊下有照片时先删除照片才干删除相冊。

由于每一个相冊和照片要有所属人。所以顺带有登录功能。

声明:仅仅是后端实现代码,前台无不论什么样式,代码測试可行,仅供參考。

代码:

数据库连接帮助类:

public class JDBCHelper {
public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
public static final String URL = "jdbc:oracle:thin:@localhost:1521:xxxx";
public static final String DBNAME = "scott";
public static final String PASSWORD = "xxxx";
public static Connection getConn() throws Exception{
Class.forName(DRIVER);
Connection conn = DriverManager.getConnection(URL, DBNAME, PASSWORD);
return conn;
}
}

图片上传时,要改动图片名称,防止上传重名图片将上一张覆盖,这里的做法是将图片名改为由用户ID和精确到毫秒的时间组成。改动图片名的帮助类:

public class PhotoName {
private String ip; public PhotoName(String ip) {
super();
this.ip = ip;
} public String getIp() {
return ip;
} public void setIp(String ip) {
this.ip = ip;
}
public String getTime(){
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
return df.format(date);
}
public String getPhotoName(){
return this.ip + this.getTime();
} }

实现全部这些的接口类:

public interface UpDAO {
/**
* 创建相冊名称
*
*/
public int creAlbum(AlbumPOJO ap);
/**
*显示所创建的全部相冊名称
*/
public List<AlbumPOJO> findAllAlbum(int id);
public List<PhotoPOJO> findAllPhoto(int id);
/**
* 上传照片
*/
public int upPhoto(PhotoPOJO pp);
/**
* 删除相冊
* @param id 相冊id
* @return
*/
public int delAlbum(int id);
/**
* 删除照片
* @param id 照片id
* @return
*/
public int delPhoto(int id);
/**
* 登录
* @param username
* @param password
* @return
*/
public UserPOJO login(String username,String password);
}

接口的详细实现类:

public class UpDAOImpl implements UpDAO {

	/* (non-Javadoc)
* @see cn.jvsun.DAO.UpDAO#creAlbum(cn.jvsun.POJO.AlbumPOJO)
* 创建相冊名称
*/
public int creAlbum(AlbumPOJO ap) {
int albumNum=this.getAlbumNum();
Connection conn = null;
PreparedStatement pstate = null;
try {
conn=JDBCHelper.getConn();
conn.setAutoCommit(false);
String sql="insert into album(id,a_name,user_id)values(?,? ,?)";
pstate = conn.prepareStatement(sql);
pstate.setInt(1, albumNum);
pstate.setString(2,ap.getA_name());
pstate.setInt(3, ap.getUser_id());
pstate.execute();
conn.commit(); } catch (Exception e) {
e.printStackTrace();
try {
conn.rollback();//出问题就撤回,全不提交
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
try {
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return albumNum;
} /* (non-Javadoc)
* @see cn.jvsun.DAO.UpDAO#upPhoto(java.lang.String, java.lang.String, int)
* 上传照片
*/
public int upPhoto(PhotoPOJO pp) {
int pNum=this.getPhotoNum();
Connection conn = null;
PreparedStatement pstate = null;
try {
conn=JDBCHelper.getConn();
conn.setAutoCommit(false);
String sql="insert into photo(id,p_name,p_url,p_albumid)values(?,?,?,?)";
pstate = conn.prepareStatement(sql);
pstate.setInt(1, pNum);
pstate.setString(2,pp.getP_name());
pstate.setString(3, pp.getP_url());
pstate.setInt(4, pp.getP_albumId());
pstate.execute();
conn.commit(); } catch (Exception e) {
e.printStackTrace();
try {
conn.rollback();//出问题就撤回,全不提交
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
try {
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return pNum;
} /* (non-Javadoc)
* @see cn.jvsun.DAO.UpDAO#delAlbum(int)
* 删除相冊
*/
public int delAlbum(int id) {
int result=0;
Connection conn = null;
PreparedStatement pstate = null;
String sql="delete from album where id="+id+"";
try {
conn=JDBCHelper.getConn();
pstate = conn.prepareStatement(sql);
result=pstate.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
pstate.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result; } /* (non-Javadoc)
* @see cn.jvsun.DAO.UpDAO#delPhoto(int)
* 删除照片
*/
public int delPhoto(int id) {
int result=0;
Connection conn = null;
PreparedStatement pstate = null;
String sql="delete from photo where id="+id+"";
try {
conn=JDBCHelper.getConn();
pstate = conn.prepareStatement(sql);
result=pstate.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
pstate.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return result;
}
/* (non-Javadoc)
* @see cn.jvsun.DAO.UpDAO#login(java.lang.String, java.lang.String)
* 用户登录
*/
public UserPOJO login(String username, String password) {
UserPOJO user=null;
Connection conn = null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
conn=JDBCHelper.getConn();
String sql="select id,username from userinfo where username=? and password=?";
pstate = conn.prepareStatement(sql);
pstate.setString(1, username);
pstate.setString(2, password);
res = pstate.executeQuery();
while(res.next()){
user=new UserPOJO(res.getInt(1),username,null);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
res.close();
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} }
return user;
}
/**
* 相冊序列号
*/
public int getAlbumNum(){
int albumNum=-1;
Connection conn = null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
conn=JDBCHelper.getConn();
String sql="select aid.nextval from dual";
pstate=conn.prepareStatement(sql);
res=pstate.executeQuery();
while(res.next()){
albumNum=res.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
res.close();
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return albumNum;
}
/**
*照片序列号
*/
public int getPhotoNum(){
int photoNum=-1;
Connection conn = null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
conn=JDBCHelper.getConn();
String sql="select pid.nextval from dual";
pstate=conn.prepareStatement(sql);
res=pstate.executeQuery();
while(res.next()){
photoNum=res.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
res.close();
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return photoNum;
} /* (non-Javadoc)
* @see cn.jvsun.DAO.UpDAO#findAll()
* 显示所创建的相冊名
*/
public List<AlbumPOJO> findAllAlbum(int id) {
List<AlbumPOJO> list= new ArrayList<AlbumPOJO>();
Connection conn = null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
conn=JDBCHelper.getConn();
String sql="select id,a_name,user_id from album where user_id=?";
pstate = conn.prepareStatement(sql);
pstate.setInt(1, id);
res = pstate.executeQuery();
while(res.next()){
AlbumPOJO ap=new AlbumPOJO(res.getInt(1),res.getString(2),res.getInt(3));
list.add(ap);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
res.close();
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} }
return list;
} /* (non-Javadoc)
* @see cn.jvsun.DAO.UpDAO#findAllPhoto(int)
* 显示照片
*/
public List<PhotoPOJO> findAllPhoto(int aid) {
List<PhotoPOJO> list= new ArrayList<PhotoPOJO>();
Connection conn = null;
PreparedStatement pstate = null;
ResultSet res = null;
try {
conn=JDBCHelper.getConn();
String sql="select id,p_name,p_url from photo where P_ALBUMID=?";
pstate = conn.prepareStatement(sql);
pstate.setInt(1, aid);
res = pstate.executeQuery();
while(res.next()){
PhotoPOJO pojo=new PhotoPOJO(res.getInt(1),res.getString(2),res.getString(3), aid);
list.add(pojo);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
res.close();
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} }
return list;
} }

用户。相冊。照片三个POJO类:

/**
* 用户实体类
*
*/
public class UserPOJO implements Serializable{
private static final long serialVersionUID = 7554548269035753256L;
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int 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;
}
public UserPOJO(int id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public UserPOJO(String username, String password) {
this.username = username;
this.password = password;
}
public UserPOJO() {
super();
// TODO Auto-generated constructor stub
} }
/**
* 相冊实体类
*
*/
public class AlbumPOJO implements Serializable{
private int id;
private String a_name;
private int user_id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getA_name() {
return a_name;
}
public void setA_name(String a_name) {
this.a_name = a_name;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public AlbumPOJO(int id, String a_name, int user_id) {
super();
this.id = id;
this.a_name = a_name;
this.user_id = user_id;
}
public AlbumPOJO(String a_name, int user_id) {
this.a_name = a_name;
this.user_id = user_id;
}
public AlbumPOJO() {
super();
// TODO Auto-generated constructor stub
} }
/**
*照片实体类
*
*/
public class PhotoPOJO implements Serializable{
private static final long serialVersionUID = 5937149639009957458L;
private int id;
private String p_name;
private String p_url;
private int p_albumId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getP_name() {
return p_name;
}
public void setP_name(String p_name) {
this.p_name = p_name;
}
public String getP_url() {
return p_url;
}
public void setP_url(String p_url) {
this.p_url = p_url;
}
public int getP_albumId() {
return p_albumId;
}
public void setP_albumId(int p_albumId) {
this.p_albumId = p_albumId;
} public PhotoPOJO(int id, String p_name, String p_url, int p_albumId) {
super();
this.id = id;
this.p_name = p_name;
this.p_url = p_url;
this.p_albumId = p_albumId;
}
public PhotoPOJO(String p_name, String p_url, int p_albumId) {
this.p_name = p_name;
this.p_url = p_url;
this.p_albumId = p_albumId;
}
public PhotoPOJO() {
super();
// TODO Auto-generated constructor stub
} }

login.jsp实现登录

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>login</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String action=request.getParameter("action");
UpDAO ud=new UpDAOImpl(); String username=request.getParameter("username");
String password=request.getParameter("password");
UserPOJO pojo=ud.login(username, password);
if("log".equals(action)){
if(pojo==null){
%>
<h1>登录失败</h1>
<%
}else{
request.getSession().setAttribute("username", username);
request.getSession().setAttribute("userid", pojo.getId());
response.sendRedirect("index.jsp");
}
}
%>
<form action="login.jsp?action=log" method="post">
<input type="text" name="username" placeholder="请输入用户名"/>
<input type="password" name="password" placeholder="请输入密码"/>
<input type="submit"/>
</form>
</body>
</html>

index.jsp实现显示相冊

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM2MzgwNTE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

代码例如以下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>person message</title>
</head> <body>
<center>相冊界面</center>
当前用户:<%=request.getSession().getAttribute("username")%> <br>
<a href="cre.jsp">去创建相冊</a><br>
我的全部相冊:<br>
<%
int userid=(Integer)request.getSession().getAttribute("userid");
UpDAO dao=new UpDAOImpl();
List<AlbumPOJO> list=dao.findAllAlbum(userid);
for(AlbumPOJO pojo:list){
%>
<tr>
<a>相冊id:</a><td><%=pojo.getId() %></td>
<a>相冊名称:</a><td><%=pojo.getA_name() %></td>
<a>创建者id:</a><td><%=pojo.getUser_id() %></td>
<td><a href="up.jsp?aid=<%=pojo.getId() %>">加入照片</a></td>
<td><a href="show.jsp?phid=<%=pojo.getId() %>">查看照片</a></td>
<td><a href="del.jsp?aid=<%=pojo.getId() %>">删除相冊</a></td>
</tr><br>
<%
}
%> </body>
</html>

cre.jsp创建相冊

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>up photo</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String action=request.getParameter("action");
UpDAO ud=new UpDAOImpl();
String toCre=request.getParameter("cre");
int userId=(Integer)request.getSession().getAttribute("userid");
if("cre".equals(action)){
AlbumPOJO ap=new AlbumPOJO(toCre,userId);
int aNum=ud.creAlbum(ap);
if(aNum!=-1){
response.sendRedirect("index.jsp");
}else{
%>
<h1>创建相冊失败</h1>
<%
}
}
%>
<form action="cre.jsp?action=cre" method="post">
<input type="text" name="cre" placeholder="请输入您要创建的相冊名称"/>
<input type="submit" value="确定">
</form>
</body>
</html>

up.jsp上传照片

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%@ page import="cn.jvsun.tools.*" %>
<%@page import="org.lxh.smart.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>上传照片</title>
</head> <body>
<%
int aid=Integer.parseInt(request.getParameter("aid"));
%>
<form action="upCheck.jsp" method="post" enctype="multipart/form-data">
<input type="hidden" name="aid" value="<%=aid %>"/>
<input type="file" name="photo"/>
<input type="submit" value="确认上传"/>
</form>
</body>
</html>

upCheck.jsp上传照片的处理页

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%@ page import="cn.jvsun.tools.*" %>
<%@page import="org.lxh.smart.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head> <body>
<%
String ip = request.getRemoteAddr();
ip = ip.replaceAll(":","");
PhotoName pn=new PhotoName(ip);
String pName = pn.getPhotoName();//照片名字,是由IP加当前时间组成
SmartUpload smartupload = new SmartUpload();//实例化上传操作的对象 //初始化上传文件
smartupload.initialize(pageContext);
//准备上传
smartupload.upload();
int albumId=Integer.parseInt(smartupload.getRequest().getParameter("aid"));
//取得文件的后缀
String endName = smartupload.getFiles().getFile(0).getFileExt();
//文件保存的路径
/*String p_url = getServletContext().getRealPath("/")+
"file/"+pName+"."+endName;*/
String p_url="K:/workspace/Xiangce/WebRoot/file/"+pName+"."+endName;
//保存文件
smartupload.getFiles().getFile(0).saveAs(p_url);
UpDAO ad=new UpDAOImpl();
PhotoPOJO pojo=new PhotoPOJO(pName+"."+endName,p_url,albumId);
int photoNum=ad.upPhoto(pojo);
if(photoNum != -1){
request.getSession().setAttribute("phid", albumId);
response.sendRedirect("show.jsp");
} else {
%>
上传失败
<%
}
%>
</body>
</html>

show.jsp显示照片及信息页:

代码例如以下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'show.jsp' starting page</title>
</head> <body>
<center>相冊界面</center>
当前用户:<%=request.getSession().getAttribute("username")%> <br>
<%
int phid=(Integer)request.getSession().getAttribute("phid");
UpDAO dao=new UpDAOImpl();
List<PhotoPOJO> list=dao.findAllPhoto(phid);
for(PhotoPOJO pojo:list){
%>
<tr>
<a>照片id:</a><td><%=pojo.getId() %></td><br>
<a>照片名称:</a><td><%=pojo.getP_name() %></td><br>
<a>照片路径:</a><td><%=pojo.getP_url() %></td><br>
<a>照片所属相冊名称:</a><td><%=pojo.getP_albumId() %></td><br>
<td><img src="<%=path%>/file/<%=pojo.getP_name() %>" width="100" height="100"/></td>
<a href="photo_del.jsp?pid=<%=pojo.getId() %>">删除照片:</a></td><br>
</tr><br>
<%} %>
</body>
</html>

photo_del.jsp删除照片

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>del</title>
</head> <body>
<%
int pid=Integer.parseInt(request.getParameter("pid"));
int result=0;
UpDAO dao=new UpDAOImpl();
result=dao.delPhoto(pid);
if(result==1){
out.println("<script>alert('删除成功');window.location.href('show.jsp');</script>");
}else{
out.println("<script>alert('出错了');window.location.href('show.jsp');</script>");
}
%> </body>
</html>

del.jsp删除相冊

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cn.jvsun.DAO.Impl.*" %>
<%@ page import="cn.jvsun.POJO.*" %>
<%@ page import="cn.jvsun.DAO.*" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>del</title>
</head> <body>
<%
int aid=Integer.parseInt(request.getParameter("aid"));
int result=0;
UpDAO dao=new UpDAOImpl();
result=dao.delAlbum(aid);
if(result==1){
out.println("<script>alert('删除成功');window.location.href('index.jsp');</script>");
}else{
out.println("<script>alert('删除失败。请先把相冊中的照片删掉');window.location.href('index.jsp');</script>");
}
%> </body>
</html>

数据库的建表语句:

-- Create table
create table USERINFO
(
ID NUMBER,
USERNAME VARCHAR2(30),
PASSWORD VARCHAR2(30)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table USERINFO
add constraint PID primary key (ID)
disable;
--上传者
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Create table
create table ALBUM
(
ID NUMBER not null,
A_NAME VARCHAR2(30),
USER_ID NUMBER
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table ALBUM
add constraint AL_PID primary key (ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
alter table ALBUM
add constraint USERID foreign key (USER_ID)
references USERINFO (ID)
disable;
--相冊表
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Create table
create table PHOTO
(
ID NUMBER,
P_NAME VARCHAR2(30),
P_URL VARCHAR2(50),
P_ALBUMID NUMBER(30)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints
alter table PHOTO
add constraint ALB_ID foreign key (P_ALBUMID)
references ALBUM (ID);
--相片表

好了,全部代码就写完了。切记。须要smartupload.jar包,没有的童鞋能够去下载:http://download.csdn.net/detail/weixin_36380516/9807953

不积硅步无以至千里。努力。


jsp实现仿QQ空间新建多个相冊名称,向相冊中加入照片的更多相关文章

  1. jsp实现仿QQ空间新建多个相册名称,向相册中添加照片

    工具:Eclipse,Oracle,smartupload.jar:语言:jsp,Java:数据存储:Oracle. 实现功能介绍: 主要是新建相册,可以建多个相册,在相册中添加多张照片,删除照片,删 ...

  2. iOS传感器集锦、飞机大战、开发调试工具、强制更新、Swift仿QQ空间头部等源码

    iOS精选源码 飞机大作战 MUPhotoPreview -简单易用的图片浏览器 LLDebugTool是一款针对开发者和测试者的调试工具,它可以帮... 多个UIScrollView.UITable ...

  3. Html - 仿QQ空间右下角工具浮动块

    仿QQ空间右下角工具浮动块 <style type="text/css"> .cy-tp-area>.cy-tp-fixbtn>.cy-tp-text { ...

  4. 仿QQ空间和微信朋友圈,高解耦高复用高灵活

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  5. 仿QQ空间动态界面分享

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  6. JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果

    JS仿QQ空间鼠标停在长图片时候图片自动上下滚动效果 今天是2014年第一篇博客是关于类似于我们的qq空间长图片展示效果,因为一张很长的图片不可能全部把他展示出来,所以外层用了一个容器给他一个高度,超 ...

  7. Fragment,仿QQ空间

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9023451          在今天的这篇文章当中,我依然会以实战加理论结合 ...

  8. 仿QQ空间根据位置弹出PopupWindow显示更多操作效果

    我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图:       ...

  9. android 自定义scrollview 仿QQ空间效果 下拉伸缩顶部图片,上拉回弹 上拉滚动顶部title 颜色渐变

    首先要知道  自定义scrollview 仿QQ效果 下拉伸缩放大顶部图片 的原理是监听ontouch事件,在MotionEvent.ACTION_MOVE事件时候,使用不同倍数的系数,重置布局位置[ ...

随机推荐

  1. 配置文件报错:元素类型 "XXX" 必须后跟属性规范 ">" 或 "/>"

    这是一个比较常见的配置错误,一般分两步. 有的情况的确是xml文件出现了语法问题,可以让IDE来帮我们检查xml文件是否真的出现了语法错误.把xml内容复制进IDE中,让IDE帮我们检查错误. 如上图 ...

  2. 并发系列1----大白话聊聊Java并发面试问题之volatile到底是什么?【石杉的架构笔记】

  3. Flask实战第58天:发布帖子功能完成

    发布帖子后台逻辑完成 首先给帖子设计个模型,编辑apps.models.py class PostModel(db.Model): __tablename__ = 'post' id = db.Col ...

  4. 【BFS】The Morning after Halloween

    [POJ3523]The Morning after Halloween Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 23 ...

  5. HDU 6060 RXD and dividing(LCA)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6060 [题目大意] 给一个n个节点的树,要求将2-n号节点分成k部分, 然后将每一部分加上节点1, ...

  6. [TCO2013]DirectionBoard

    题意:给一个网格,每个格子有一个方向表示在这个格子上要往哪个方向走,你可以改变某些格子的方向,问最少多少次操作使得从任意格子出发都能回到这个格子 woc这都不会我还是回家种田去吧... 题目的要求是改 ...

  7. 【二项式定理】【推导】计蒜客17115 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B. Coin

    题意:投一枚硬币向上的概率是q/p.问你投K枚硬币,向上的枚数为偶数枚的概率是? 要求的即为. 这个东西是个二项展开式的偶数项系数和,来,我们复习一下高中数学,设f(x)=(ax+b)^n,则其偶数项 ...

  8. 【DFS】【拓扑排序】【动态规划】Gym - 100642A - Babs' Box Boutique

    给你10个箱子,有长宽高,每个箱子你可以决定哪个面朝上摆.把它们摞在一起,边必须平行,上面的不能突出来,问你最多摆几个箱子. 3^10枚举箱子用哪个面.然后按长为第一关键字,宽为第二关键字,从大到小排 ...

  9. JDK源码学习笔记——Iterable/Iterator实现原理

    Collection接口继承java.lang.Iterable接口,集合类重写了iterator()方法 public interface Iterable<T> { Iterator& ...

  10. [NOIP2013 花匠] 新人解题报告

    本来按照老师的要求,我学OI的第一份解题报告应是在寒假完成的关于数据结构的基础题,但由于身体原因当时未能完成,那么就在省选赛前临时写几篇吧…… 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿 ...