精华内容
下载资源
问答
  • 1.打开Access2013,点击... ... 3.点击“视图”——>"设计视图"——>将每表的字段属性进行设置(包括其字段大小,类型,字段说明等),ctrl+S保存一下即可在数据表视图中查看; 4.在设计视图的模式下,同时选取sno
    1.打开Access2013,点击“新建空白桌面数据库”, 命名为“Student.accdb”;
    2.点击“创建”-——>"表"——>"保存"依次对表进行命名为:student,sc,course;
    3.点击“视图”——>"设计视图"——>将每个表的字段属性进行设置(包括其字段大小,类型,字段说明等),ctrl+S保存一下即可在数据表视图中查看;

    4.在设计视图的模式下,同时选取sno,cno两项,点击"主键"即可实现将sno,cno作为sc关系的主属性;

    在表视图的模式下,选中一个,按下ctrl,再选中一个,点击“主键”即可;

    5.将实验中的数据依次进行输入,保存;
    6.点击"数据库工具"——>"关系"——>添加三个表——>将主属性对应连接,建立三个表之间的关系,保存即可。

    展开全文
  • 在数据库中创建一个内存表member_sessionid(即数据库存储引擎为membory),包含两个字段(MS_ID,MS_SESSIONID)。其中MS_SESSIONID用来存储 sessionId。注意:将主键id不要设置成自增的方式。 在创建用...

    一直以为 限制一个账号同时只能一个人登录 就是单点登录,经过网上查询,一个账号同一时间只能一个人登录和单点登录根本不是一回事。

    解决思路:

    • 在数据库中创建一个内存表member_sessionid(即数据库存储引擎为membory),包含两个字段(MS_ID,MS_SESSIONID)。其中MS_SESSIONID用来存储 sessionId。注意:将主键id不要设置成自增的方式。
    • 在创建用户的时候,在内存表member_sessionid中添加一条数据,字段id为新建用户在用户表中的主键id,字段MS_SESSIONID先设为空
    • 在用户登录成功之后,根据用户id 去内存表查询该用户在内存表中的记录,如果该记录存在,将该记录的MS_SESSIONID字段设置成 sessionId,如果不存在,在表中添加一条记录,MS_ID设置成用户的id,MS_SESSIONID设置为当前请求的sessionId.
    • 添加一个拦截器,每次请求服务器时(这里不包括(登录请求、退出请求以及静态资源的请求)),根据用户id去内存表中查询用户的记录并取出该记录的MS_SESSIONID字段
    • 从请求中取出sessionId,和上面查出来的MS_SESSIONID字段进行对比,如果不相等,执行退出操作。

    逻辑与代码:

    1. 在数据库创建一个表
      CREATE TABLE `member_sessionid` (
        `MS_ID` int(11) DEFAULT NULL COMMENT '用户的id',
        `MS_SESSIONID` varchar(255) DEFAULT NULL COMMENT '用户登陆的sessionId'
      ) ENGINE=MEMORY DEFAULT CHARSET=latin1

      2.添加用户的时候在内存表中添加一条记录(其实本步骤可以省略)

    2. i=adminService.add(admin);
      MemberSessionid memberSessionid = new MemberSessionid(admin.getId(), "");
      j=memberSessionidService.insert(memberSessionid);

      3.用户登录以后,根据判断去维护member_sessionid表

    3.               String id = session.getAttribute("id").toString();//用户的id
                      MemberSessionid mSessionid =sessionService.selectById(Integer.parseInt(id));
                      if(mSessionid==null){
                          mSessionid=new MemberSessionid(Integer.parseInt(id), request.getSession().getId());
                          sessionService.insert(mSessionid);
                      }else{
                          mSessionid.setMsSessionid(request.getSession().getId());
                          sessionService.update(mSessionid);
                      }            

      4.添加拦截器并配置拦截器

    4. public class SessionIdInterceptor implements HandlerInterceptor{
          @Autowired
          private MemberSessionidService memberSessionidService;
      
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                  throws Exception {
              // TODO Auto-generated method stub
              String sessionId  =request.getSession().getId();
              String userId = request.getSession().getAttribute("id").toString();
              MemberSessionid memberSessionid=memberSessionidService.selectById(Integer.parseInt(userId));
      //        System.out.println(request.getRequestURI());
      //        System.out.println(request.getContextPath());
              if(sessionId.equals(memberSessionid.getMsSessionid())){
                  return true;
              }else{
                  response.sendRedirect(request.getContextPath()+"/admin/reloadRemind");
                  return false;
              }
          }
      
          @Override
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                  ModelAndView modelAndView) throws Exception {
              // TODO Auto-generated method stub
              
          }
      
          @Override
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                  throws Exception {
              // TODO Auto-generated method stub
              
          }
          
      }
      //在拦截器配置列表中添加新的拦截器的配置
      <mvc:interceptor>
                  <mvc:mapping path="/**" />
                  <mvc:exclude-mapping path="/admin/verifyCode" />
                  <mvc:exclude-mapping path="/admin/passwordCode" />
                  <mvc:exclude-mapping path="/admin/login" />
                  <mvc:exclude-mapping path="/js/**" />
                  <mvc:exclude-mapping path="/img/**" />
                  <mvc:exclude-mapping path="/css/**" />
                  <mvc:exclude-mapping path="/fonts/**" />
                  <mvc:exclude-mapping path="/upload/**" />
                  <mvc:exclude-mapping path="/resource/**" />
                  <mvc:exclude-mapping path="admin/welcomePage" />
                  <mvc:exclude-mapping path="/admin/reloadRemind" />
                  <mvc:exclude-mapping path="/admin/quit" />
                  <bean id="SessionIdInterceptor" class="net.sahv.cskg.interceptor.SessionIdInterceptor" >
                  </bean>        
              </mvc:interceptor>

      这样当用两个浏览器先后用同一个账号登录的时候, 前一次登录会因为后一次的登录而退出登录

    展开全文
  • 个主键,属性为支持自增的数据类型,并且没有显式为属性标记非自增特性,则默认属性映射为自增列.这点我觉得不太合理,甚至设计自增和非自增两个Attribute的存在也不合理. &#...
  • 今天来介绍种Mysql中的主键约束。 一、主键定义 键是表的标识列,关系数据库依赖于主键,它...在创建表的同时设置主键,可以放在单字段后,也可以放在表的末尾 alter table 表名 modify 字段名 字段类型 primar...

    今天来介绍两种Mysql中的主键约束。
    一、主键定义

    键是表的标识列,关系数据库依赖于主键,它是数据库物理模式的基石。主键不唯一,可以使用主键组。
    

    二、 主键的用途

    1. 唯一的表示一行记录。
    2. 作为一个可以被外键引用的有效对象。
    

    三、 如何设置主键

    在创建表的同时设置主键,可以放在单字段后,也可以放在表的末尾 	
    alter table 表名 modify 字段名 字段类型 primary key;
    

    四、 如何修改主键

    1. 如果原表中没有主键,直接添加
        alter table 表名 modify 字段名 字段类型 primary key;
    2. 如果原表中有主键,不能直接修改主键,需要先删除原有主键 ,再添加新的主键
       注意:  一个表中只能有一个主键
       删除主键:alter table +表名 drop primary key;
       添加新主键: alter table +表名 add primary key (字段);
    

    五、关于约束的常用命令

      show create table 表名;	 	查看约束
      alter table +表名 drop index +约束名;       删除指定名称的约束
    
    展开全文
  • 针对这两个字段做唯一索引; 2.然后web服务器上直接插入,抓特定的Exception判断是不是违反了唯一性。 这个...我看行... <br/>问题补充</strong><br/><div class="quote_title">lixjluck 写道...
  •  如果同时设置主键则在Hibernate中如何创建改关系的实体类?(我在用MyEclipse5.5生成Friend表的实体类时总是反射出两个实体类)  2. 如果使用如下对象关系来描述 好友关系。那么数据库应该如何设计...
  • 消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...
  • 消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...
  • 在Hibernate中实现Oracle的自动增长默认分类 本文介绍如何在Hibernate中实现Oracle的自动增长。...第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每表建一sequence,此种做...
    在Hibernate中实现Oracle的自动增长默认分类 

    本文介绍如何在Hibernate中实现Oracle的自动增长。根据hibernate的文档,有两种方式实现实体对象的主键自动增长。

    根据hibernate的文档,有两种方式实现实体对象的主键自动增长。

    第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MS-SQL,MY-SQL中的自动增长一样,不需要创建触发器,具体的oracle数据库脚本及hibernate配置文件如下:

    [1]oracle数据表的创建脚本:


    CREATE TABLE DEPARTMENT (
    ID NUMBER(19,0) DEFAULT '0' NOT NULL,
    NAME VARCHAR2(255) NOT NULL,
    DESCRIPTION CLOB
    );
    ALTER TABLE DEPARTMENT ADD CONSTRAINT PRIMARY_0 PRIMARY KEY(ID) ENABLE;
    ALTER TABLE DEPARTMENT ADD CONSTRAINT UK_DEPARTMENT_1 UNIQUE (NAME);

    CREATE SEQUENCE DEPARTMENT_ID_SEQ MINVALUE 10000 MAXVALUE 999999999999999999999999 INCREMENT BY 1 NOCYCLE;

    创建DEPARTMENT表,并为DEPARTMENT表创建一个单独的SEQUENCE,名字为SEQUENCE_ID_SEQ,并不需要创建触发器。

    [2]hibernate映射文件的配置:


    < ?xml version="1.0"?>
    < !DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    < hibernate-mapping package="com.liyanframework.demo.domain">
    < class name="Department" table="DEPARTMENT">
    < id name="id" column="ID">
    < generator class="sequence">
    < param name="sequence">DEPARTMENT_ID_SEQ< /param>
    < /generator>
    < /id>
    < property name="name" column="NAME" type="string" />
    < property name="description" column="DESCRIPTION" type="text" />
    < /class>
    < /hibernate-mapping>

    在hibernate映射文件中,对ID的生成策略选择sequence,指定sequence的名字DEPARTMENT_ID_SEQ就可以了,当你保存新对象的时候,hibernate会自动取得DEPARTMENT_ID_SEQ.NEXTVAL作为新对象的ID保存到数据库,所以不需要再使用触发器再来生成新记录的ID。

    第二种:设置ID的增长策略是native,但是需要创建一个名字为hibernate_sequence(这个名字好像是hibernate默认的 sequence名字,不创建会出错的)的全局使用的sequence,然后再对每一个表的ID生成的时候,使用触发器,取得 hibernate_sequence.CURRVAL作为新记录的ID,具体的oracle数据库脚本及hibernate配置文件如下:

    [1]oracle数据表的创建脚本:


    CREATE TABLE STAFF (
    ID NUMBER(19,0) DEFAULT '0' NOT NULL,
    NAME VARCHAR2(255) NOT NULL,
    AGE NUMBER(3,0) NOT NULL,
    BIRTHDAY DATE NOT NULL,
    SALARY NUMBER(10,2) NOT NULL,
    LEVELNESS FLOAT NOT NULL,
    CREATETIME TIMESTAMP NOT NULL,
    ENABLE CHAR(2) DEFAULT 'Y' NOT NULL,
    STATUS VARCHAR2(64) NOT NULL,
    DEPARTMENT_ID NUMBER(19,0)
    );
    ALTER TABLE STAFF ADD CONSTRAINT PRIMARY_1 PRIMARY KEY(ID) ENABLE;
    ALTER TABLE STAFF ADD CONSTRAINT STAFF_IBFK_0 FOREIGN KEY(DEPARTMENT_ID) REFERENCES DEPARTMENT(ID) ENABLE;
    ALTER TABLE STAFF ADD CONSTRAINT UK_STAFF_1 UNIQUE (NAME);
    CREATE INDEX IDX_STAFF_STATUS ON STAFF(STATUS);

    CREATE SEQUENCE HIBERNATE_SEQUENCE MINVALUE 90000 MAXVALUE 999999999999999999999999 INCREMENT BY 1 NOCYCLE;

    CREATE OR REPLACE TRIGGER STAFF_ID_TRG BEFORE INSERT ON STAFF
    FOR EACH ROW
    BEGIN
    IF INSERTING AND :NEW.ID IS NULL THEN
    SELECT HIBERNATE_SEQUENCE.CURRVAL INTO :NEW.ID FROM DUAL;
    END IF;
    END;

    创建STAFF表,但是并没有为STAFF创建相应的主键sequence,而是创建了一个名字为HIBERNATE_SEQUENCE的 sequence,然后创建一个触发器STAFF_ID_TRG,当执行INSERT操作时,hibernate会先执行一次 HIBERNATE_SEQUENCE.NEXTVAL,所以在触发器中只需要取得HIBERNATE_SEQUENCE.CURRVAL作为新记录的 ID。

    [2]hibernate映射文件的配置:


    < ?xml version="1.0"?>
    < !DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    < hibernate-mapping package="com.liyanframework.demo.domain">
    < class name="Staff" table="STAFF">
    < id name="id" column="ID">
    < generator class="native" />
    < /id>
    < property name="name" column="NAME" type="string" />
    < property name="age" column="AGE" type="integer" />
    < property name="birthday" column="BIRTHDAY" type="date" />
    < property name="salary" column="SALARY" type="big_decimal" />
    < property name="level" column="LEVELNESS" type="float" />
    < property name="createTime" column="CREATETIME" type="timestamp" />
    < property name="enable" column="ENABLE" type="character" />
    < property name="status" column="STATUS" type="string" />
    < many-to-one name="department" column="DEPARTMENT_ID" class="Department" />
    < /class>
    < /hibernate-mapping>

    在hibernate映射文件中,对ID的生成策略选择native,hibernate会根据你数据库的触发器来生成新记录的ID。

    比较两种做法,第二种做法也就是hibernate在代码中,实现了oracle中的触发器功能。对于不同的情况,选择不懂的做法。如果新的系统,新建的 oracle数据库,推荐使用第一种做法,简单,容易移植到其他支持自动增长的数据库;如果是老的系统,需要把其他数据库转换为oracle的,那就要用第二种了,使用native的方式,可以不改动配置文件,兼容oracle和mysql之类带有自动增长的数据库。

    安装有oracle数据库,创建数据库,总是要创建一个主键ID,唯一标示各条记录,但oracle不支持自动编号,所以还得创建一个SEQUENCE(序列)语句如

    create sequence bign nocycle maxvalue 9999999999 start with1;//增加数据

    insertintotable (ID,..) values(bign.nextval,..)

    在hibernate中的映射文件可这么写


    < id name="id" type="java.lang.Long" column="ID">
    < generator class="sequence">
    < param name="sequence">bign< /param>
    < /generator>
    < /id>




    < id name="id" type="java.lang.Long" column="ID">
    < generator class="increment">
    < /id>

    (increment 用与为long,short或者int类型生成唯一标示。只有在没有其他进程忘同一张表中插入数据时才能使用。在集群下不要使用)
    展开全文
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    98 <br>0153 如何自定义数字小数点左边分组位数 98 <br>0154 格式化输入数据为货币格式 99 <br>0155 如何计算两个整数的乘积 99 <br>0156 如何将二进制数转换为十进制数 100 <br>0157 如何...
  • 可以控制整个机器,可以禁止修改注册表,防止别人破坏HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System,如果你发现“Policies”下面没有“System”,则在它下面新建一个主键,...
  • 1.3.5 给定一个整数数组和一个整数,返回两个数组的索引,这两个索引指向的数字的加和等于指定的整数。需要最优的算法,分析算法的空间和时间复杂度 1.3.6 假如给你一个新产品,你将从哪些方面来保障它的质量? ...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
  • 数据库资料

    2018-04-01 22:00:33
    主要包含最基础的数据库语句,很适合初学者,目标使用企业管理器创建数据库表设置表的主键、外键和建立表之间的关系为表增加约束数据完整性 数据完整性 数据存放在表中 “数据完整性的问题大多是由于设计引起的” ...
  • 消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener 在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
  • java面试题

    2018-01-01 15:35:15
    84.3. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 107 84.4. 现在输入n个数字,以逗号”,”分开;然后可选择升...
  • 产品的主键是ProductID,Numeric型并且每产品有一字母描述字段,名为ProductName。您使用一SqlDataAdapter对象和一SqlCommand对象通过调用一存储过程从数据库中获取产品数据。您将SqlCommand对象的...
  • Toad 使用快速入门

    2008-11-27 15:22:14
    支持同时连接到多数据库,同时对多数据库进行操作  允许编辑SQL,PLSQL,JAVA,HTML和文本 使用书签功能,可以在大量SQL语句里,快速定位某个语句所在位置  SQL Editor本身具有强大的编辑功能,非常...
  • 如果必须减小 WorkerIdBitLength 或 SeqBitLength 其中的一项,一定要满足一个条件:新的两个 BitLength 之和要大于 老的值之和。[不推荐在运行之后缩小任何一个 BitLength 值] 4.上述3条规则,并未在本算法内做...
  • 在 TestModel 里,我们使用 $table 属性来设置需要映射的表名,对于 id 属性,我们用 primary 表明这是一个主键,并且我们给这个字段添加了一个 type 约束,限定它一定为 Number 类型Relation 在关系型...
  • asp.net知识库

    2015-06-18 08:45:45
    通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

如何同时设置两个主键