1. 小视频教程 > 知识库 >

uniqueresult,在Hibernate中Query的uniqueResult查询和Result查

本文目录索引

1,在Hibernate中Query的uniqueResult查询和Result查询有什么区别

  Java代码
public User get(String id){
  Session session=HibernateUtil.getSessionFactory().openSession();
  String hql="from User u where u.id = ?";
  List list=session.createQuery(hql).setString(0, id).list();
  if (list.size()==1){
  return (User)list.get(0);
  }else{
  return null;
  }
  }
  public User get(String id){ Session session=HibernateUtil.getSessionFactory().openSession(); String hql="from User u where u.id = ?"; List list=session.createQuery(hql).setString(0, id).list(); if (list.size()==1){ return (User)list.get(0); }else{ return null; } }


  昨天重读hibernate的参考手册,发现query接口提供了一个更好的方法用来获取实例,当返回的实例明确只有一个或者为null的时候。
  uniqueResult
public Object uniqueResult()throws HibernateException
返回:单个实例或者null
抛出:当返回的实例大于一个的时候的抛出NonUniqueResultException
对应的使用方法如下
Java代码
public User get(String id){
  Session session=HibernateUtil.getSessionFactory().openSession();
  String hql="from User u where u.id=?";
  return (User)session.createQuery(hql).setString(0,id).uniqueResult();
  public User get(String id){ Session session=HibernateUtil.getSessionFactory().openSession(); String hql="from User u where u.id=?"; return (User)session.createQuery(hql).setString(0,id).uniqueResult();
}
  备注:感觉不是很实用呀,当查询条件不太确定是否只有一条记录时,这时候就出麻烦了。转载,仅供参考。

在Hibernate中Query的uniqueResult查询和Result查询有什么区别

2,java中Result和ResultSet的区别,各有什么优点?

二者的区别在于前者对于修改不敏感,而后者对于修改敏感
resultSetConcurency是设置ResultSet对象能够修改的,取值如下:
ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。

以下两种方法的共性:返回可滚动的结果集,当数据库变化时,当前结果集同步改变。
不可用结果集更新数据库:
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
可用结果集直接更新数据库:
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATETABLE);

3,求Delphi编译错误全部。。。。

* 编 译 错 误 信 息 *
*******************************
’;’ not allowed before ’ELSE’ ElSE前不允许有“;”
’<clause>’ clause not allowed
in OLE automation section 在OLE自动区段不允许“<clause>”子句
’<name>’ is not a type
identifier <name>不是类型标识符
’<name>’ not previously
declared as a PROPERTY <name>前面没有说明PROPERTY
’GOTO <label>’ leads into or out of TRY statement GOTO <label>进入或超出TRY语句的范围
<clause1> clause expected, but
<clause2> found 要求子句<clause1>,但出现<clause2>
16-Bit fixup encountered in object file ’<text>’ 在对象文件<text>遇到16位修复
486/487 instructions not enabled 不能用486/487指令
Abstract methods must be virtual or dynamic 抽象方法必须为虚拟的或动态的
Array type required 需要数组类型
Assignment to FOR-Loop variable ’<Name>’ 给FOR循环变量<Name>赋值
Bad argument type in variable type array constructor 在变量类型数组结构中不正确的参数类型
Bad file format ’<name>’ 错误的文件格式<name>
Bad file format: <Filename> 错误的文件格式<Filename>
Bad global symbol definition: ’<Name>’ in object file ’<Filename>’ 对象文件’<Filename>’中错误的全局符号定义’<Name>’
Bad unit format: <Filename> 错误的单元格式<Filename>
BREAK or CONTINUE outside of loop BREAK或CONTINUE超出循环
Cannot add or subtract relocatable symbols 不能增加或减少可重置的符号
Cannot assign to a read-only property 不能指定只读属性
Cannot BREAK, CONTINUE or EXIT out of a FINALLY clause 超出FINALLY子句的范围,不能使用BREAK,CONTINUE或EXIT语句
Cannot initialize local variables 不能初始化局部变量
Cannot initialize multiple variables 不能初始化多个变量
Cannot initialize thread local variables 不能初始化线程局部变量
Cannot override a static method 不能覆盖静态方法
Cannot read a write-only property 不能读取只写属性
Case label outside of range of case expression CASE标号超出了CASE表达式的范围
Circular unit reference to <Unitname> 对单元<Unitname>循环引用
Class already has a default property 类已具有默认的属性
Class does not have a default property 类没有默认的属性
Class or object types only allowed in type section 在类型区段只允许有类或对象类型
Class type required 需要类类型
Close error on <Filename> 文件<Filename>关闭错误
Compile terminated by user 用户中止编译
Constant expected 要求常量
Constant expression expected 要求常量表达式
Constant expression violates subrange bounds 常量表达式超出子界范围
Constant object cannot be passed as var parameter 常量对象不能作为变量参数传递
Constant or type identifier expected 要求常量或类型标识符
Constants cannot be used as open array arguments 常量不能用作打开数组参数
Constructing instance of ’<name>’ containing abstract methods 构造的<name>实体包含抽象的方法
Could not compile used unit ’<Unitname>’ 不能用单元<Unitname>编译
Could not create output file <Filename> 不能建立输出文件<Filename>
Could not load RLINK32.DLL 不能加载RLINK32.DLL
Data type too large: exceeds 2 GB 数据类型太大:超过2GB
Declaration of <Name> differs from previous declaration <Name>的说明与先前的说明不同
Default property must be an array property 默认的属性必须为数组属性
Default values must be of ordinal, pointer or small set type 默认的值必须为序数、指针或小集类型
Destination cannot be assigned to 目标不能指定
Destination is inaccessible 目标不能存取
Dispid ’<number>’ already used by ’<name>’ DISPID标识号已被<name>使用
Dispid clause only allowed in OLE automation section DISPID子句只能在OLE自动区段中使用
Division by zero 除数为零
Duplicate case label CASE标号重复
Duplicate tag value 重复的标志值
Dynamic method or message handler not allowed here 这里不允许有动态方法或信息处理程序
Dynamic methods and message handlers not allowed in OLE automation section在OLE自动区段不允许有动态方法或消息处理程序
Element 0 inaccessible - use ’Length’ or ’SetLength’ 元素0不能存取-使用LENGTH或SETLENGTH
Error in numeric constant 数值常量错误
EXCEPT or FINALLY expected 要求EXCEPT或FINALLY
EXPORTS allowed only at global scope EXPORTS只允许在全局范围使用
Expression has no value 表达式没有值
Expression too complicated 表达式太复杂
Field definition not allowed in OLE automation section 在OLE自动区段中不允许域定义
Field definition not allowed after methods or properties 在方法或属性后不允许域定义
Field or method identifier expected 要求域或方法标识符
File not found: <Filename> 文件<Filename>没有找到
File type not allowed here 这儿不允许文件类型
For loop control variable must be simple local variable FOR循环控制变量必须为简单局部变量
For loop control variable must have ordinal type FOR循环控制变量必须为序数类型
FOR or WHILE loop executes zero times - deleted FOR或WHILE循环执行零次-删除
FOR-Loop variable ’<name>’ cannot be passed as var parameter FOR循环变量<name>不能作为参数传递
FOR-Loop variable ’<Name>’ may be undefined after loop 在循环后的FOR循环变量<NAME>是不确定的
Function needs result type 函数需要结果类型
Identifier redeclared: ’<name>’ 标识符<name>重复说明
Illegal character in input file: ’<char>’ ($<hex>) 在输入文件中的非法字符’<char>’
Illegal message method index 非法的消息方法指针
Illegal reference to symbol ’<Name>’ in object file ’<Filename>’ 在对象文件<filename>中对符号<name>的非法引用
Illegal type in OLE automation section: ’<typename>’ 在OLE自动区段中的非法类型<typename>
Illegal type in Read/Readln statement 在Read/Readln语句中的非法类型
Illegal type in Write/Writeln statement 在Write/Writeln语句中的非法类型
Inaccessible value 不可存取的值
Incompatible types: ’<name>’ and ’<name>’ 不兼容的类型<name>和<name>
Incompatible types: <text> 不兼容的类型<text>
Inline assembler stack overflow 内联汇编溢出
Inline assembler syntax error 内联汇编语法错误
Instance variable ’<name>’ inaccessible here 实体变量<name>在这里不能存取
Integer constant or variable name expected 要求整形常量或变量名
Integer constant too large 整型常量太大
Internal error: <ErrorCode> 内部错误<errorcode>
Invalid combination of opcode and operands 操作码与操作对象的无效组合
Invalid compiler directive: ’<Directive>’ 无效的编译指令<DIRECTIVE>
Invalid function result type 无效的函数值类型
Invalid message parameter list 无效的消息参数列表
Invalid register combination 无效的寄存器组合
Invalid typecast 无效的TYPECASE
Label ’<Name>’ is not declared in current procedure 在当前的过程中没有说明标号<NAME>
Label already defined: ’<Labelname>’ 标号<LABELNAME>已经定义
Label declaration not allowed in interface part 在界面部分不允许标号说明
Label declared and referenced, but not set: ’<label>’ 标号被<label>说明及引用,但不能设置
Label expected 要求标号
Left side cannot be assigned to 左边不能赋值
Line too long (more than 255 characters) 行太长(超出255个字符)
Local class or object types not allowed 不允许局部的类或对象类型
Local procedure/function ’<Name>’ assigned to procedure variable 局部过程/函数<NAME>赋给过程变量
LOOP/JCXZ distance out of range LOOP/JCXZ距离超出范围
Low bound exceeds high bound 下界超过上界
Memory reference expected 要求内存引用
Method ’<name>’ hides virtual method of base type ’<name>’ 方法<NAME>隐藏了基类型为<NAME>的虚拟方法
Method ’<name>’ not found in base class 在基类中没有找到方法<NAME>
Method identifier expected 要求方法标识符
Missing ENDIF directive 缺少ENDIF指令
Missing operator or semicolon 缺少操作符或分号
Missing or invalid conditional symbol in ’$<symbol>’ directive 在$<symbol>指令中缺少或无效的条件符号
Missing parameter type 缺少参数类型
Necessary library helper function was eliminated by linker 必要的库帮助函数被连接程序删除
No definition for abstract method ’<name>’ allowed 抽象方法<NAME>没有定义
Not enough actual parameters 没有足够的实际参数
Number of elements differs from declaration 元素数与说明不同
Numeric overflow 数值溢出
Object or class type required 需要对象或类类型
Object type required 需要对象类型
Only register calling convention allowed in OLE automation section 在OLE自动区段中只允许寄存器调用约定
Operand size mismatch 运算对象大小匹配
Operator not applicable to this operand type 运算符不使用于这一运算对象类型
Order of fields in record constant differs from declaration 在记录常量中的域次序与说明不同
Ordinal type required 需要序数类型
Out of memory 内存溢出
Overflow in conversion or arithmetic operation 转换或算术操作溢出
Overriding automated virtual method ’<name>’ cannot specify a dispid 覆盖的自动虚拟方法<NAME>不能指定DISPID
PACKED not allowed here 这里不允许PACKED
Pointer type required 需要指针类型
Procedure cannot have a result type 过程不能有结果类型
Procedure DISPOSE needs destructor 过程DISPOSE需要destructor
Procedure FAIL only allowed in constructor 过程FAIL只允许在constructor方法中
Procedure NEW needs constructor 过程NEW需要constructor方法
PROCEDURE or FUNCTION expected 要求PROCEDURE或FUNCTION
Procedure or function name expected 要求过程或函数名
Program or unit ’<name>’ recursively uses itself 程序或单元递归
Property ’<name>’ does not exist in base class 在基类中<NAME>属性不存在
Published property ’<name>’ cannot be of type <type> Published属性<NAME>不能具有类型<type>
Published Real48 property ’<name>’ must be Single, Double or Extended Published
REAL属性<NAME>必须为Single, Double或Extended
Re-raising an exception only allowed in exception handler 在意外处理中只允许重新引起意外处理
Read error on <Filename> 文件<FILENAME>读出错
Record, object or class type required 需要记录,对象或类类型
Redeclaration of ’<name>’ hides a member in the base class <NAME>的重新说明隐藏了基类中一个元素
Redeclaration of property not allowed in OLE automation section 在OLE自动区段中不允许属性重复说明
Return value of function ’<Functionname>’ might be undefined 函数<Functionname>的返回值可能没有定义
Seek error on <Filename> 在<FILENAME>中搜索错误
Segment/Offset pairs not supported in Borland 32-bit Pascal 在Borland 32位的PASCAL中不支持Segment/Offset对
Sets may have at most 256 elements 集至少有256个元素
Size of published set ’<name>’ is >32 bits published集<NAME>的大小大于32字节
Slice standard function only allowed as open array argument Slice标准函数只允许作为打开数组参数
Statement expected, but expression of type ’<type>’ found 要求语句,但出现类型<TYPE>的表达式
Statements not allowed in interface part 在界面中不允许的语句
String constant too long 字符串常量太长
String constant truncated to fit STRING[<number>] 字符串常量截取到适合STRING[<number>]
Strings may have at most 255 elements 字符串至少255个元素
Structure field identifier expected 要求结构域标识符
Syntax error in real number 实数语法错误
System unit out of date or corrupted: missing ’<name>’ 系统单元超出日期或损坏:缺少<NAME>
Text after final ’END. 编译器忽略END.后的文本
This form of method call only allowed for class methods 该方法的窗体只允许类方法
This form of method call only allowed in methods of derived types 该方法的窗体只允许在导出类型的方法中
This type cannot be initialized 这一类型不能初始化
Thread local variables cannot be ABSOLUTE 线程局部变量不能是ABSOLUTE
Thread local variables cannot be local to a function or procedure 线程局部变量对函数不能是局部的
Too many actual parameters 太多的实际参数
Too many conditional symbols 太多的条件符号
Type ’<name>’ has no type info 类型<NAME>没有类型信息
Type ’<Name>’ is not yet completely defined 类型<NAME>至今没有定义
Type ’<name>’ must be a class to have a PUBLISHED section 类型<NAME>必须是在PUBLISHED区段中的类
Type ’<name>’ must be a class to have OLE automation 类型<NAME>必须是具有OLE自动的类
Type ’<name>’ needs finalization - not allowed in file type 类型<NAME>需要初始化-不允许在文件类型中
Type ’<name>’ needs finalization - not allowed in variant
record 类型<NAME>需要初始化-不允许在变体记录
Type expected 要求TYPE
Type not allowed in OLE Automation call 在OLE自动调用中不允许的类型
Type of expression must be BOOLEAN 表达式的类型必须为BOOLEAN型
Type of expression must be INTEGER 表达式的类型必须为INTEGER型
TYPEINFO standard function expects a type identifier TYPEINFO标准函数要求类型标识符
TYPEOF can only be applied to object types with a VMT TYPEOF只能用于具有VMT的对象类型
Types of actual and formal var parameters must be identical 形参与实参必须一致
Undeclared identifier: ’<name>’ 未说明的标识符<NAME>
Unexpected end of file in comment started on line <Number> 以行<Number>开始的注释中出现不应有的文件结束
Unit <Unit1> was compiled with a
different version of <Unit2> 单元<UNIT1>与不同版本的<UNIT2>编译
Unit name mismatch: ’<Unitname>’ 单元名不匹配<UNITNAME>
Unknown directive: ’<Directive>’ 未知的指令<DIRECTIVE>
Unnamed arguments must precede named arguments in OLE Automation call 在OLE自动调用中未命名的参数必须在命名的参数前
Unsatisfied forward or external declaration: ’<Procedurename>’ 不满足的向前或外部说明<Procedurename>
Unterminated string 未结束的字符串
Value assigned to ’<Name>’ never used 赋给<NAME>的值从未使用过
Variable ’<name>’ inaccessible here due to optimization 由于优化,变量名<NAME>在这里不能存取
Variable ’<name>’ is declared but never used in ’<name>’ 变量名<NAME>已说明,但不曾使用
Variable ’<Name>’ might not have been initialized 变量名<NAME>可能没有初始化
Variable required 需要变量
Virtual constructors are not allowed 不允许虚拟的constructors方法
Write error on <Filename> 文件<Filename>写错误
Wrong or corrupted version of RLINK32.DLL RLINK32.DLL版本错误或不能用
***********************************************************************************************

4,如何给SQLSERVER存储过程传递数组参数

数组不能传递,变通的解决办法是有的
思路如下:
1、将数组转换为字符串格式(例如:a,b,c,d)
2、在数据库内创建字符串分割为行的表值函数
3、若是需要将一个二维数组传递的话,需要将每列数据都格式化为1的方式,然后再用2的方式转换为行,再将转换后的数据组合为一个表
4、你就可以直接进行插入、编辑、删除或查询操作了。

5,如何给SQLSERVER存储过程传递数组参数

举例说明:
CREATE PROCEDURE dbo.DoSomethingWithEmployees
@List AS dbo.EmployeeList READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT EmployeeID FROM @List;
END
GO

在C#中的写法:
DataTable tvp = new DataTable();
using (conn)
{
SqlCommand cmd = new SqlCommand("dbo.DoSomethingWithEmployees", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter tvparam = cmd.Parameters.AddWithValue("@List", tvp);
tvparam.SqlDbType = SqlDbType.Structured;
// 执行存储过程,并获取结果
}

6,java中如何取得一组数字的最大值?

以下是Java中的List ,如果是数组,大同小异 package com;import java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { //初始化数组 List nums = new ArrayList(); nums.add(2); nums.add(5); nums.add(10); nums.add(6); nums.add(3); //设置最大值Max int Max = Collections.max(nums); System.out.println("Max = " + Max); }}

7,定义一个方法,用于获得int数组中的最大值及对应的索引java

public int[] getMaxIndex(int[] arr){
if(arr==null||arr.length==0){
return null;//如果数组为空 或者是长度为0 就返回null
}
int maxIndex=0;//假设第一个元素为最大值 那么下标设为0
int[] arrnew=new int[2];//设置一个 长度为2的数组 用作记录 规定第一个元素存储最大值 第二个元素存储下标
for(int i =0;i<arr.length-1;i++){
if(arr[maxIndex]<arr[i+1]){
maxIndex=i+1;
arrnew[0]=arr[maxIndex];
arrnew[1]=maxIndex;
}
}
return arrnew;
}
希望能帮到你 谢谢