CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

急高手帮忙(在线等)

楼主xyjzd(北大菜鸟)2004-11-04 11:51:33 在 Java / J2SE / 基础类 提问

问题:做一个登陆,注册程序,数据只能存在内存里,不能用数据库.  
  登陆包括:用户名,密码  
  注册包括:用户名,密码,年龄(年龄可以修改)  
  请高手帮忙啊!!分数没问题,要多少都行,只能能把问题解决  
  本人QQ:11596610 问题点数:100、回复次数:21Top

1 楼jiangnanyuzi(江南愚子)回复于 2004-11-04 11:54:47 得分 0

拜托,用什么做,采用什么形式,你都没说明白,让别人怎么帮啊?把功能说清楚了!Top

2 楼xyjzd(北大菜鸟)回复于 2004-11-04 12:07:26 得分 0

用java做,采用什么形式都可以,只有一个条件就是把数据存到内存,不能用数据库Top

3 楼iwenlong(贪吃龙)回复于 2004-11-04 12:26:50 得分 0

搞个类存单条信息,再用个Vector,List什么的存所有信息Top

4 楼xyjzd(北大菜鸟)回复于 2004-11-04 12:27:42 得分 0

能不能搞个实例给我??谢谢拉!!最好是相关的文档Top

5 楼kaymo( 。。。 )回复于 2004-11-04 12:39:18 得分 0

这种例子很多阿,一般网站或是书上都能找到  
  不用数据库持久数据,你可以做个类存放就可以Top

6 楼xyjzd(北大菜鸟)回复于 2004-11-04 12:40:45 得分 0

不好意思!可能我还没说清楚,虽然不用数据库,但是数据还是要持久的!!!我想了很久,是不是用IO流?Top

7 楼linlimin2100(天堂马贼)回复于 2004-11-04 12:53:36 得分 0

这个我想应当不难实现,只是我也从来没做过/如果有现成的,再一起分享吧!Top

8 楼treeroot(旗鲁特)回复于 2004-11-04 13:06:18 得分 0

pubilc   class   User{  
      private   String   userName;  
      private   String   passWord;  
      private   int   age;  
      public   String   getUserName(){return   userName;}  
      public   String   getPassWord(){return   passWord;}  
      public   int   getAge(){return   age;}  
      public   void   setUserName(String   user){userName=user;}  
      public   void   setPassWord(String   pwd){passWord=pwd;}  
      public   void   setAge(int   age){this.age=age;}  
      public   boolean   equals(Object   o){  
          User   u=(User)o;  
          return   u.userName.equals(userName)&&u.passWord.equals(passWord);  
      }  
        //用户名,密码等  
  }  
  pubilc   final   class   MemoryUser{  
          private   static   Map   userList=new   HashMap();  
          public   static   boolean   register(User   user){  
              if(user==null)   throw   new   NullPointerException();  
              //用户名已经被用  
              if(userList.containsKey(user.getUserName()))   return   false;  
              userList.put(user.getUserName(),user);  
              return   true;  
          }  
          public   static   boolean   login(User   user){  
                if(user==null)   return   false;  
                User   u=(User)userList.get(user.getUserName());  
                return   (u!=null)&&(u.equals(user));  
          }  
  }  
   
  Top

9 楼j2nix(爱生活爱星辉)回复于 2004-11-04 13:14:34 得分 100

给个油箱,我发个类似的给你。Top

10 楼Mohooo(双之灵)回复于 2004-11-04 13:21:12 得分 0

关注Top

11 楼xyjzd(北大菜鸟)回复于 2004-11-04 13:25:53 得分 0

回复人:   j2nix(爱生活爱星辉)    
  我的Email:infoer2001@sina.comTop

12 楼xyjzd(北大菜鸟)回复于 2004-11-04 13:27:07 得分 0

回复人:   treeroot(根根)   我需要把数据持久下来!就是关机,开机后注册的资料还在!!!Top

13 楼jackyzgm()回复于 2004-11-04 13:31:48 得分 0

我需要把数据持久下来!就是关机,开机后注册的资料还在!!!  
   
  ---  
   
  你这不是废话么,内存的东西关了机还会有么?既然要求有就不仅仅存在内存里了。Top

14 楼jiangnanyuzi(江南愚子)回复于 2004-11-04 13:33:27 得分 0

晕,想保存在内存中,却要求断电后还能保存,楼主的电脑内存是可以永久保存的吗?  
  你这样不用数据库的话,就用文件保存好了Top

15 楼xyjzd(北大菜鸟)回复于 2004-11-04 13:36:27 得分 0

回复人:   jiangnanyuzi(江南愚子)   对了!所以要用IO流!!!  
  Top

16 楼anotherleeo(游泳的鱼)回复于 2004-11-04 13:37:02 得分 0

搂主要做登陆显然是个b/s的东东.  
  要持久的数据当然是在服务器上,所以客户端关机数据依然存在.  
  就是说数据持久不能依靠在客户端的内存持久.  
   
  可以在服务器端开一个数据缓冲器,随时和业务逻辑服务通信,用来保存数据.  
  写一个通讯接口.或者socket,或者rmi等.  
  缓冲器为了避免服务器异常数据丢失,所以最好每一个时间段后把内存的数据提交到数据库.Top

17 楼xyjzd(北大菜鸟)回复于 2004-11-04 13:47:06 得分 0

SORRY了!可能我题目意思理解错误!!!我在去求证一下,在和大家一起商量!!!  
  回复人:   anotherleeo(听风看雨)   :应该没有这么复杂!!!  
  可能和关机和开机没关系,把资料存在类里就可以!!  
  不过在这里谢谢大家!给了我很多方法Top

18 楼elseif(流星雨!)回复于 2004-11-04 14:14:25 得分 0

把对象序列化,再保存到文件Top

19 楼cold_blooded(三天没吃饭)回复于 2004-11-04 14:55:53 得分 0

通常我们采用各种数据库产品来实现对数据的存储、检索等功能,例如,Oracle,SQL   Server,MySQL等等。这些产品除提供基本的查询,删除,添加等功能外,也提供了很多高级特性,如触发器,存储过程,数据备份恢复,全文检索功能等。但实际上,很多的应用,仅仅利用到了这些数据库产品的基本特性而已。而且在一些小型应用上,或者某些特殊场合的应用,比如桌面程序,这些数据库产品就明显有一些臃肿。在这些情况下,嵌入式数据库的优势就特别明显了。    
   
  嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式,   而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十K。这不但对桌面程序的数据存储方案是一个很好的选择,也使得它们可以应用到一些移动设备上。同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。    
   
  下面介绍的是两个开放源代码的嵌入式数据库,Berkeley   DB和SQLite。同时侧重介绍如何应用Java连接这两种嵌入式数据库  
  Top

20 楼cold_blooded(三天没吃饭)回复于 2004-11-04 14:57:13 得分 0

一.   Berkeley   DB  
   
  1.   简介  
   
  Berkeley   DB是一款健壮的,高速的工业级嵌入式数据库产品,你可以在它的官方主页(见参考链接一)上发现很多知名的公司都采用了这款嵌入式数据库。Berkeley   DB的一个很重要的特点是就是高速存储。在高流量,高并发的情况下,Berkeley   DB要比非嵌入式的数据库表现得更加出色。所以在一些技术实现上,Berkeley   DB被作为大型关系数据库的中间数据缓冲层,用来快速的保存数据,可能会在适当的时刻再导入到大型数据库中,进而应用大型数据库所提供的更为高级的特性。    
   
  Berkeley   DB虽然是开源的产品,但对某些条件下的商业性应用,却不是免费的,而且价格颇为昂贵。这些商业条件排除了开源的情况,不发放分布版本的情况,等等。比如,如果你的程序是开放源代码的或者仅仅应用到单一的网站上,在这种情况下,Berkeley   DB是免费的。    
   
  2.   获得Java与Berkeley   DB的接口  
   
  Berkeley   DB目前的版本是4.1.25,自带了Java接口。下载的压缩包中包含C和Java语言的源代码和编译配置文件。在Windows平台,可以用MS   Visual   C++   6.0或MS   VC.Net编译。用VC6编译的操作如下介绍:在源代码的build_win32路径下打开VC的工程文件,之后在Build菜单中的Set   Active   Configuration选择db_java   win32   release编译选项。在VC的Tools菜单Options选项中指定JNI.H等Java本地化接口编译时所需要头文件的位置。你会在JDK的include路径下找到这些头文件, 例如加入的路径可能会是这样的:C:\jdk1.4\include和C:\jdk1.4\include\win32。最后在Tools菜单中Options选项还要设置Javac.exe和Jar.exe的执行路径,这个设置会使VC开发环境也能调用Java编译器,从而在VC环境下直接完成对Java接口类的编译和打包。在编译后,在release路径下的文件中找到db.jar,   libdb41.dll,   libdb_java41.dll,这三个文件组成了Berkeley   DB的Java接口程序包。    
   
  3.   应用Java与Berkeley   DB的接口    
   
  Berkeley   DB并不是一个关系型的数据库。不能应用标准的SQL语句对数据库操作,对它的操作要调用专用的API实现。这些API提供了查询、插入、删除等功能。比如com.sleepycat.db.Db类代表数据库对象。Db类的put()方法完成的是插入功能,get()方法完成的是读出数据的功能。com.sleepycat.db.Dbc是Berkeley   DB的游标类,提供了遍历数据库记录的功能。    
   
  Berkeley   DB每一个记录都有一个键值和对应的数据值,而键值和数据必须是类com.sleepycat.db.Dbt的对象或其子类的对象。Dbt提供了一些方法可以将byte数组或Object对象保存到Dbt的对象中去。比如,Dbt类中的set_data(byte[])或set_object(Object)方法。注意到目前Berkeley   DB中的Java   API命名方法并不符合Java的命名规范,比如set_data()方法应该命名为setData()方法。Berkeley   DB许诺在下一个版本中会提供符合命名规范的Java   API。    
   
  Berkeley   DB对任何存入的数据都是直接原样存储到数据文件中去,无论其是二进制数据还是ASCII或Unicode等编码的文本。通常可以利用这一特性和Java串行化的概念方便的进行数据的存取。例如声明一个类    
   
   
  public   class   AccountInfo   implements   Serializable{  
  //帐户信息  
  public   String   loginName;  
  public   String   password;  
  public   boolean   auotLogin;  
  }  
   
     
   
   
  在这个AccountInfo类中仅仅包含了数据项的定义。我们完全可以将这个类看作数据库的表中字段定义。可以用Berkeley   DB保存AccountInfo对象的串行化二进制数据,以此来保存这个对象中的变量值。在操作中,先对Dbt的对象调用set_object(AccountInfo)方法,而后把这个Dbt对象作为一条纪录保存到表中。当然,我们也可以应用继承Dbt类的方法来完成对数据的保存。    
   
  下面这段简单代码演示如何将数据存入到数据库中,然后再用游标对象浏览全部数据。    
   
   
  //注意,下面的程序的忽略了对异常处理,写入数据初始化等等一些代码,请在适当修改后再编  
  //译运行它  
  Db   dbFile   =   null;  
  //生成Db对象  
  dbFile   =   new   Db(null,   0);  
  //用BTree方式打开数据库,库文件是在c:/temp下的mydata.db文件,表名是employee  
  //如果数据库不存在,则自动生成一个新的数据库。  
  dbFile.open(null,"c:\\temp\\mydata.db","employee",Db.DB_BTREE,  
  Db.DB_CREATE,0);  
  Dbt   key   =   new   Dbt();  
  Dbt   data   =   new   Dbt();  
  //向库文件中插入一条数据,如果已经存在,打印出错信息  
  if   (dbFile.put(null,key,   data,   Db.DB_APPEND)   ==   Db.DB_KEYEXIST)   {  
          System.out.println("Key   already   exists.");  
  }  
  //关闭数据文件  
  dbFile.close(0);  
  //重新打开数据文件  
  dbFile   =   new   Db(null,   0);  
  dbFile.open(null,   "c:\\temp\\mydata.db",   "employee",   Db.DB_UNKNOWN,    
  0,   0644);  
  //   声明一个数据库游标Dbc对象iterator  
  Dbc iterator   =   dbFile.cursor(null,   0);  
  //   遍历整个表  
  Dbt   key   =   new   Dbt();  
  while   (iterator.get(key,   data,   Db.DB_NEXT)   ==   0)  
  {  
  System.out.println("reading");  
  }  
  //关闭游标和数据文件  
  iterator.close();  
  dbFile.close(0);  
   
     
   
   
  在运行Berkeley   DB的程序时勿必在系统环境变量PATH中设置libdb41.dll和   libdb_java41.dll所在的路径。  
  Top

21 楼cold_blooded(三天没吃饭)回复于 2004-11-04 14:59:53 得分 0

二.   SQLite  
   
  1.   简介  
   
  相信PHP的开发人员一定不会对SQLite感到陌生,因为在PHP5中已经集成了这个轻巧的内嵌式数据库产品。SQLite与Berkeley   DB相比,在操作语句上更类似关系型数据库的产品。绝大多数标准的SQL92语句SQLite都能支持。    
   
  SQLite的版权允许无任何限制的应用,包括商业性的产品。在参考链接二上提供的SQLite官方主站上可以下载到编译后的SQLite程序。但推荐应用CVS工具下载最新版本的SQLite源代码。如果在*nux平台下,可直接用make编译。如果在Windows平台,常用的有两种方法,一是应用在Windows平台下的Linux仿真程序,如MingW或Cygwin提供的make来编译。二是应用MS   VC平台编译。后者设置略有麻烦,但可仿照参考链接五上提供的MS   VC6工程文件的样例。应用到这个样例的时候,要注意的是由于SQLite源代码在不断更新,如果直接应用样例所提供的VC6工程文件编译会出现一些问题,读者要根据具体的情况稍微调整一下编译的设置。    
   
  2.   编译第三方Java接口  
   
  SQLite源代码是C,而且官方网站上只提供了C和Tcl语言的接口。为了应用Java接口,要采用第三方的接口驱程,可在参考链接三中找到这个Java接口程序。这个接口提供了两种连接SQLite的方式:一是直接用JNI技术调用SQLite的C语言接口,这种方式要求开发人员要对SQLite本身的API也有一定的了解。在第二种方式中,接口程序实现了Java标准规范的JDBC接口,这样开发人员只要对JDBC有了解就可以了。    
   
  下面介绍在Windows系统MS   VC6环境中编译SQLite   Java接口(同时包括JNI和JDBC两个接口)的过程。如果你对C语言编译的设置很熟悉,可以跳这这段介绍。    
   
  第一步先把SQLite源代码编译成Lib静态库文件。具体的步骤可以直接应用下面参考链接中提供的MS   VC6工作区文件,其中有一个编译SQLite到静态库的设置。编译成功后得到SQLite.lib文件。第二步要建立一个新的VC   DLL项目,然后和上面介绍的Berkeley   DB在编译Java本地化接口的设置一样,在VC的Tools菜单Options选项中指定JNI.H等JNI编译所要的头文件位置。同时还要指定sqlite.h头文件位置,这个文件是在生成SQLite静态库的时候自动生成的,可以在SQLite.lib文件所在的工作区目录下面找到它,例如加入的路径为C:\sqlite\msvc6。然后在Project菜单的setting选项设置Link到SQLite.lib库文件,并再次在Tools菜单中Options指定SQLite.lib的查找路径。注意有些情况下可能要设置予编译选项HAVE_SQLITE_COMPILE以便使用SQLite中VM的一些功能。编译成功后可得到Sqlite_jni.dll文件。    
   
  第三方接口库中的Java代码包含JNI接口和多个版本的JDBC接口程序,可根据你的JRE的版本选择相应的JDBC程序。编译这些Java代码的过程这里就不做叙述了。    
   
  编译后的Java类包加上前面得到的Sqlite_jni.dll文件,组成了SQLite的Java接口库,在应用Java语言调用JDBC或JNI接口时,都是通过应用Java的本地化技术调用Sqlite_jni.dll文件,完成对SQLite数据库的操作。    
   
  3.   应用JNI直接调用SQLite功能  
   
  下面这段代码演示如何应用JNI接口操作SQLite。可以看到Database类的exec()方法是执行SQL语句的关键:    
   
   
  Database   db   =   new   Database();  
  try   {  
  //打开数据库  
  db.open("c:\\temp\\mydata.slt",   0666);  
  db.interrupt();  
  db.busy_timeout(1000);  
  db.busy_handler(null);  
  db.exec("create   table   account   (name   varchar(10),gale   boolean)"  
  ,result);  
  db.exec("insert   into   account   values('steve','m')",   result);  
  db.exec("select   *   from   account",result);  
  //关闭数据库  
  db.close();  
  }   catch   (Exception   e)   {  
  e.printStackTrace();  
  }  
   
     
   
  Top

相关问题

  • 急急急,,,,,,,,,,,,,,,在线
  • 在线等,急急!!!
  • 急急!!!!在线等
  • 急救!!!!!!!!!!!!!!!(在线)
  • 急…………在线等。
  • 在线急救!!!
  • 在线急等
  • 急!在线(MSFlexGrid)
  • 急!!!!!!!!!!!!!!!!!!!在线!!!!!
  • 在线急问

关键词

  • win32
  • 编译
  • 数据库
  • 接口
  • 数据
  • 文件
  • 应用
  • 嵌入式数据库
  • db
  • 内存

得分解答快速导航

  • 帖主:xyjzd
  • j2nix

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo