Servlet程序中如何向库表中插入时间?(50分)

  • 主题发起人 主题发起人 gg_bb
  • 开始时间 开始时间
G

gg_bb

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在Servlet程序中如何取得系统当前时间,并把它插到数据库中的某张表里?
请大家帮帮忙。急.....
谢谢
 
Servlet 我也正在学。以前我用DELPH做过一个通select getdate()取得当前服务器系统时间,你也可用这一原理,在SERVLET中使用。如:
通过JDBC,或其它联上SERVER。用下语句
executeQuery("select getdate()");

 
不是,我可以用java中的 "Date today=new Date()" 取出系统当前时间,但是当我用insert语句把这个变量插入数据库表时,就出现"can't convert java.util.date to java.sql.date"的错误,我不知道怎么改?
请各位大侠帮帮忙,如果能写出具体代码更是感激不尽,谢了
 
为什麽不用SQL语言本身的SYSDATE函数,不用调任何API
 
我用SQL语言本身的sysdate函数是可以将日期插入数据库表中,但这样我又需要在页面中显示当前时间,类似形式为“2000-6-30 10:30:20”,可是sysdate在这里就不能使用。所以我不知道如何让两边同时成功。
 
主要问题是
插入时间时用的是java.sql.date 类型
而不是java.util.date类型
 
在Servlet程序中用“Date date=new Date()"所取得的时间结果为
"Fri Jun 30 16:53:35 CST 2000”的形式,我用"date.getYear()"
等将它转换为类似于“2000/06/30-17:02:49”的形式时,总出错,
请问应如何转换?
 
你应该用 java.sql.Date d=new java.sql.Date(System.getCurmill...());
java.sql.Time t=new java.sql.Time(System.getCurmill...());
System.getCurmill...()返回一个长整型。表示从距1970年到此刻的豪秒数。
d.toString() ,t.toString()将产生一个符合sql标准的时间。可用于:
String sqlstr="insert into table (justnow) values('"+d.toString()+"')"
stmt.execute(sqlstr);
.....
 
为何要用这么多省略号,我试的时候总出错,不要这么保守好不好,我说过我是初学者,对于java也是刚刚接触,请不吝赐教!
 
就当日期是字串,
Date d = Date(System.currentTimeMillis());
dbUpdate.setString(4,d.toLocaleString());
其中dbUpdate可以是你定义的PreparedStatement。第一参数应该对应你的update语句。不一定是4。
larry
 
TimeStamp t = new TimeStamp(System.currentTimeMillis());
.......
aTable = aConnection.getstatement( 'update timetable set operationTime = ?'));
..........
aTable.setTimestamp(1,t);
BTW, you can insert string time. But it is not good idea.
 
省略号的意思是你去查和它相同的函数,就可以了。没有参数。最后一个省略号的
意思是后面与这个问题无关了。重新给你一些代码吧。这是我写来连接POSTGRE的。给你了。
Connection con;
Statement stmt;
ResultSet rs;
String url ="jdbc:postgresql://192.168.0.69/wange" ;
String databaseUser ="pediatrician";
String driver ="postgresql.Driver";
String password ="clinic";
java.sql.Time enter=new java.sql.Time(System.currentTimeMillis ());
java.sql.Date ent=new java.sql.Date(System.currentTimeMillis ());
try {
Class.forName(driver);
con=DriverManager.getConnection(url,databaseUser,password);
stmt = con.createStatement();
}
catch (Exception driverE) {
return;
}
try {
String id;
rs = stmt.executeQuery("select max(id)+1 from drlogintime");
if(!rs.next())
return;
id= rs.getString(1);
if(id==null) id=""+1;
stmt.execute("insert into drlogintime(id,drid,ontime,date) values("+id+","+drid+","+System.currentTimeMillis ()+",'"+ent+" "+ enter+"')");
rs = stmt.executeQuery("select id from room where drid="+flag+drid);
if(rs.next()){
stmt.execute("update room set head='"+head+"' where drid="+id);
}
else
{
rs = stmt.executeQuery("select max(id)+1 from room");
rs.next();
String roomid = rs.getString(1);
if(roomid == null) roomid = ""+1;
stmt.execute("insert into room values("+roomid+",'"+flag+drid+"',0,0,0,0,0,'"+head+"')");
}
con.close();
}
catch (Exception queryE) {
return;
}
 
一、java中的时间与数据库的时间有以下关系:
1。JDBC DATE 类型表示一个由年、月、日组成的日期。
对应的是 SQL DATE 类型,其定义由 SQL-92 给出
,但只有一部份主流数据库实现它。某些数据库提供了
另外一些支持类似语义的 SQL 类型。
2。JDBC TIME 类型表示一个由小时、分钟和秒组成的时间。
对应的是 SQL TIME 类型,其定义由 SQL-92 给出,
但只有一部份主流数据库实现它。与 DATE 一样,
某些数据库提供了另外一些支持类似语义的 SQL 类型。
3。JDBC TIMESTAMP 类型表示 DATE 加上 TIME,外加一个纳秒域。
对应的 TIMESTAMP 类型,其定义由 SQL-92 给出,但只有少数几个数据库实现它。
由于标准的 Java 类 java.util.Date 并不与这三个 JDBC 日期—时间类型完全匹配
(它含有 DATE 和 TIME 的信息但不含纳秒信息),
因此 JDBC 定义了三个 java.util.Date 的子类与 SQL 类型对应。它们是:
java.sql.Date,对应于 SQL DATE 信息。java.util.Date 基本类中的小时、
分钟和秒都设为 0。
java.sql.Time,对应于 SQL TIME 信息。java.util.Date
基本类中的年、月、日域设为 1970 年 1 月 1 日。这是 Java 纪元的“零”日期。
java.sql.Timestamp,对应于 SQL TIMESTAMP 信息。
该类扩展了 java.util.Date,添加了纳秒域。
所有这三个与时间有关的 JDBC 类都是 java.util.Date 的子类,
因此它们可用在任何可以使用 java.util.Date 的地方。
所以,你在向数据库中保存时间的话,应用java.sql.Date。
二、
将"Fri Jun 30 16:53:35 CST 2000”转换为类似于“2000/06/30-17:02:49”
的形式时,可用以下方法:
SimpleDateFormat formatter= new SimpleDateFormat ("yyyy/MM/dd-hh:mm:ss");
Date currentTime = new Date();
String dateString = formatter.format(currentTime);
这时,dateString就是你需要的结果了。
三、如果已经解决问题,请结束问题。
enjoy it!
 
前面的代码加上一句:
import java.text.*;
 
时间太长,强制结束。
ps:,要格式化时间的话,可以考虑我的回答
 
后退
顶部