如果拥有较高的服务器权限,可以开个定时器在服务器上执行,但是如果是租用虚拟主机空间的话,可以用PHP模拟定时器功能。
1、先给m添加一个上次更改的时间字段,比如change_at,数据类弄推荐int或者timespan,用int会比较好,因为可以用php的time()来取时间对比。
2、定义一个函数get_m(),每次要取m值的时候都通过这个函数取。在取值之前对m进行 *** 作:
function get_m()
{
$now = time();
$change_at = get_change_at();//取得change_at的值,函数自己去写。
$m = read_m();//取得数据库内的真实数值
$time_span = $now - $change_at;
//没有达到更新条件,直接返回;
if ($time_span < 180)
return $m;
$m += floor($time_span / 180);
$change_at += (floor($time_span/180) 180);
//将新的m和change_at写入数据库
save_m($m,$change_at);
return $m;
}
其中的几个函数read_m(),get_change_at(),save_m()根据具体的数据库结构写功能,也可以不要用函数直接把数据库 *** 作代码写在那边。
这样就能保证每次程序取到的值和数据库自动更改的情况下是一样的。
新建一个页面,为了说明的更加简单明了,我放了2个日期框,通过点击按钮,用标签展示出各个结果。然后我再对各个功能的用法进行逐一解释说明本例中使用的是c#的语法结构,其他语言的算法是一样的,只要语法稍微修改一下就可以用了。
在计算函数Button1_Click中先定义2个参数,读取2个日期值。
string time1 = TextBox1TextTrim();
string time2 = TextBox2TextTrim();
将这个字符型的值转换成日期类型,因为TimeSpan只针对时间格式的进行时间差计算。
DateTime date1 = DateTimeParse(time1);
DateTime date2 = DateTimeParse(time2);
定义一个结构体,将2个时间进行相减。 TimeSpan ts= date2 - date1;到此,其实我们已经得到了TimeSpan的值 了,接下来就是TimeSpan结构体的各个值的解析了
增加一个标签Label用于展示相差的天数。 Label1Text = tsDaysToString(); //这里的Days出来的是整型的,为了展示特意转换成了string类型。下图1先输入时间,点击图1 中“计算时间差”按钮,出现图2 的效果。
增加一个标签Label用于展示相差的小时数。 Label2Text = tsHoursToString(); //这里的Hours出来的是整型的,为了展示特意转换成了string类型。下图1先输入时间,点击图1 中“计算时间差”按钮,出现图2 的效果。
注意在这里计算相差的小时数时,仅仅只是将小时数进行相减,如果不是同一天日期的,你就要先计算相差天数然后24再加上时间差,否则就会出现下图的错误。
针对以上的错误,修改代码如下: Label2Text = tsDays 24 + tsHoursToString(); //先计算相差天数然后24再加上时间差。这样修改之后,执行后的结果就如下图所示。
此外还有TimeSpanMinutes, TimeSpanSeconds的用法。TimeSpanMinutes计算相差的分钟数。TimeSpanSeconds计算相差的秒数。用法和TimeSpanHours是一样的。这里就不再描述。
给你个思路吧:
<%@ page language="java" import="javautil" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = requestgetContextPath();
String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 401 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'listjsp' starting page</title>
<meta ;
package comaction;
import javautilArrayList;
import javautilList;
import comdaoUserDao;
import comdaoUserDaoImpl;
import comopensymphonyxwork2ActionSupport;
import compojoUser;
import comutilPagination;
public class UserAction extends ActionSupport{
private UserDao dao = new UserDaoImpl();
private List<User> users = new ArrayList<User>();
private User user;
private int id;
private Pagination p = new Pagination();
public String list(){
Systemoutprintln("======================listaction");
try {
Systemoutprintln("list:"+pgetPage()+pgetPageSize());
daogetMaxPage(p);
users = daolist(p);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return "failed";
}
public String add(){
Systemoutprintln("======================addaction");
try {
daoadd(user);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return "failed";
}
public String delete(){
Systemoutprintln("======================deleteaction");
try {
daodelete(id);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return "failed";
}
public String load(){
Systemoutprintln("======================loadaction");
try {
user = daofindUserById(id);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return "failed";
}
public String modify(){
Systemoutprintln("======================modifyaction");
try {
usersetId(id);//设置user的id为所要修改的id
daoupdate(user);
return "success";
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return "failed";
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
thisusers = users;
}
public User getUser() {
return user;
}
public void setUser(User user) {
thisuser = user;
}
public int getId() {
return id;
}
public void setId(int id) {
thisid = id;
}
public Pagination getP() {
return p;
}
public void setP(Pagination p) {
thisp = p;
}
}
package comutil;
/
分页
@author yun
/
public class Pagination {
private int pageSize = 3;//每页显示几条数据
private int totalPage = IntegerMAX_VALUE;//共多少页
private int page = 1;//第几页
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if(pageSize <= 0){
pageSize = 3;
}
thispageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
if(totalPage <=0){
totalPage = 1;
}
thistotalPage = totalPage;
//下面的setPage(page)一定要有,因为totalPage是查询出来的,这会影响page的值。
//如:原来有12页数据,现在查询出来的只有2页,那么page大于2的页应该就不存在了
setPage(page);
}
public int getPage() {
return page;
}
public void setPage(int page) {
Systemoutprintln("=========totalPage:"+totalPage);
if(page <= 0){
page = 1;
}
if(page > totalPage){
page = totalPage;
}
thispage = page;
}
}
package comdao;
import javasqlConnection;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
import javasqlStatement;
import javautilArrayList;
import javautilList;
import compojoUser;
import comutilDBUtil;
import comutilPagination;
public class UserDaoImpl implements UserDao {
public void add(User u) throws Exception {
int id = searchMaxId();//获得id值,相当于id = seqnextval()
Systemoutprintln("获得id值=============="+id);
usetId(id);
String sql = "insert into s_user(id,username,password,valid) " +
" values(,,,)";
Connection conn = DBUtilgetConnection();
PreparedStatement pstmt = connprepareStatement(sql);
pstmtsetInt(1, ugetId());
pstmtsetString(2, ugetUsername());
pstmtsetString(3, ugetPassword());
pstmtsetString(4, ugetValid());
Systemoutprintln("打印sql:"+sql+"\t参数:["+ugetId()+","+ugetUsername()+","+ugetPassword()+","+ugetValid()+"]");
pstmtexecuteUpdate();
DBUtilclose(pstmt);
DBUtilclose(conn);
}
/
查询记录中最大的id,如果没有就默认为1,有就+1返回
@return
/
private int searchMaxId() {
int id = 1;
String sql = "select max(id) mid from s_user";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DBUtilgetConnection();
stmt = conncreateStatement();
Systemoutprintln("打印sql:"+sql);
rs = stmtexecuteQuery(sql);
if(rsnext()){
id = rsgetInt("mid")+1;//有结果,就+1
}
} catch (Exception e) {
eprintStackTrace();
} finally {
try {
rsclose();
stmtclose();
connclose();
} catch (SQLException e) {
eprintStackTrace();
}
}
return id;
}
public void delete(int id) throws Exception {
String sql = "delete from s_user where id = ";
Connection conn = DBUtilgetConnection();
PreparedStatement pstmt = connprepareStatement(sql);
pstmtsetInt(1, id);
Systemoutprintln("打印sql:"+sql+"\t参数:["+id+"]");
pstmtexecuteUpdate();
DBUtilclose(pstmt);
DBUtilclose(conn);
}
public User findUserById(int id) throws Exception {
User u = null;
String sql = "select from s_user where id = ";
Connection conn = DBUtilgetConnection();
PreparedStatement pstmt = connprepareStatement(sql);
pstmtsetInt(1, id);
Systemoutprintln("打印sql:"+sql+"\t参数:["+id+"]");
ResultSet rs = pstmtexecuteQuery();
if(rsnext()){
u = new User();
usetId(rsgetInt("id"));
usetUsername(rsgetString("username"));
usetPassword(rsgetString("password"));
usetValid(rsgetString("valid"));
}
DBUtilclose(rs);
DBUtilclose(pstmt);
DBUtilclose(conn);
return u;
}
public List<User> list() throws Exception {
List<User> list = new ArrayList<User>();
String sql = "select id,username,password,valid from s_user order by id";
Connection conn = DBUtilgetConnection();
Statement stmt = conncreateStatement();
Systemoutprintln("打印sql:"+sql);
ResultSet rs = stmtexecuteQuery(sql);
while(rsnext()){
int id = rsgetInt("id");
String username = rsgetString("username");
String password = rsgetString("password");
String valid = rsgetString("valid");
User u = new User();
usetId(id);
usetUsername(username);
usetPassword(password);
usetValid(valid);
listadd(u);
}
DBUtilclose(rs);
DBUtilclose(stmt);
DBUtilclose(conn);
return list;
}
public List<User> list(Pagination p) throws Exception {
List<User> list = new ArrayList<User>();
String sql = "select from (select ini,rownum rn from " +
"(select id,username,password,valid from s_user order by id) ini " +
"where rownum <= ) where rn >= ";
int begin = pgetPageSize()(pgetPage()-1)+1;//10(3-1)+1=21 1-10 11-20 21-30
int end = pgetPageSize()pgetPage();//103=30
Connection conn = DBUtilgetConnection();
PreparedStatement pstmt = connprepareStatement(sql);
pstmtsetInt(1, end);
pstmtsetInt(2, begin);
Systemoutprintln("打印sql:"+sql+"\t参数:["+end+","+begin+"]");
ResultSet rs = pstmtexecuteQuery();
while(rsnext()){
int id = rsgetInt("id");
String username = rsgetString("username");
String password = rsgetString("password");
String valid = rsgetString("valid");
User u = new User();
usetId(id);
usetUsername(username);
usetPassword(password);
usetValid(valid);
listadd(u);
}
DBUtilclose(rs);
DBUtilclose(pstmt);
DBUtilclose(conn);
return list;
}
public void update(User u) throws Exception {
String sql = "update s_user set username=,password=,valid= where id=";
Connection conn = DBUtilgetConnection();
PreparedStatement pstmt = connprepareStatement(sql);
pstmtsetString(1, ugetUsername());
pstmtsetString(2, ugetPassword());
pstmtsetString(3, ugetValid());
pstmtsetInt(4, ugetId());
Systemoutprintln("打印sql:"+sql+"\t参数:["+ugetUsername()+","+ugetPassword()+","+ugetValid()+","+ugetId()+"]");
pstmtexecuteUpdate();
DBUtilclose(pstmt);
DBUtilclose(conn);
}
/
设置最大页
@param p
@throws SQLException
/
public void getMaxPage(Pagination p) throws SQLException{
String sql = "select count() from s_user";
Connection conn = DBUtilgetConnection();
Statement stmt = conncreateStatement();
ResultSet rs = stmtexecuteQuery(sql);
if(rsnext()){
int s = rsgetInt(1);//一共有多少条数据
int n = pgetPageSize();//每页大小
int t = (s+n-1)/n;
psetTotalPage(t);//共有多少页
}
DBUtilclose(rs);
DBUtilclose(stmt);
DBUtilclose(conn);
}
/
测试UserDaoImpl
@param args
@throws Exception
/
public static void main(String[] args) throws Exception {
UserDaoImpl impl = new UserDaoImpl();
int size = impllist()size();
Systemoutprintln("size======"+size);//size======0
}
}
总体来说,这是一个翻页查询问题。
上一条,下一条如果是两个按钮的话,就要写javascript去异步发送请求了,请求时来带上参数,参数为当前的页数减一(上一条),或加一(下一条)。然后就是写查询语句了。
如:
public List<User> list(Pagination p) throws Exception {
List<User> list = new ArrayList<User>();
String sql = "select from (select ini,rownum rn from " +
"(select id,username,password,valid from s_user order by id) ini " +
"where rownum <= ) where rn >= ";
int begin = pgetPageSize()(pgetPage()-1)+1;//10(3-1)+1=21 1-10 11-20 21-30
int end = pgetPageSize()pgetPage();//103=30
Connection conn = DBUtilgetConnection();
PreparedStatement pstmt = connprepareStatement(sql);
pstmtsetInt(1, end);
pstmtsetInt(2, begin);
Systemoutprintln("打印sql:"+sql+"\t参数:["+end+","+begin+"]");
ResultSet rs = pstmtexecuteQuery();
while(rsnext()){
int id = rsgetInt("id");
String username = rsgetString("username");
String password = rsgetString("password");
String valid = rsgetString("valid");
User u = new User();
usetId(id);
usetUsername(username);
usetPassword(password);
usetValid(valid);
listadd(u);
}
DBUtilclose(rs);
DBUtilclose(pstmt);
DBUtilclose(conn);
return list;
}
同理,还是要去查询,然后得到两条记录,还是要传参数的。
在数据库提取部分数据,在JSP上显示的做法如下:
思路:1、创建db连接 2、创建statement 3、执行查询 4、遍历结果并展示
完整代码如下:
<span style="font-size:12px;"><span style="font-size:14px;"><%@ page language="java" import="javasql,javaio,javautil"%>
<%@ page contentType="text/html;charset=utf-8"%>
<html>
<head>
<style type="text/css">
table {
border: 2px #CCCCCC solid;
width: 360px;
}
td,th {
height: 30px;
border: #CCCCCC 1px solid;
}
</style>
</head>
<body>
<%
//驱动程序名
String driverName = "commysqljdbcDriver";
//数据库用户名
String userName = "root";
//密码
String userPasswd = "szy";
//数据库名
String dbName = "studentmanage";
//表名
String tableName = "student";
//联结字符串
String url = "jdbc:mysql://localhost:3306/" + dbName + "user="
+ userName + "&password=" + userPasswd;
ClassforName("commysqljdbcDriver")newInstance();
Connection connection = DriverManagergetConnection(url);
Statement statement = connectioncreateStatement();
String sql = "SELECT FROM " + tableName;
ResultSet rs = statementexecuteQuery(sql);
%>
<br>
<br>
<table align="center">
<tr>
<th>
<%
outprint("学号");
%>
</th>
<th>
<%
outprint("姓名");
%>
</th>
<th>
<%
outprint("专业");
%>
</th>
<th>
<%
outprint("班级");
%>
</th>
</tr>
<%
while (rsnext()) {
%>
<tr>
<td>
<%
outprint(rsgetString(1));
%>
</td>
<td>
<%
outprint(rsgetString(2));
%>
</td>
<td>
<%
outprint(rsgetString(3));
%>
</td>
<td>
<%
outprint(rsgetString(4));
%>
</td>
</tr>
<%
}
%>
</table>
<div align="center">
<br> <br> <br>
<%
outprint("数据查询成功,恭喜你");
%>
</div>
<%
rsclose();
statementclose();
connectionclose();
%>
</body>
</html></span><span style="font-size:24px;color: rgb(255, 0, 0);">
</span></span>
1、如果数据库中存储时间的数据类型为datetime,那就避免在后台代码(aspxcs)中转化时间格式,将格式转化的任务放到界面代码(aspx)上。
无论获取的时间是什么格式的,在后台不要对这个时间的值进行任何 *** 作(比如赋值等,否则系统会将时间隐式转换),而是直接在界面代码(aspx)用DataBinder、Eval等方法来直接进行格式化:
后台关键代码:
<span style="white-space:pre"> </span>DataTable dt = new NewsManager()SelectById(newsid); //这里得到的dt为从直接数据库中查询到的数据
<span style="white-space:pre"> </span> repNewsDataSource =dt;
repNewsDataBind();
前台关键代码:
<span style="white-space:pre"> </span><asp:Repeater ID="repNews" runat="server">
<ItemTemplate>
<p class="con_time">
发布时间:
<%# DataBinderEval(ContainerDataItem,"createTime","{0:yyyy-MM-dd HH:mm:ss}") %> <%--此处createTime为上面dt中的字段名--%>
</p>
</ItemTemplate>
</asp:Repeater>
strip_tags是PHP自带的过滤HTML标签的函数。
$row=mb_substr(htmlspecialchars(strip_tags($latestnews['content'])),0,26,'UTF-8')
如果想把<script></script>之间的也去掉,只能正则了:
$str = preg_replace("|<script></script>|Usi", '', $str);
以上就是关于关于数据库数据自动更改的程序编写(网站程序是PHP+MYSQL)全部的内容,包括:关于数据库数据自动更改的程序编写(网站程序是PHP+MYSQL)、c#怎么用timespan向数据库中插入小时和分钟、java数据库 *** 作问题(上一条数据、下一条数据)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)