NHibernate搭配Access的问题

合集下载

Hibernate出错总结

Hibernate出错总结

错误1:-----------------------------------------------------------------------------------------------------------------No getter method for property XXXX of bean异常如下:No getter method for property XXXX of beanorg.apache.struts.taglib.html.BEAN在网上找了不少资料.中文的英文的.出现这个异常的还真不少.大部分都是在用select标签的时候...提示都是找不到属性的getter方法,可是我发现.出现这个问题的属性全都有getter方法!!不排除有一部分大小写字母写错的原因.可是这个问题不是那么简单.因为我敢保证我的拼写没有错误.最后恢复正常的时候我都不知道为什么.只不过我一气之下全改小写了!竟然好用了.经验之谈:1.写代码的时候一定要小心.一般小心都不行.2.不要过分相信系统.也不要过分的不相信自己.系统出错的几率也是很大的.3.英文一定要学好.4.google比baidu 好用.看来真的是java命名规范问题,我改了好多处命名,这回到底是出来了-------------------------------------------------------------------------------------------------------------------错误2:当struts中转向另外一个页面时,css会引入错误怎么办呢?在head中加入这个就可以了:<html:base />在开始还要加入<%@ taglib uri="/tags-html" prefix="html"%>这样就ok-----------------------------------------------------------------------------------------------------------------错误3<bean:write>不能显示Integer,BigDecimal等类型的属性问题的解决在用struts标签bean:write name=".." property=".."/ 显示Integer ,BigDecimal类型的属性时,会报javax.servlet.jsp.JspException: Cannot find message resources under key org.apache.struts.action.MESSAGEatorg.apache.struts.taglib.TagUtils.retrieveMessageResources(TagUtils.ja va:1252)at org.apache.struts.taglib.TagUtils.message(TagUtils.java:1101) at org.apache.struts.taglib.TagUtils.message(TagUtils.java:1076) atorg.apache.struts.taglib.bean.WriteTag.retrieveFormatString(WriteTag. java:254)atorg.apache.struts.taglib.bean.WriteTag.formatValue(WriteTag.java:317) atorg.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:232) at org.apache.jsp.client$jsp._jspService(client$jsp.java:379)atorg.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)atorg.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspSer vlet.java:201)atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381) atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)这样的错误解决的办法就是利用 bean:write 的format属性,加上一个format="#" 属性bean:write name="testForm" property="testBig" format="#"/BigDecimal型数据处理bean:write name="testForm" property="testInt" format="#" /Intger型数据处理关于format还有不少很好的妙用比如你要显示的日期格式为年-月-日时:分:秒,则可以定义为format="yyyy-MM-dd HH:mm:ss"比如你要定义显示到小数点后几位,则可以定义为format="000.00"错误4.Exception thrown by getter for property pages of beanorg.apache.struts.taglib.html.BEAN解答:public String getPages(){return this.getPages();}这里不对吧,变成递归了,呵呵return this.pages;常用错误总结:7.int 类型字符过长com.mysql.jdbc.exceptions.MySQLDataException: '2.5026744582E10' in co lumn '1' is outside valid range for the datatype INTEGER.8.没找到错误没影响数据读取java.sql.SQLExceptio n: Operatio n not allowed after ResultSet closed9.类型错误最常见的是数字类型错误Data truncated for column 'gatheringMoney' at row 1struts错误Failed to obtain specified co llection 下拉框没值警告: No FormBeanConfig found under 'yuanLiaoRuKuForm' 配置文件Form出错Cannot find bean: "org.apache.struts.taglib.html.BEAN" in any scope <html:text >标签外面没有嵌套<html:form >标签9. 若在数据库中创建了两个sequence ,运行时出现异常可能是先后执行了多次select语句,导致与原有的序列号产生冲突12. MappingNotFoundExceptiona) Maybe: In the Eclipse Not refersh , or not exist in the dirctory13. HibernateException: /hibernate.cfg.xml not founda) Maybe1: hibernate.cfg.xml not in the root directoryb) Maybe2: Could not parse configuration .c) reso lve: database not connect or use another database14. ConstraintVio latio nExceptiona) Maybe: used a not true database15. 驱动没有找到或者 JDBC Driver not found可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误16. 空指针异常, ng.NullPointerExceptiona) 可能1:数据库连接出错,比如在hibernate.cfg.xml中的数据错误会导致异常。

【黑马程序员】hibernate解决多事物库存问题

【黑马程序员】hibernate解决多事物库存问题

【黑马程序员】Java并发之Condition的实现分析一、前言1. 事务4个特性1.原子性(atomic),事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行2.一致性(consistent),事务在完成时,必须使所有的数据都保持一致状态。

3.隔离性(insulation),由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。

4.持久性(Duration),事务完成之后,它对于系统的影响是永久性的。

2. 事务并发通常为了获得更好的运行性能,各种数据库都允许多个事务同时运行,这就是事务并发。

3. 事务隔离机制当并发的事务访问或修改数据库中相同的数据时,通常需要采取必要的隔离机制。

解决并发问题的途径是什么?答案是:采取有效的隔离机制。

怎样实现事务的隔离呢?隔离机制的实现必须使用锁4. 事务并发问题1.第一类丢失更新:(在秒杀场景会出现问题)当事务A和事务B同时修改某行的值,1.事务A将数值改为1并提交2.事务B将数值改为2并提交。

这时数据的值为2,事务A所做的更新将会丢失。

解决办法:对行加锁,只允许并发一个更新事务。

(hibernate中的悲观锁,乐观锁)2.脏读1.李四的原工资为8000, 财务人员将李四的工资改为了10000(但未提交事务)2.李四读取自己的工资,发现自己的工资变为了10000,欢天喜地!(在缓存中读取)3.而财务发现操作有误,回滚了事务,张三的工资又变为了8000 像这样,张三记取的工资数10000是一个脏数据。

解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。

3.虚读目前工资为5000的员工有20人。

1.事务1,读取所有工资为5000的员工。

2.这时事务2向employee表插入了一条员工记录,工资也为50003.事务1再次读取所有工资为5000的员工共读取到了11条记录,解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题。

Access常见错误及解决方案

Access常见错误及解决方案

Access常见错误及解决方案Access是一款功能强大的数据库管理工具,被广泛应用于各个行业的数据处理和管理中。

然而,在使用Access的过程中,我们可能会遇到一些常见的错误,这些错误可能会影响我们对数据的处理和分析。

本文将介绍一些Access常见错误,并提供相应的解决方案。

一、数据库连接错误1. 错误描述:无法连接到数据库。

解决方案:首先,确保你已正确配置数据库连接信息,包括服务器名称、用户名和密码。

如果连接信息正确无误,但仍无法连接数据库,可能是由于网络问题或数据库服务器故障。

你可以尝试重新启动数据库服务器或联系系统管理员进行解决。

2. 错误描述:连接超时。

解决方案:检查网络连接是否正常,并确保数据库服务器的性能良好。

如果网络连接正常且服务器性能正常,但仍遇到连接超时问题,可以尝试增加连接超时时间的设置,以适应较慢的网络环境。

二、数据查询错误1. 错误描述:查询结果为空。

解决方案:检查查询条件是否正确,确保查询的表或字段存在,并包含了需要的数据。

另外,还要验证查询语句是否正确,包括表名称、字段名称和查询条件等。

如果查询条件和语句正确无误,但仍无法得到结果,可能是由于数据库中没有符合条件的数据。

2. 错误描述:查询结果不准确。

解决方案:首先,检查查询条件和语句是否正确,确保查询的是你需要的数据。

其次,验证数据的完整性和准确性,可能需要使用其他工具或方法进行数据清洗和校验。

最后,确保数据库表的索引和统计信息是最新的,以提高查询效率和准确性。

三、数据导入/导出错误1. 错误描述:导入数据时遇到格式错误或数据丢失。

解决方案:首先,检查导入源文件的格式是否与目标数据库兼容,例如,确认源文件的字段类型和目标表的字段类型一致。

其次,验证导入源文件的数据是否完整且正确,可能需要使用其他工具进行数据清洗和转换。

最后,检查导入过程中的错误日志或错误信息,以了解具体的导入错误。

2. 错误描述:导出数据时遇到错误或数据丢失。

跟我学Hibernate框架技术——应用Hibernate框架时所应该注意的问题

跟我学Hibernate框架技术——应用Hibernate框架时所应该注意的问题

目录1.1应用Hibernate框架时所应该注意的问题 (2)1.1.1开发要点 (2)1.1.2持久化类的基本结构要求 (6)1.1.3关于数据验证的问题 (9)1.1.4区分各种数据类型之间的差别 (16)1.1应用Hibernate框架时所应该注意的问题1.1.1开发要点1、PO与DTO的各自的应用要点(1)应该避免直接PO传递到系统中的其他层面在传统的MVC架构中,位于持久层的PO,是否允许被传递到其他层面如表示层或者业务层?由于PO的更新最终将被映射到实际数据库中,如果PO在其他层面(如表示层)发生了变动,那么可能会对Model层造成意想不到的破坏。

因此,一般而言,应该避免直接PO传递到系统中的其他层面。

(2)利用DTO(实现了java.io.Serializable接口的VO)一种解决办法是,通过一个VO,通过属性复制使其具备与PO相同属性值,并以其作为传输媒质(实际上,这个VO被用作Data Transfer Object,即所谓的DTO),将此VO(或者DTO)传递给其它层面以实现必须的数据传送。

(3)属性复制的方法属性复制可以通过Apache Jakarta Commons Beanutils (/commons/beanutils/)组件提供的属性批量复制功能,避免繁复的get/set操作。

UserInfo oneUserInfoPO=(UserInfo)resultList.get(0);oneUserInfoVO.setUserID(oneUserInfoPO.getId().intValue());oneUserInfoVO.setUserName(oneUserInfoPO.getUserName());oneUserInfoVO.setUserPassWord(oneUserInfoPO.getUserPassWord());oneUserInfoVO.setUserType(oneUserInfoPO.getUserType());oneUserInfoVO.setAliaoName(oneUserInfoPO.getAliaoName());oneUserInfoVO.setPassWordAsk(oneUserInfoPO.getPassWordAsk());oneUserInfoVO.setUserImage(oneUserInfoPO.getUserImage());oneUserInfoVO.setPassWordAnswer(oneUserInfoPO.getPassWordAnswer());oneUserInfoVO.setUserMail(oneUserInfoPO.getUserMail());oneUserInfoVO.setRegisterTime(oneUserInfoPO.getRegisterTime());可以在/commons/beanutils/downloads.html进行下载下面的例子中,我们把zhang对象的所有属性复制到wang对象中,然后将wang设计为DTO:UserInfo zhang=new UserInfo();UserInfo wang=new UserInfo();zhang.setName("zhang");zhang.setUserType(1);try{BeanUtils.copyProperties(wang,zhang);System.out.println("UserName=>"+wang.getName());System.out.println("UserType=>"+wang.getUserType());}catch(IllegalAccessException e){e.printStackTrace();}catch(InvocationTargetException e){e.printStackTrace();}2、持久化类中的id属性(1)对象标识符(OID,Object Identifier)前面例中的Book持久化类有一个id属性,用来惟一标识Book类的每个对象。

Hibernate常见错误

Hibernate常见错误

Hibernate常见错误1.错误:object references an unsaved transient instance - save the transient instance before flushing:com.xxxx.bean.java.Sysblog; nested exception isorg.hibernate.TransientObjectException: object references an unsavedtransient instance - save the transient instance before flushing:com.xxx.bean.java.Sysblog解决方法:没有可预期的实例,当然就要实例化对象咯2.错误:Exceptionobject references an unsaved transient instance - save the transient instance before flushing:src.persistent.Product......解决方法:原因没有为某对象进行set设置,如上边的这个就是某对象没有调用setProduct 3.错误:Illegal attempt to associate a collection with two open sessions......解决方法:(hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。

sysblogarticle.setAmount(new Long(sysblogcommentService.selcom(sysblogarticle.getArticleid().toString()).size()));//通过文章id获取文章评论数sysblogarticle.setSysblogcomments(null);//关键sysblogarticleService.saveOrUpdate(sysblogarticle);//将文章中评论条数修改参考:[url=/blog/forum/17913][color=#0000ff]http://javaflas /blog/forum/17913[/color][/url]4.错误:Hbm映射文件都生成好后,改数据库增加了默认值(如:将某个字段值设为1),结果在插入的时候,数据库那边没有反应。

NHibernate官方文档中文版--基础ORM(BasicORMapping)

NHibernate官方文档中文版--基础ORM(BasicORMapping)

NHibernate官⽅⽂档中⽂版--基础ORM(BasicORMapping)映射声明对象/关系映射在XML⽂件中配置。

mapping⽂件这样设计是为了使它可读性强并且可修改。

mapping语⾔是以对象为中⼼,意味着mapping是围绕着持久化类声明来建⽴的,⽽不是围绕数据表。

要注意的是,尽管很多NHibernate使⽤者选择⼿动定义XML⽂件,但是仍然有很多⼯具可以⽤来⽣成mapping⽂件,包括NHibernate.Mapping.Attributes 库和各种各样基于模板的代码⽣成⼯具(CodeSmith, MyGeneration)。

让我们⽤⼀个mapping的例⼦作为开始:<?xml version="1.0"?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Eg"namespace="Eg"><class name="Cat" table="CATS" discriminator-value="C"><id name="Id" column="uid" type="Int64"><generator class="hilo"/></id><discriminator column="subclass" type="Char"/><property name="BirthDate" type="Date"/><property name="Color" not-null="true"/><property name="Sex" not-null="true" update="false"/><property name="Weight"/><many-to-one name="Mate" column="mate_id"/><set name="Kittens"><key column="mother_id"/><one-to-many class="Cat"/></set><subclass name="DomesticCat" discriminator-value="D"><property name="Name" type="String"/></subclass></class><class name="Dog"><!-- mapping for Dog could go here --></class></hibernate-mapping>我们现在讨论mapping⽂件中的内容。

ACCESS数据库的两种连接方法

ACCESS数据库的两种连接方法

ACCESS数据库的两种连接方法方法一:1、建立一个ACCESS数据库test.mdb,其中建立一个数据库表username,包含两个字段uid和pwd,均为文本型字段。

(数据库和表的名称可以自行生成,但要注意在下面代码中的相应位置予以调整)2、将test.mdb存放在TOMCAT安装目录下的data文件夹中,例如C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\data。

(数据库的位置根据TOMCAT安装位置的不同适当调整)3、建立一个JSP文件JDBCAccess.jsp用于显示数据访问效果,代码如下:<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"%><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><%// ******* 数据库连接代码开始*****//异常处理语句try{String spath = "data/test.mdb"; //Access 数据库路径String dbpath = application.getRealPath(spath); //转化成物理路径String dbname = ""; //Acvess 数据库用户名,没有则为空String user = ""; //Access 数据库密码,没有则为空//数据库连接字符串String url ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+dbpath;//加载驱动程序Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//建立连接Connection conn= DriverManager.getConnection(url);//创建语句对象Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);// **** 数据库连接代码结束******//********* 测试数据代码开始******//请在数据库中建立username表,表中建立两个字段uid和pwd,类型为文本型String sql = "select * from username";ResultSet rs = stmt.executeQuery(sql);while(rs.next()){out.print("用户名:" + rs.getString("uid"));out.print(" 密码:" + rs.getString("pwd") + "<br>");}out.print("<br>恭喜你!数据库连接成功!");rs.close(); //关闭记录集对象stmt.close(); //关闭语句对象conn.close(); //关闭连接对象}catch(Exception e){out.print("数据库连接错误!,错误信息如下:<br>");out.print(e.getMessage());}//******* 测试数据代码结束*******%>方法二:1、建立一个ACCESS数据库test.mdb,其中建立一个数据库表username,包含两个字段uid和pwd,均为文本型字段。

SSH整合常见错误

SSH整合常见错误

spring+hibernate出错小结:(1)ng.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext原因:出现这错误时,请更改hibernate的包,更新至最新或3.1以上(2)ng.NoClassDefFoundError: javax/transaction/TransactionManager原因:缺少jta.jar 或者是找不到hbm.xml文件导致sessionfactory出错,检查hbm文件路径是否正确,文件是否存在(3) 错误:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update或者org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not insert: [com.yourcompany.model.Login]; bad SQL grammar [insert into mysql__login (name,password) values (?,?)]; nested exception is java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist java.sql.SQLException: Table 'mysql.mysql__login' doesn't exist原因与解决:因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml 工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了(4)org.springframework.orm.hibernate3.HibernateQueryException: undefined alias原因:在spring配置文件中,可能你设置了<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>,指定了HQL的解释器,请删除或更改另一个解释器org.hibernate.hql.ast.ASTQueryTranslatorFactory,如果没有设置,请确认是否有写错了HQL语句,是否与POJO里的属性一样。

hibernate常见问题及处理

hibernate常见问题及处理

Hibernate 常见异常net.sf.hibernate.MappingException当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文件出现错误。

当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致,有可能是放置目录不正确,或者没将其加入hibernate.cfg.x ml中。

2. net.sf.hibernate.PropertyNotFoundException当出现net.sf.hibernate.PropertyNotFoundException: Could not find a set ter for propertyname in class …时,原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getter或setter方法不一致。

3. org.hibernate.id.IdentifierGenerationException当出现org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():异常时,一般是因为<id>元素配置不正确,<id>元素缺少其子元素<generator></generator>的配置引起。

解决方案:<id>元素映射了相应数据库表的主键字段,对其子元素<generator cl ass="">,其中class的取值可以为increment、identity、sequence、hilo、native……等,更多的可参考hi bernate参考文档,一般取其值为native 。

ACCESS数据库操作必须更新查询的解决办法

ACCESS数据库操作必须更新查询的解决办法

ACCESS数据库操作必须更新查询的解决办法对于需要更新查询的ACCESS数据库操作,可以采取以下几种解决办法:1.使用SQL语句进行更新查询:可以通过编写SQL语句来实现数据库的更新操作。

SQL语句可以使用UPDATE语句来更新数据库表中的数据,可以使用WHERE子句来指定更新的条件。

例如,可以使用以下SQL语句来更新名为"表名"的数据库表中的数据:```UPDATE表名SET列名1=值1,列名2=值2WHERE条件```其中,"表名"为需要更新数据的表名,"列名1"和"列名2"为需要更新的列名,"值1"和"值2"为需要更新的值,"WHERE条件"为更新的条件。

```csharpusing System.Data.SqlClient;//创建连接字符串string connectionString ="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=path\\to\\database.mdb";//创建连接using (var connection = newOleDbConnection(connectionString))//打开连接connection.Open(;//创建SQL语句string sql = "UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2 WHERE 条件";//创建命令对象//执行命令//输出受影响的行数Console.WriteLine("受影响的行数: " + rowsAffected);}```3. 使用ORM框架进行数据库操作:ORM(Object Relational Mapping,对象关系映射)框架可以简化数据库操作,并提供了对数据库的高级抽象。

access的用法及搭配

access的用法及搭配

access的用法及搭配Access是英语中的一个词汇,其基本含义是“进入,使用或接近某物或某地”。

Access这个单词可以看作是一个动词,也可以看作是一个名词,其用法十分广泛,可以在不同的语境中表达不同的意义。

下面是关于Access的用法及搭配的详细解释。

一、动词用法1. Access something(获取,接触)这个短语用来表示通过某种途径获取某物或接触某人。

例如:- Can you help me access the internet? - I need to access my email on my phone. - It's difficult to access the data without a password.可以看出,如果想要访问某些需要特定权限的东西,如网络账户或数据,就需要使用这个短语。

2. Access somebody(接洽,联系)这个短语表示与某人联系或取得他们的支持。

例如:- Can you help me access the CEO? I have an important proposal. - We need to access the local community in order to promote our new product. -It's essential that we access the stakeholders in this project to get their input.在这些情况下,要与某人——如公司高管,社区居民或利益相关者——建立联系,需要使用access somebody。

3. Access to something(使用,进入)这个短语用来描述获取某些东西的权限或机会,例如:- I have access to the company car park. - Students have limited access to the library during the exam period. - The department has restricted access to the top floor of the building.如果想描述对某些东西拥有使用或进入的权利或可机会,就需要使用access to something。

access用法及固定搭配

access用法及固定搭配

access用法及固定搭配Access是一个英语单词,翻译成中文有许多种意思,如进入、使用、获取等。

今天我们将围绕access用法及其固定搭配进行讲解,希望对大家的英语学习有所帮助。

一、access的用法1.作为动词使用Access作为动词使用时,可以表示访问,使用,接近。

例如:I’m sorry, this area is restricted and you can’t access it.(抱歉,这个区域是受限制的,你不能进入)。

2.作为名词使用Access作为名词使用时,可以表示接入,入口等意思。

例如:The access to the stadium is only from the east entrance.(进入体育场的唯一方式是从东门进入)。

二、access的固定搭配1.have access to“have access to”表示拥有接入、进入、使用等许可。

例如:I have access to all the company files.(我可以查看所有公司档案)。

2.gain/lose access to“gain access to”表示获得进入、接入等的权限。

例如:I finally gained access to the secure room.(我最终获得进入安全室的权限)。

“lose access to”表示失去进入、接入等的权限。

例如:If you don’t pay your rent on time, you will lose access toyour apartment.(如果你不按时交房租,你将失去进入公寓的权限)。

3.denied access to“denied access to”表示被拒绝进入、被拒绝接入等。

例如:The journalist was denied access to the press conference.(该记者被拒绝进入新闻发布会)。

NHibernate常见错误

NHibernate常见错误

NHibernate常见错误1.NHibernateSample.Data.Test.QueryHQLFixture.WhereTest:NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : 引发类型为“Antlr.Runtime.NoViableAltException”的异常。

near line 1, column 7 [selectfrom NHibernateSample.Domain.Entities.Customer c where c.Firstname='scenery']错误语法:select from customer正确语法:from customereSQL_GetCustomersWithOrdersTest:NHibernate.Exceptions.GenericADOException : could not execute query[ select distinct customer.* from Customer customer inner join [Order] o on o.CustomerId=customer.CustomerId where o.OrderDate> @p0 ]Name:orderDate - Value:2011-9-5 0:00:00[SQL: select distinct customer.* from Customer customer inner join [Order] o on o.CustomerId=customer.CustomerId where o.OrderDate> @p0]---->System.IndexOutOfRangeException :CustomerId0_0_错误写法:return _session.CreateSQLQuery("select distinct {customer}.* from Customer {customer}" +" inner join [Order] o ono.CustomerId={customer}.CustomerId whereo.OrderDate> :orderDate").AddEntity("customer", typeof(Customer)).SetDateTime("orderDate", orderDate).List<Customer>();正解写法:return _session.CreateSQLQuery("select distinct {customer.*} from Customer {customer}" +" inner join [Order] o ono.CustomerId={customer}.CustomerId whereo.OrderDate> :orderDate").AddEntity("customer", typeof(Customer)).SetDateTime("orderDate", orderDate).List<Customer>();eCriteriaAPI_GetCustomerswithOrdersHavingProductTest: NHibernate.Exceptions.GenericADOException : couldnot execute query[ SELECT this_.CustomerId as CustomerId0_2_, this_.Version as Version0_2_, this_.Firstname as Firstname0_2_,this_.Lastname as Lastname0_2_, order1_.OrderId as OrderId1_0_, order1_.OrderDate as OrderDate1_0_,order1_.CustomerId as CustomerId1_0_, products5_.[Order] as Order1_, product2_.ProductId as Product,product2_.ProductId as ProductId3_1_, product2_.Name as Name3_1_, product2_.Cost as Cost3_1_ FROM Customer this_ inner join [Order] order1_ onthis_.CustomerId=order1_.CustomerId inner join OrderProduct products5_ onorder1_.OrderId=products5_.[Order] inner join Productproduct2_ on products5_.Product=product2_.ProductId WHERE this_.Firstname = @p0 and order1_.OrderDate >@p1 and product2_.Name = @p2 ]Positional parameters: #0>scenery #1>2008-10-1 0:00:00 #2>shirt[SQL: SELECT this_.CustomerId as CustomerId0_2_,this_.Version as Version0_2_, this_.Firstname as Firstname0_2_, this_.Lastname as Lastname0_2_,order1_.OrderId as OrderId1_0_, order1_.OrderDate as OrderDate1_0_, order1_.CustomerId as CustomerId1_0_, products5_.[Order] as Order1_, product2_.ProductId as Product, product2_.ProductId as ProductId3_1_,product2_.Name as Name3_1_, product2_.Cost as Cost3_1_ FROM Customer this_ inner join [Order] order1_ onthis_.CustomerId=order1_.CustomerId inner join OrderProduct products5_ onorder1_.OrderId=products5_.[Order] inner join Product product2_ on products5_.Product=product2_.ProductId WHERE this_.Firstname = @p0 and order1_.OrderDate >@p1 and product2_.Name = @p2]---->System.Data.SqlClient.SqlException : 列名'Order' 无效。

NHibernate中文文档

NHibernate中文文档

第1章NHibernate体系结构总览对NHibernate体系结构的非常高层的概览:这幅图展示了NHibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化的对象)。

我们试图显示更多NHibernate运行时体系结构的细节。

但挺不幸的,NHibernate是比较灵活的并且提供了好几种不同的运行方式。

我们展示一下两种极端情况。

轻型体系中,应用程序自己提供连接,并且自行管理事务。

这种方式使用了NHibernate API的一个最小子集。

全面解决体系中,对于应用程序来说,所有的底层 API都被抽象了,NHibernate会替你照管所有的细节。

下面是图中一些对象的定义:SessionFactory (NHibernate.ISessionFactory) 对属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照。

它是Session的工厂,是ConnectionProvider的客户。

可以持有一个可选的(第二级)数据缓存,可以在进程级别或集群级别保存可以在事物中重用的数据。

会话Session (NHibernate.ISession) 单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话。

封装了一个连接。

也是Transaction的工厂。

保存有必需的(第一级)持久化对象的缓存,用于遍历对象图,或者通过标识符查找对象。

持久化对象(Persistent)及其集合(Collections) 生命期短促的单线程的对象,包含了持久化状态和商业功能。

它们可能是普通的对象,唯一特别的是他们现在从属于且仅从属于一个Session。

一旦Session被关闭,他们都将从Session中取消联系,可以在任何程序层自由使用(比如,直接作为传送到表现层的DTO,数据传输对象)。

临时对象(Transient Object)及其集合(Collection)目前没有从属于一个Session的持久化类的实例。

Access常见错误及解决方案

Access常见错误及解决方案

A c c e s s常见错误及解决方案1. 为什么在创建自定义应用程序时,会出现以下错误提示?若出现该对话框,可能是在【自定义Web应用程序】对话框的【Web位置】文本框没有输入地址,或者Access无法识别输入的网站。

注意系统要求输入的地址必须为有效的,而且用户对其有“完全控制”的权限。

2. 删除某个表对象时,为何出现以下提示?删除表对象之前,需确保已经删除该表与其他的表建立的表关系,否则会弹出该提示框。

Access的这种机制主要用来保护数据库的完整性。

3. 运行追加查询时,为何有时会收到这样一条错误消息:“Microsoft Access不能在追加查询中追加所有记录。

”?此错误消息可能由以下原因之一引起:⑴类型转换失败。

用户可能试图将一种类型的数据追加到另一种类型的字段。

例如,将文本追加到数据类型设置为“数字”的字段就会导致出现此错误。

检查目标表中字段的数据类型,然后确保在每个字段中追加正确类型的数据。

⑵键冲突。

用户可能试图将数据追加到属于表主键的一个或多个字段,例如ID字段。

检查目标表的设计,查看主键(或任何索引)的“无重复”属性是否已设置为“是”,然后检查要追加的数据以确保未违反目标表的规则。

⑶锁定冲突。

如果目标表在“设计”视图中打开或由网络上另一个用户打开,这可能导致记录锁定,致使查询无法追加记录。

确保所有人关闭了数据库。

⑷验证规则冲突。

检查目标表的设计,查看存在哪些验证规则。

例如,如果某个字段为必填字段,但用户的查询并未为其提供数据,将会出现错误。

此外,检查目标表中是否存在任何将“允许空字符串”属性设置为“否”的文本字段。

如果查询未向此类字段追加任何字符,将会出现错误。

还有其他的验证规则也可能导致问题,例如,“数量”字段可能存在以下验证规则:>=10。

在此情况下,无法追加数量小于10的记录。

4. 在执行删除查询时,为什么有时会出现这样一条错误消息:“无法从指定的数据表中删除”?若在删除查询中包含多个数据表,而“唯一的记录”属性被设置为否,就会出现此错误。

VBA与Access配合使用的技巧与实例

VBA与Access配合使用的技巧与实例

VBA与Access配合使用的技巧与实例VBA(Visual Basic for Applications)是Microsoft Office套件中用于自动化任务的编程语言,而Access是一种关系数据库管理系统。

通过将VBA与Access结合使用,可以实现许多自动化和定制化的任务,提高工作效率。

本文将介绍一些常用的VBA与Access配合使用的技巧,并提供一些实例帮助读者更好地理解如何应用这些技巧。

1. 数据库连接与操作VBA可以通过ADO(ActiveX Data Objects)技术与Access数据库建立连接,从而进行各种操作,包括插入、更新、删除和查询数据。

以下是一个例子,演示如何连接到Access数据库并插入一条新记录:```vbaSub InsertRecord()Dim conn As ObjectDim rs As Object' 创建连接对象Set conn = CreateObject("ADODB.Connection")' 连接到Access数据库conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\Path\To\Your\Database.accdb;"' 创建记录集对象Set rs = CreateObject("ADODB.Recordset") ' 指定记录集操作的表名rs.Open "YourTableName", conn, 2, 2' 在记录集中插入新记录rs.AddNewrs.Fields("Field1").Value = "Value1"rs.Fields("Field2").Value = "Value2"' ...' 更新记录集中的数据到数据库rs.Update' 关闭连接和记录集rs.Closeconn.Close' 清理对象变量Set rs = NothingSet conn = NothingEnd Sub```以上代码示例了如何连接到Access数据库,并插入一条新记录到指定的表中。

Access多用户环境下的数据库设计

Access多用户环境下的数据库设计

Access多用户环境下的数据库设计在多用户环境下进行数据库设计是非常重要的,因为它涉及到多个用户同时对数据库进行访问和操作的情况。

为了确保数据的完整性、一致性和安全性,以下是在Access多用户环境下进行数据库设计的一些建议和最佳实践。

1. 数据库的表设计:在多用户环境下,正确的表设计是至关重要的。

首先,需要识别和定义每个表的主键,以确保每行数据都能唯一标识。

同时,考虑到多个用户同时对表进行插入、更新和删除操作,应该避免使用自增字段或者不稳定的唯一标识符,而是选择一个稳定的、不易冲突的主键。

2. 数据库对象的安全设置:为了避免数据的丢失、损坏或篡改,需要正确配置和设置数据库对象的安全权限。

Access提供了多个层次的安全设置,可以限制对表、查询、表单和报表的操作权限。

通过为每个用户或者用户组分配适当的权限,可以确保只有经授权的用户能够访问和修改相关数据。

3. 数据库的索引设计:在多用户环境下,索引的正确使用可以提高查询性能和数据的访问速度。

根据经常被查询的字段,为相关表创建适当的索引。

然而,索引也会带来额外的开销,特别是当多个用户同时对表进行插入、更新和删除操作时。

因此,需要权衡好索引的使用和性能的平衡。

4. 事务处理与并发控制:在多用户环境下,同时进行的数据库操作可能会导致数据不一致问题。

为了解决这个问题,可以使用事务处理和并发控制。

通过将相关操作放在事务中并添加适当的隔离级别,可以确保同时进行的操作之间有正确的顺序和并发控制机制,从而保持数据的一致性。

5. 错误处理与日志记录:多用户环境下的数据库设计还需要考虑错误处理和日志记录。

对于由于并发操作或其它原因导致的错误,应该正确捕获和处理异常,并记录错误信息。

同时,可以使用日志记录功能记录重要操作和事件,以便后续进行故障排查和数据恢复。

6. 定期的维护和备份:在多用户环境下,及时的数据库维护和备份非常重要。

定期的维护包括优化查询、重新索引和压缩数据库等操作,以确保数据库的性能和稳定性。

access数据库并发问题详述

access数据库并发问题详述

access数据库并发问题详述
我们为大家收集整理了关于access数据库并发问题,以方便大家参考。


 1.丢失更新
 当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。

每个事务都不知道其它事务的存在。

最后的更新将重写由其它事务所做的更新,这将导致数据丢失。

 例如,两个编辑人员制作了同一文档的电子复本。

每个编辑人员独立地更改其复本,然后保存更改后的复本,这样就覆盖了原始文档。

最后保存其更改复本的编辑人员覆盖了第一个编辑人员所做的更改。

如果在第一个编辑人员完成之后第二个编辑人员才能进行更改,则可以避免该问题。

 2.未确认的相关性(脏读)
 当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。

第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。

 例如,一个编辑人员正在更改电子文档。

在更改过程中,另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用户。

此后,第一个编辑人员认为目前所做的更改是错误的,于是删除了所。

在Dreamweaver中建立与Access数据库的连接资料

在Dreamweaver中建立与Access数据库的连接资料

本教程讲述了如何在Dreamweaver中建立与Access数据库的连接。

在学习本教程前,您需要掌握以下内容:①创建支持ASP的服务器教程地址:dispbbs.asp?boardID=20&ID=240544②使用Access数据库教程地址:dispbbs.asp?boardID=20&ID=241948③设置Dreamweaver站点教程地址:dispbbs.asp?boardID=20&ID=243575打开Dreamweaver,建立一个ASP(VBScript)站点,把数据库放在网站目录下,这里我是把数据库%flash8=data%.mdb放在网站根目录下的^data#base^目录下。

打开“文件”面板,在站点上点击右键,在弹出的菜单中选择“新建文件”,会在站点目录中新建一个untitled.asp。

我们将文件名改为index.asp。

双击打开index.asp(必须要打开站点下的一个文件才能进行创建数据库连接的操作)。

打开“应用程序”面板,在“数据库”面板中可以看到有4个步骤,只有前3个步骤完成了才能进行第4步“创建连接”的操作。

在进行下面的操作前请确认前3个步骤的前面都打上了“ √ ”(必须)。

点击该面板上的“+”号,在弹出的菜单中选择“自定义连接字符串”。

在弹出的“自定义连接字符串”窗口中,连接名称填写自定义的名称(为了好的编程习惯,最好名称前加上conn前缀,表明这是一个连接字符串)。

在连接字符串中填写:Driver={Microsoft Access Driver (*.mdb)};DBQ=你的数据库的绝对路径这里当然就是:Driver={Microsoft Access Driver (*.mdb)};DBQ=F:\Program\flash8asp\^data#base^\%flash8=data%.mdb (一定注意Driver和(*.mdb)之间有个空格,不要写错了)“Dreamweaver应连接”选择“使用此计算机上的驱动程序”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NHibernate搭配Access的问题近日想学习一下NHibernate,以用在最新的一套大型系统上。

想想不如先做一个小网站来练练手,不过之前还是得先看看NHibernate的使用方法。

搜索了几篇入门文章,包括官方网站的First Step,然后就开始写了。

本想使用Access数据库,结果是一直失败,一开始是连Configuration都无法生成,后来又是写入数据库错误。

后来改成使用Sql server2000,结果很顺序的就通过了。

再改成Access,又没有了头绪。

最后经历了千辛万苦啊,终于算是通过了。

总结如下:使用Access数据库的组件在官方下载的NHibernate-contrib文件里,有个NHibernate.JetDriver.dll,这个文件也是必须的。

其实,在app.config文件里加入NHibernate属性的语句是:<?xml version="1.0" encoding="utf-8" ?><configuration><configSections><section name="nhibernate" type="ValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections><nhibernate><add key="hibernate.connection.provider"value="NHibernate.Connection.DriverConnectionProvider"/><add key="hibernate.dialect" value="NHibernate.JetDriver.JetDialect, NHibernate.JetDriver"/><add key="hibernate.connection.driver_class"value="NHibernate.JetDriver.JetDriver, NHibernate.JetDriver"/><add key="hibernate.connection.connection_string"value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=hibtest.mdb"/></nhibernate></configuration>那个dialect和driver_class的值里面前面是类名称,后面是命名空间名称,中间用逗号分开,不可缺少。

以前查到的一些资料里都没有这一步,所以一直失败。

最后还有一个问题,用户表里面的LastLogon是个日期时间字段,类里面字段的属性也设成日期时间,插入的时候报错,把类里面的字段改成string就可以了,可能是因为插入的时候没有加引号的问题。

还有密码字段如果字段名为Password,同样插入出错,这个应该是字段名跟关键字冲突的问题,看来作者没有考虑到把字段名括起来的问题。

但是我一直没有办法显示出最终要执行的sql语句,所以也一直没有办法确定错误原因。

不过有了以上内容,应该足够写完整个程序了。

测试了一下性能,点击按钮到返回,要2秒多,明显有点慢,做了一个10000个新数据,然后一次写入,用了20秒才写完,有点不可接受了。

回头试一下直接用OleDb写入的速度比较一下吧。

对于昨天的问题,继续研究了一下。

经过一阵搜索,受到了另一位仁兄的启发。

现在的速度慢,跟多一次DLL调用应该也有不小的关系,为什么不把 NHibernate.JetDriver合并进主模块呢?打开NHibernate的源代码,试着编译了一下,报错,说是签名失败,缺少一个sn 文件。

后来找到这个文件是需要自己生成的,使用VS自带的一个工具sn.exe -k NHibernate.snx就可以了,把这个文件放到src目录下,编译通过。

在NHibernate的项目里添加目录 JetDriver,然后把NHibernate-Contrib里面的10目录里面的源代码一个个添加进来,编译,通过了。

试着调用一下,用昨天那个程序,重新添加引用,成功了,减少了一个DLL文件。

顺便研究了一下JetDriver的源代码,在JetDialect.cs文件里找到了一段:public override char CloseQuote{get { return ''; }}初步以为这个应该是自动添加在字段名上的修饰,于是把中间改成中括号,结果失败,查看了一下NHibernate输出的SQL,没有起作用,放弃。

在 JetDbCommand.cs文件里找到一段CheckParameters,如果字段属性是日期时间字段,那么会自动转换成字符串。

既然如此,为什么我插入日期时间字段的时候还是有问题呢?它的ToString是有格式的,ToString( "dd-MMM-yyyy HH:mm:ss"),把这个格式添加到我自己的程序的转换过程里,结果也失败了,原来如此,这个转换后的格式再往Access里面写的时候没有办法正确的转换回去了,于是修改这个格式,ToString( "dd/MM/yyyy HH:mm:ss" ),重新编译NHibernate.dll,重新编译测试程序,把字段属性和映射属性都改成日期,成功了。

至于Password字段名字冲突的问题,虽然让数据库里面的字段不要叫Password可以解决问题,但是毕竟比较丑陋,结果试了一下在映射文件里面的column属性里加上中括号修饰,也通过了,OK,问题不完美解决。

如果想要的话,可以在映射文件的所有字段名上加上中括号,当然,其实只有Username和Password是必须的。

还是没有找到程序中哪里可以修改,自动为字段名添加修饰,难道没有考虑到这个功能?经过两天的苦战,得出一个结论,NHibernate不适合Access开发,还是放弃吧。

前面很容易的搞定了Driver的问题以后,自以为离成功已经很近了,但是没有想到,真正的困难还在后面。

通常数据库程序中最常用的一个关系就是一对多的关系,这也是NHibernate推荐使用的关系类型,于是很简单的建了一个数据库,一个Groups表,包括GroupID和GroupName,一个Items表,包括ItemID和ItemName还有GroupID。

通常这个关系可以代表数据库系统中绝大部分关系类型。

比如用户和组,产品和类别,等等。

按照上一次写的Config文件和hbm.xml文件,很快写好了整个系统的框架,不过对于一对多的关系如何处理还没有思路,看了看别人的文章,都是一个set做One-to-more,另一个做More-to-one,在Group类里定义了一个Items的变量,变量类型一开始使用IDictionary,在Item类里定义了一个Group类型的变量,代表它所对应的Group,(一开始定义成了Int型的GroupID,后来发现这是个严重的错误,总是提示无法转换成正确的类型)。

结果单独创建了一个Group变量再保存的时候都一直报错,说数据类型转换错误,后来查了一些英文资料,好像在C#里没有办法把IDictionary转换成NHibernate使用的Set类型,要用 ICollection,但是把Items改成这个类型以后,发现这个类型本身没有Add方法,那怎么把它的Item加进来呢?百思不得其解啊。

似乎没有一篇文章提到这个解决方案。

晚上再努力查找,终于看到一丝线索,NHibernate内部使用的是 Iesi.Collections.ISet 接口类型,它派生出了好几种类型,对应不同功能的列表。

ISet这个东西C#本身是不具备的,这是这个第三方库模仿Java做出来的。

于是在Group里面加上这个引用,然后把Items 改成这个类型,哇,终于通过了,可以添加Group了。

开心。

接下来Load一个Group出来,创建一个Item,把这个Group变量赋给Item的Group属性。

保存Item,成功了!但是看来看去总觉得不是个味,好像那个一对多关系白定义了。

因为看人家的说法,应该是定义一个Group,然后定义一个Item,把这个Item添加到 Group的Items列表里,然后只要保存Group,那么这个Item也会自动保存,结果我试来试去不成功,提示一个错误,插入或更新出错,期望1 行,结果0行,可能是别的用户更改或删除的数据等等。

因为一开始做的是一个Web应用程序,结果在配置文件里设成show_sql为 true以后,还是没有办法看到生成的Sql语句,于是新建一个exe项目,代码一样,运行一下,果然看到Sql语句了。

奇怪的是,系统生成了两条语句,一个是插入新的Group,然后调用了一个Select @@identity,然后使用一个Update语句来更新Items表,结果生成的Where语句是ItemID=0。

就算这个0是个错误,那也应该生成Insert语句啊,为什么是Update呢?想了一下,总算是知道这个0是什么意思了,前面的那个Select @@identity对于Access无效,没有返回那个刚刚插入的id,所以就成了0。

这个问题恐怕不是我能解决的了,没有了这个功能,使用NHibernate还有什么意义?如果无法提取关联对象,还要自己负责维护这个关系的话,恐怕还要出现一些条件语句在系统里,那就真的不如不用了。

等会试一下用Sql Server是不是没有这个问题,还有再试一下提取对象是否能够自动关联起来。

遇到了传说中的人品问题。

今天终于搞定了NHibernate的一对多问题,不知道是因为它的版本升级了还是真的我的人品问题,反正按照网上看来的代码没有一个可以正确执行的。

最终发现还需要多一步操作,就是对于每个Item都需要一步Session.Save,而不是像网上所说的那样只要Save(Group)就可以自动Save Item。

完整的工作流程:建立Configuration,Load XML文件(或者AddAssembly),生成SessionFa cto ry,生成Session,生成Transaction,新建Group,设定属性,Session.Save(Group),(或者Load Group),新建Item,设定属性,特别要指定它的Group 属性,跟组对应起来,Session.Save(Item),如果有多个Item,重复这个过程,然后mit,数据就已经保存进数据库了,Session.Close。

相关文档
最新文档