Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数据库中搜索_Java_Mysql_Hibernate - Fatal编程技术网

Java 在数据库中搜索

Java 在数据库中搜索,java,mysql,hibernate,Java,Mysql,Hibernate,我需要一些建议如何在数据库中执行搜索。例如,我在数据库中有一个名为:Student的表,列为:姓名、姓氏、大学、年龄、课程 当我填写搜索表时,我没有指定姓氏和大学,我希望我的搜索结果是每个学生,其中姓名=我指定的姓名、年龄-我指定的年龄和课程-我指定的课程和姓氏和大学可以是任何一个 有人能给我一些建议吗 编辑 感谢您的快速重播。但似乎我不明白,或者它不起作用。这是我真正的疑问: SELECT UNIVERSITY, INFORMANT_NAME, AGE FROM informant WHE

我需要一些建议如何在数据库中执行搜索。例如,我在数据库中有一个名为:
Student
的表,列为:
姓名、姓氏、大学、年龄、课程

当我填写搜索表时,我没有指定姓氏和大学,我希望我的搜索结果是每个学生,其中姓名=我指定的姓名、年龄-我指定的年龄和课程-我指定的课程和姓氏和大学可以是任何一个

有人能给我一些建议吗

编辑

感谢您的快速重播。但似乎我不明白,或者它不起作用。这是我真正的疑问:

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='%VDU%' 
  AND INFORMANT_NAME='%Mindaugas Jonaitis%' 
  AND AGE='%21%';
它不会给我任何结果

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='VDU' 
  AND INFORMANT_NAME='Mindaugas Jonaitis' 
  AND AGE='21';
此查询没有,但仅针对指定的值。我希望返回的结果将是表中的所有数据,其中
UNIVERSITY='VDU'
或其他未提供或提供null的值,或将被跳过的内容

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='VDU' 
  AND INFORMANT_NAME='????'   
  AND AGE='????';

有很多方法可以做到这一点。但是对于所有这些,您都需要从
Hibernate
获取
会话。从那时起,您可以:

  • 命名查询创建
    查询
    对象
  • sql字符串创建
    Query
    对象
  • 创建
    标准
    对象
然后,只需一个
query.list()
criteria.list()

有关更多信息:


如果你想使用通配符,你需要像
一样使用
,而不是
=

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY LIKE '%VDU%' 
  AND INFORMANT_NAME LIKE '%Mindaugas Jonaitis%' 
  AND AGE LIKE '%21%';
但是,如果在前导通配符中使用
之类的
,则无法在该字段上使用索引。
如果您在MyISAM中使用MySQL,请在要使用通配符搜索的字段上放置全文索引,并使用:

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY LIKE '%VDU%' 
  AND MATCH(INFORMANT_NAME) AGAINST('Mindaugas Jonaitis')
  AND AGE LIKE '21%';

匹配。。反
仅适用于长度超过4个字符的搜索短语。而且,在年龄上使用前导通配符搜索也没有任何意义。我通常不想得到所有
21,31,41
的人,但我通常想得到所有20多岁的人。

findByExample DAO方法在这里总是有用的