当前位置:文档之家› hibernate操作数据库 插入修改数据库默认值 dynamic-insert dynamic-update

hibernate操作数据库 插入修改数据库默认值 dynamic-insert dynamic-update

hibernate操作数据库 插入修改数据库默认值 dynamic-insert dynamic-update
hibernate操作数据库 插入修改数据库默认值 dynamic-insert dynamic-update

hibernate操作数据库插入修改数据库默认值dynamic-insert dynamic-update

[size=medium][/size]

Hibernate允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中

1)元素insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true

2)元素update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true

3)元素mutable属性:设置为false就是把所有的元素的update属性设置为了false,说明这个对象不会被更新,默认true

4)元素dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到insert语句当中.默认false

5)元素dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false.有hibernate提供了dynamic-update属性你只要设置为true就可以在更新的时候只更新发生改变的字段其余字段保持数据库中的原有值。

6)元素dynamic-insert属性:设置为true,表示把所有的元素的dynamic-insert属性设置为true,默认false

7)元素dynamic-update属性:设置为true,表示把所有的元素的dynamic-update属性设置为true,默认false

Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语句的执行时间,提高程序的运行效率.

---------------------------------------------------------------------------------------------------------------------- Hibernate之formula

Hibernate映射文件的部分,property元素有一个formula属性。该属性的意思是,可以在值对象中定义一个字段,但在映射文件中不映射成对应数据库的字段,而是通过formula属性指定一个sql语句。将sql语句的返回值赋给该字段。当时就觉得这个属性挺有用的。今天做到成绩管理那部分,突然想到需要一个成绩的排名。本来想在数据库中定义一个rank 的字段。但是由于排名是不固定的,只能在获取成绩数据的时候动态的决定排名。于是就想起这个属性来了。

在我的值对象score.java中加上一个rank字段,然后在映射文件中加上一下这句代码

懂sql的都能看明白吧,我说一下需要注意的。首先是sql语句一定要放到一对括号了。然后在引用数据库字段时一定要定义别名,如果不使用别名的话,像我这个sql里,直接写student_score代表当前对象代表的记录行的数据。这个sql语句的意思就是,找出score 表里student_score的数值比当前对象的student_score大的数据的行数。返回这个数加1,就是当前的排名了。

经过这样的写法,在jsp文件中就可以直接使用score.rank获得当前成绩的排名了

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第17 章Native SQL查询

上一页下一页第17 章Native SQL查询

你也可以使用你的数据库的Native SQL语言来查询数据。这对你在要使用数据库的某些特性的时候(比如说在查询提示或者Oracle中的CONNECT关键字),这是非常有用的。这就能够扫清你把原来直接使用SQL/JDBC 的程序迁移到基于Hibernate应用的道路上的障碍。Hibernate3允许你使用手写的sql来完成所有的create,update,delete,和load操作(包括存储过程)

17.1. 创建一个基于SQL的Query

SQL查询是通过SQLQuery接口来控制的,它是通过调用Session.createSQLQuery()方法来获得

List cats = sess.createSQLQuery("select {cat.*} from cats cat")

.addEntity("cat", Cat.class);

.setMaxResults(50);

.list();

这个查询指定了:

SQL查询语句,它带一个占位符,可以让Hibernate使用字段的别名.

查询返回的实体,和它的SQL表的别名.

addEntity()方法将SQL表的别名和实体类联系起来,并且确定查询结果集的形态。addJoin()方法可以被用于载入其他的实体和集合的关联,TODO:examples!

原生的SQL查询可能返回一个简单的标量值或者一个标量和实体的结合体。

Double max = (Double) sess.createSQLQuery("select max(cat.weight) as maxWeight from cats cat")

.addScalar("maxWeight", Hibernate.DOUBLE);

.uniqueResult();

17.2. 别名和属性引用

上面使用的{cat.*}标记是"所有属性" 的简写.你可以显式地列出需要的字段,但是你必须让Hibernate 为每一个属性注入字段的别名.这些字段的站位符是以字段别名为前导,再加上属性名.在下面的例子里,我们从一个其他的表(cat_log) 中获取Cat对象,而非Cat对象原本在映射元数据中声明的表.注意我们甚至在where子句中也可以使用属性别名. 对于命名查询,{}语法并不是必需的.你可以在第17.3 节“命名SQL查询”得到更多的细节.

String sql = "select cat.originalId as {cat.id}, " +

"cat.mateid as {cat.mate}, cat.sex as {cat.sex}, " +

"cat.weight*10 as {cat.weight}, https://www.doczj.com/doc/f618885081.html, as {https://www.doczj.com/doc/f618885081.html,} " +

"from cat_log cat where {cat.mate} = :catId"

List loggedCats = sess.createSQLQuery(sql)

.addEntity("cat", Cat.class)

.setLong("catId", catId)

.list();

注意:如果你明确地列出了每个属性,你必须包含这个类和它的子类的属性! and its subclasses!

17.3. 命名SQL查询

可以在映射文档中定义查询的名字,然后就可以象调用一个命名的HQL查询一样直接调用命名SQL查询.在这种情况下,我们不需要调用addEntity()方法.

SELECT https://www.doczj.com/doc/f618885081.html, AS {https://www.doczj.com/doc/f618885081.html,},

person.AGE AS {person.age},

person.SEX AS {person.sex}

FROM PERSON person WHERE https://www.doczj.com/doc/f618885081.html, LIKE 'Hiber%'

List people = sess.getNamedQuery("mySqlQuery")

.setMaxResults(50)

.list();

一个命名查询可能会返回一个标量值.你必须使用元素来指定字段的别名和Hibernate类型

SELECT https://www.doczj.com/doc/f618885081.html, AS name,

p.AGE AS age,

FROM PERSON p WHERE https://www.doczj.com/doc/f618885081.html, LIKE 'Hiber%'

元素分别用作外连接和定义那些初始化集合的查询

17.3.1. 使用return-property来明确地指定字段/别名

使用你可以明确的告诉Hibernate使用哪些字段,这和使用{}-语法来让Hibernate注入它自己的别名是相反的.

SELECT https://www.doczj.com/doc/f618885081.html, AS myName,

person.AGE AS myAge,

person.SEX AS mySex,

FROM PERSON person WHERE https://www.doczj.com/doc/f618885081.html, LIKE :name

也可用于多个字段,它解决了使用{}-语法不能细粒度控制多个字段的限制

SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},

STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},

REGIONCODE as {emp.regionCode}, EID AS {emp.id}, V ALUE, CURRENCY

FROM EMPLOYMENT

WHERE EMPLOYER = :id AND ENDDATE IS NULL

ORDER BY STARTDA TE ASC

注意在这个例子中,我们使用了结合{}的注入语法. 允许用户来选择如何引用字段以及属性.

如果你映射一个识别器(discriminator),你必须使用来指定识别器字段17.3.2. 使用存储过程来查询

Hibernate 3引入了对存储过程查询的支持. 存储过程必须返回一个结果集,作为Hibernate能够使用的第一个外部参数. 下面是一个Oracle9和更高版本的存储过程例子.

CREATE OR REPLACE FUNCTION selectAllEmployments

RETURN SYS_REFCURSOR

AS

st_cursor SYS_REFCURSOR;

BEGIN

OPEN st_cursor FOR

SELECT EMPLOYEE, EMPLOYER,

STARTDATE, ENDDA TE,

REGIONCODE, EID, V ALUE, CURRENCY

FROM EMPLOYMENT;

RETURN st_cursor;

END;

在Hibernate里要要使用这个查询,你需要通过命名查询来映射它.

{ ? = call selectAllEmployments() }

注意存储过程当前仅仅返回标量和实体.现在不支持

17.3.2.1. 使用存储过程的规则和限制

为了在Hibernate中使用存储过程,你必须遵循一些规则.不遵循这些规则的存储过程将不可用.如果你仍然想要使用他们, 你必须通过session.connection()来执行他们.这些规则针对于不同的数据库.因为数据库提供商有各种不同的存储过程语法和语义.

对存储过程进行的查询无法使用setFirstResult()/setMaxResults()进行分页。

对于Oracle有如下规则:

存储过程必须返回一个结果集.它通过返回SYS_REFCURSOR实现(在Oracle9或10),在Oracle里你需要定义一个REF CURSOR 类型

推荐的格式是{ ? = call procName() } 或{ ? = call procName }(这更像是Oracle 规则而不是Hibernate规则)

对于Sybase或者MS SQL server有如下规则:

存储过程必须返回一个结果集。.注意这些servers可能返回多个结果集以及更新的数目.Hibernate将取出第一条结果集作为它的返回值,其他将被丢弃。

如果你能够在存储过程里设定SET NOCOUNT ON,这可能会效率更高,但这不是必需的。

17.4. 定制SQL用来create,update和delete

Hibernate3能够使用定制的SQL语句来执行create,update和delete操作。在Hibernate中,持久化的类和集合已经包含了一套配置期产生的语句(insertsql, deletesql, updatesql等等),这些映射标记, , and 重载了这些语句。

INSERT INTO PERSON (NAME, ID) V ALUES ( UPPER(?), ? ) UPDA TE PERSON SET NAME=UPPER(?) WHERE ID=?

DELETE FROM PERSON WHERE ID=?

这些SQL直接在你的数据库里执行,所以你可以自由的使用你喜欢的任意语法。但如果你使用数据库特定的语法,这当然会降低你映射的可移植性。

如果设定callable,则能够支持存储过程了。

{call createPerson (?, ?)}

{? = call deletePerson (?)}

{? = call updatePerson (?, ?)}

参数的位置顺序是非常重要的,他们必须和Hibernate所期待的顺序相同。

你能够通过设定日志调试级别为org.hiberante.persister.entity,来查看Hibernate所期待的顺序。在这个级别下,Hibernate将会打印出create,update和delete实体的静态SQL。如果想看到预想中的顺序。记得不要将定制SQL包含在映射文件里,因为他们会重载Hibernate生成的静态SQL。

在大多数情况下(最好这么做),存储过程需要返回插入/更新/删除的行数,因为Hibernate对语句的成功执行有些运行时的检查。Hibernate常会把进行CUD操作的语句的第一个参数注册为一个数值型输出参数。

CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN V ARCHAR2) RETURN NUMBER IS

BEGIN

update PERSON

set

NAME = uname,

where

ID = uid;

return SQL%ROWCOUNT;

END updatePerson;

17.5. 定制装载SQL

你可能需要声明你自己的SQL(或HQL)来装载实体

SELECT NAME AS {https://www.doczj.com/doc/f618885081.html,}, ID AS {p.id} FROM PERSON WHERE ID=? FOR UPDATE

这只是一个前面讨论过的命名查询声明,你可以在类映射里引用这个命名查询。

这也可以用于存储过程

TODO: 未完成的例子

SELECT {empcol.*}

FROM EMPLOYMENT empcol

WHERE EMPLOYER = :id

ORDER BY STARTDA TE ASC, EMPLOYEE ASC

SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer}, STARTDATE AS {emp.startDate}, ENDDA TE AS {emp.endDate},

REGIONCODE as {emp.regionCode}, ID AS {emp.id}

FROM EMPLOYMENT

WHERE EMPLOYER = :id AND ENDDA TE IS NULL

ORDER BY STARTDA TE ASC

上一页上一级下一页

第16 章条件查询(Criteria Queries) 起始页

第18 章过滤数据

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Hibernate 条件查询的用法

Hibernate中条件查询,通过如下3个类完成。

Criteria:代表一次查询。

Criterion:代表一个条件查询。

Restrictions:产生条件查询的工具类。

执行条件查询的步骤:

1.获取Hibernate的Session对象。

2.以Session对象创建Criteria对象。

3.使用Restrictions的静态方法创建Criterion查询条件。

4.向Criteria添加Criterion查询条件。

5.执行Criteria的list等方法返回结果。

以下是一个小例子,利于理解:

Configuration c = new Configuration().configuration();

SessionFactory sf = c.buildSessionFactory();

Session s = sf.openSession();

Criteria t = s.createCriteria(User.class);//物件表名是User;

List users = t.list();

for(Iterator it = user.iterator();it.hasnext())

{

User user = (User)it.next();

System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t" +user.getAge());

}

一个不带where条件的基本的查询,把它翻译成SQL语句,相当于:

select this_.username,this_.password,this_.age from user;

用Criteria进行带条件的语句查询:

Criteria t = s.createCriteria(User.class);//物件表名是User;

t.add(Restrictions.gt("age", "20"));//选择age>20

t.add(Restrictions.lt("age", "30"));//选择age<30

t.addOrder(Order.desc("age"));//排序

List users = t.list();

for(Iterator it = user.iterator();it.hasnext())

{

User user = (User)it.next();

System.out.println(user.getUsername()+"\t"+user.getPassword()+"\t" +user.getAge());

}

以上是对Criteria的使用和具体对应查询条件的方法做了简单的介绍。

MySQL数据库高级查询和多表查询二

机试测试试卷 (MySQL数据库应用与开发) 注意:考试结束试卷必须交Array 回,不交回试卷者成绩无效题目:MySQL 数据库高级查询和多表查询 一、语言和环境 A、实现技术 SQL 语句练习 B、环境要求 Mysql5.7+Navicat 二、实验要求 1、创建名为 s_t 的数据库,参数全部使用 UTF-8 实验目的: 通过上机实验验证数据库的多表的高级查询操作。 实验内容:

1、将s_t数据库还原。 2、在s_t数据库中,完成以下多表连接查询的操作。 (1)查询计算机系学生的修课情况,要求列出学生的名字、所修课的课程号和成绩。 (2)查询“信息管理系”修了“计算机文化学”的学生姓名和成绩。 (3)查询所有选修了Java课程的学生情况,列出学生姓名和所在系。 (4)统计每个系的学生的考试平均成绩。 (5)统计计算机系学生每门课程的选课人数、平均成绩、最高成绩和最低成绩。 (6)查询与刘晨在同一个系学习的学生的姓名和所在的系。 (7)查询与“数据结构”在同一个学期开设的课程的课程名和开课学期。 (8)查询至少被两个学生选的课程的课程号。 (9)查询全体学生的选课情况,包括选修了课程的学生和没有选修课程的学生。 (10)查询没人选的课程的课程名。 (11)查询计算机系没有选课的学生,列出学生姓名和性别。 (12)统计计算机系每个学生的选课门数,包括没有选课的学生。 (13)查询信息管理系选课门数少于3门的学生的学号和选课门数,包括没有选课的学生。查询结果按选课门数递增排序。 (14)查询考试成绩最高的三个成绩,列出学号、课程号和成绩。 (15) 查询Java考试成绩最高的前三名的学生的姓名、所在系和VB考试成绩。 (16)查询选课人数最少的两门课程(不包括没有人选的课程),列出课程号和选课人数。 (17)查询计算机系选课门数超过2门的学生中,考试平均成绩最高的前2名(包括并列的情况)学生的学号、选课门数和平均成绩。 (18)将计算机系的学生信息保存到#ComputerStudent局部临时表中。 (19)将选了Java课程的学生的学号及成绩存入永久表Java_Grade中。 (20)统计每个学期开设的课程总门数,将结果保存到永久表Cno_Count表中 (21)利用例19题生成的新表,查询第2学期开设的课程名、学分和课程总门数。 3、在s_t数据库中,完成以下多表的高级查询操作。 (1)查询选了Java课程的学生的学号、姓名、所在系和成绩,并对所在系进行如下处理:“计算机系”:显示“CS”;“信息管理系”:显示“IM”;“通信工程系”:显示“COM”。(2)查询“C001”课程的考试情况,列出学号和成绩,对成绩进行如下处理:如果成绩大于等于90,则在查询结果中显示“优”;如果成绩在80到89分之间,则在查询结果中显示“良”;如果成绩在70到79分之间,则在查询结果中显示“中”;如果成绩在60到69分之间,则在查询结果中显示“及格”;如果成绩小于60分,则在查询结果中显示“不及格”。 (3)统计每个学生的考试平均成绩,列出学号、考试平均成绩和考试情况,其中考

C获取系统时间及时间格式

1、新建一个windows form 窗体应用程序。 2、在该窗体加载时,输入如下代码 [csharp] view plaincopy Thread P_thread = new Thread( () => //lambda表达式(参数列表)=>{执行语句} lambda表达式是比匿名方法更加简洁的一种匿名函数语法 { while (true) {//public Object Invoke (Delegate method)在(拥有此控件的基础窗口句柄的)线程上执行指定的委托。 //关于为何使用invoke方法,参见C#中跨线程调用控件的线程安全性方法一文 this.Invoke( (MethodInvoker)delegate()//methodinvoke 表示一个委托,该委托可执行托管代码中声明为void 且不接受任何参数的任何方法。 //在对控件的Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。 { this.Refresh(); Graphics P_Graphics = CreateGraphics(); // Control.CreateGraphics方法,为控件创建Graphics。 //public Graphics CreateGraphics () 返回值为控件的Graphics。Graphics 类提供将对象绘制到显示设备的方法 //public void DrawString( // string s, // Font font, // Brush brush, // PointF point //)在指定位置point并且用指定的Brush 和Font 对象绘制指定的文本字符串s。 P_Graphics.DrawString("系统时间:" + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒"), new Font("宋体", 15), Brushes.Blue, new Point(10, 10)); });//this.invoke Thread.Sleep(1000); }//while

SQLServer数据库的高级操作

(1)批处理 (2) (2)变量 (3) (3)逻辑控制 (5) (4)函数 (7) (4.1)系统函数 (7) (4.2)自定义函数 (13) (5)高级查询 (23) (6)存储过程 (35) (7)游标 (36) (8)触发器 (50) SQL Server 数据库的高级操作 (1) 批处理 (2) 变量 (3) 逻辑控制 (4) 函数 (5) 高级查询 */ (1)批处理 将多条SQL语句作为一个整体去编译,生成一个执行计划,然后,执行! 理解批处理的关键在于"编译",对于由多条语句组成的一个批处理, 如果在编译时,其中,有一条出现语法错误,将会导致编译失败! create table t ( a int,

)

-- 如果多行注释中包含了批处理的标识符go -- 在编译的过程中代码将会被go分割成多个部分来分批编译-- 多行注释的标记将会被分隔而导致编译出错 -- 以下几条语句是三个非常经典的批处理 -- 你猜一下会添加几条记录! /* insert into t values (1,1) go */ insert into t values (2,2) go /* insert into t values (3,3) */ go -- 查询看添加了几条记录 select * from t

truncate table t (2)变量 -- 全局变量 SQL Server中全局变量由系统定义、系统维护,用户一般仅可对其进行读取!-- 查看SQL Server版本 print @@version -- 服务器名称 print @@servername -- 系统错误编号 insert into t values ('a','a') print @@error insert into t values ('a','a') if @@error = 245 print 'Error' -- SQL Server 版本的语言信息 print @@LANGUAGE -- 一周的第一天从星期几算起 print @@datefirst

wincc系统日期时间获取

wincc系统日期时间获取 系统时间的获得,有两种办法,一是建立TAG,二是使用函数获取系统时间 方法一: 在[Tag Management]添加新的驱动"System Info.chn",然后在新添加的[SYSTEM INFO]新建连接,这样就可以创建实际TAG了; 下面新建几个TAG: 名字:date, 数据类型:text tag 8-bit character set,地址设定为Function:date,format:"MM-DD-YYYY" 名字:time, 数据类型:text tag 8-bit character set,地址设定为Function:Time,format:"HH:MM:SS" 根据上面的方法依次建立year,mon,day,week等TAG,请分别设置对应的format内容 TAG建立完成了,就可以读到系统时间了。新建一个图形文件,分别放置几个静态文本框[static text],把TEXT属性连接到上面新建的TAG,就可以显示系统日期时间,利用WEEK还能显示今天是星期几了. 方法二: 使用 C脚本获得系统时间 #include "apdefap.h" char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { time_t timer;

struct tm *ptm; char *p; time(&timer); ptm=localtime(&timer); p=SysMalloc(9); sprintf(p,"%04d:%02d:%02d",ptm->tm_year+1900,ptm->tm_mon+1,p tm->tm_mday); return(p); } 其中 //系统时间已经获得 //年: ptm -> tm_year+1900 //月: ptm-> tm_mon+1 //日: ptm -> tm_mday //星期: ptm -> tm_wday *注意这个,tm_wday返回的是整数,必须经过转换才能用来表示星期几

数据库实验报告高级查询

实验三高级查询 1实验目的 (1)掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。 2实验内容 2.1 掌握SQL高级查询使用方法 (1)分组统计。 (2)嵌套查询,包括IN查询、EXISTS查询。 (3)集合查询。 3实验要求 (1)深入复习教材第三章SQL有关高级查询语句。 (2)根据书上的例子,针对TPCH数据库模式设计分组统计查询、嵌套查询(IN、EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。也可以按照附2所列示例查询做实验。 (3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。 4实验步骤 4.1 掌握SQL高级查询使用方法 1 不带分组过滤条件的分组统计查询。 统计每个顾客订购金额。 Select sum(totalprice) From orders O,customer C Where O.custkey=C.custkey Group by O.custkey 2 带分组过滤条件的分组统计查询。 查询平均每个订单金额超过1000元的顾客编号及其姓名。 Select C.custkey,https://www.doczj.com/doc/f618885081.html, From orders O,customer C Where O.custkey=C.custkey Group by C.custkey,https://www.doczj.com/doc/f618885081.html, Having A VG (O.totalprice)>1000

3IN嵌套查询。 查询订购了“海大”制造的“船舶模拟驾驶舱”的顾客。 Select O.custkey From orders O Where O.orderkey in (select L.orderkey From lineitem L, Where L.partkey in (select P.partkey From part P Where https://www.doczj.com/doc/f618885081.html,=’ 船舶模拟驾驶舱’and p.mfgr=’ 海大’)) 4单层EXISTS嵌套查询。 查询没有购买过“海大”制造的“船舶模拟驾驶舱”的顾客。 Select O.custkey From orders O Where not exists (select * From lineitem L Where L.orderkey=O.orderkey and L.partkey in (select P.partkey From part P Where https://www.doczj.com/doc/f618885081.html,=’ 船舶模拟驾驶舱’and p.mfgr=’ 海大’)) 5双层EXISTS嵌套查询。 查询至少购买过顾客“张三”购买过的全部零件的顾客姓名。 Select distinct https://www.doczj.com/doc/f618885081.html, From customer C1,order O1,lineitem L1,part P1 Where C1.custkey=O1.custkey and O1.orderkey=L1.orderkey=P1.partkey and Not exists (select * Where C2.custkey=O2.custkey and O2.orderkey=L2.orderkey=P2.partkey and https://www.doczj.com/doc/f618885081.html,=’ 张三’and Not exists (select * From customer C3,order O3,lineitem L3,part P3 Where C3.custkey=O3.custkey and O3.orderkey=L3.orderkey=P3.partkey and P2.partkey=P3.partkey And C3,name=https://www.doczj.com/doc/f618885081.html,) )

labView中如何获取windows当前系统时间

labView中如何获取windows当前系统时间 《labview8.2入门到精通》的PPT,第4章里面有个练习是“写一个VI获取当前系统时间,并将其转换为字符串和浮点数”。完成效果如图。我要怎么来获取当前系统的时间呢? 程序如下,还是比较简单的,用到的函数都在编程---定时和编程---数值---转换里 问题: 我从一个仪器当中读取到了GPS时间,并想在LabVIEW中以较高的分辨率设定Windows系统时间。我注意到LabVIEW的时间函数选版中有获取时间/日期的VI,但没有设定时间的VI。如何才能在LabVIEW中实现时间设定?

解答: LabVIEW中没有现成的VI用于系统时间设定,但可以通过Windows SDK来实现。参考以下的步骤,通过调用库函数节点的方式,调用kernel32.dll中SetSystemTime函数,可以设定系统时间: 1. 在程序框图中放置一个调用库函数节点。双击此节点打开调用 库函数对话框。 2. 点击浏览按钮并选择kernel32.dll (一般放置于 "C:\WINDOWS\system32\kernel32.dll")。 3. 在函数名下拉列表中选择"SetSystemTime" 。 4. 在调用规范下拉列表中选择"stdcall (WINAPI)" 。 5. 在返回类型中选择“数值”以及“有符号8位整数”。 6. 点击添加参数并在类型中选择“匹配至类型”,接着在数据格式 中选择“句柄指针”。 7. 点击确定按钮,完成对调用库函数节点的配置。 8. 这个函数以一个包含八个双字节(16位整数)的结构体作为参 数。在LabVIEW中,需要创建一个包含八个双字节的簇来传 递这个参数。八个双字节分别为年、月、星期、日、小时、分 钟、秒以及毫秒。将此簇连接至调用库函数节点的参数1。 9. 输入相应的值,并运行程序以设定系统时间。

实验4:数据库的高级查询操作

实验四:数据库的各类数据查询操作 一、实验目的 掌握SQL程序设计基本规范,熟练运用SQL语言实现数据的各种查询和设计,包括连接查询、嵌套查询、集合查询等。 二、实验内容和要求 针对KingbaseES数据库设计单个表针对自身的连接查询,设计多个表的连接查询;设计各种嵌套查询和集合查询。了解和掌握SQL查询语句各个子句的特点和作用,按照SQL程序设计规范写出具体的SQL查询语句,并调试通过。 三、实验步骤 连接查询 1. 查询每个学生及其选修课程的情况: select student.*, sc.* from student, sc where student.sno=sc.sno 比较: 笛卡尔集: select student.*, sc.* from student, sc 自然连接: select student.sno, sname, ssex, sdept, cno, grade from student, sc where student.sno=sc.sno 2. 查询每一门课程的间接先行课(只求两层即先行课的先行课): select https://www.doczj.com/doc/f618885081.html,o, Second.pcno 间接先行课from course First, course Second where First.pcno=https://www.doczj.com/doc/f618885081.html,o 比较: select https://www.doczj.com/doc/f618885081.html,o, Second.pcno 间接先行课from course First, course Second where First.pcno=https://www.doczj.com/doc/f618885081.html,o and Second.pcno is not null 3. 列出所有学生的基本情况和选课情况, 若没有选课,则只列出基本情况信息: SQL Server 中: select s.sno, sname, ssex,sdept, cno, grade from student s, sc sc where s.sno*=sc.sno 4. 查询每个学生的学号, 姓名, 选修的课程名和成绩: select S.sno, sname, cname, grade from student S, course C, sc SC where S.sno=SC.sno and https://www.doczj.com/doc/f618885081.html,o=https://www.doczj.com/doc/f618885081.html,o 5. 查询平均成绩在80分以上的学生姓名 Select sname from student,sc where student.sno=sc.sno GROUP BY sc.sno HAVING AVG(sc.grade)>80; 高级查询 使用带IN谓词的子查询 1.查询与’刘晨’在同一个系学习的学生的信息: select * from student where sdept in (select sdept from student where sname='刘晨') 比较: select * from student where sdept = (select sdept from student where sname='刘晨') 的异同

Java连接MySql数据库入门操作

这是连接后进行一些简单操作后的结果: Succeeded connecting to the Database! 学号姓名 2011001 张三 2011002 李四 2011003 王五 先去下载MySql并安装好。安装MySql的方法在 https://www.doczj.com/doc/f618885081.html,/view/9cc0fcc76137ee06eff918d5.html 然后下载jdbc驱动。 https://www.doczj.com/doc/f618885081.html,/downloads/connector/j/ 下载好了解压即可。把那个zip文件也放到解压后的目录中,方便管理使用。 我使用的是eclipse,我要导入包,先进行一些设置。

安装jre。 添加外部jar文件 打开刚才解压得到的jar文件。

打开的效果。 使用mysql创建数据库,进行测试。 mysql> use test; Database changed mysql> create table student ( -> sno char(7) not null, -> sname varchar(8) not null, -> sex char(2) not null -> ); Query OK, 0 rows affected

mysql> insert into student values -> (2011001, '张三', '男'); Query OK, 1 row affected mysql> insert into student values -> (2011002, '李四', '男'); Query OK, 1 row affected mysql> insert into student values -> (2011003 , '王五', '男'); Query OK, 1 row affected mysql> select * from student; +---------+-------+-----+ | sno | sname | sex | +---------+-------+-----+ | 2011001 | 张三| 男| | 2011002 | 李四| 男| | 2011003 | 王五| 男| +---------+-------+-----+ 3 rows in set mysql> 编码测试。 输入下面源代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCTest { public static void main(String[] args){ try { // 加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); // URL指向要访问的数据库名test String url = "jdbc:mysql://127.0.0.1:3306/test"; // MySQL配置时的用户名 String user = "root";

数据库原理实验报告模板-实验四高级查询

大连海事大学 数据库原理课程实验报告(2013-2014学年第二学期) 实验四高级查询 班级:软件工程四班 学号:2220121787 姓名:马跃 指导教师:曹志英 成绩: 大连海事大学软件工程系 2014年6 月23 日

目录 1实验目的 (3) 2实验内容 (3) 2.1掌握SQL高级查询使用方法 (3) 3实验要求 (3) 4实验步骤 (3) 4.1掌握SQL高级查询使用方法 (3) 5总结与体会 (6) 5.1实验中出现的问题及其解决方案 (6) 5.2总结 (7) 5.3体会 (7)

1实验目的 (1)掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。 2实验内容 2.1 掌握SQL高级查询使用方法 (1)分组统计。 (2)嵌套查询,包括IN查询、EXISTS查询。 (3)集合查询。 3实验要求 (1)深入复习教材第三章SQL有关高级查询语句。 (2)根据书上的例子,针对DBTestBed数据库模式设计分组统计查询、嵌套查询(IN、EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。也可以按照附1所列示例查询做实验。 (3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。 4实验步骤 4.1 掌握SQL高级查询使用方法 (1)不带分组过滤条件的分组统计查询。 统计2013-2014上学期信息学院(01)开设的每门课程的最高分,最低分,及平均成绩。 select C.coursename,avg(score)AVGS,max(score)MAXS,min(score)MINS from tb_select_course A,Tb_Cultivate_Scheme B,Tb_Course_info C where A.schemeid=B.schemeid and B.cyear='2013'and B.term='上'and C.courseid=B.courseid and C.deptid='01' group by C.coursename

实验08 数据表的高级查询操作

实验八数据表的高级查询操作 课程名称:数据库技术 实验名称:数据的高级查询实验课时:2课时实验时间:第9周 实验环境:SQL Server 2005 实验目的: 1、掌握左连接、右连接、全接连的查询。 2、掌握带“IN”谓词的子查询。 3、掌握带比较运算符谓词的子查询。 4、掌握带“EXISTS”谓词的子查询。 实验内容: 【说明】把第1、5、14、15题做在实验报告中。 注意:使用student数据库完成第1、3、4、5、7、10、14、15、17题;使用stu_course数据库完成第2、6、8、9、11、12、13、16、18题。 1、查询“06级网络技术班”班级的学生,显示学生学号、姓名、班级名称和班级代码。(连 接查询) 2、查询选修了课程的每个学生的学号、姓名、选修的课程名称和成绩。(连接查询) 3、查询“06级软件工程班”的学生信息(要求用连接谓词为“=”和“IN”的两种方法)。 4、查询不是“06级软件工程班”的学生信息,并显示所在的班级名称(连接查询) 。 5、查询不是“06级软件工程班”的学生信息。 6、查询“课程注册”表中成绩没有不及格的学生,显示学生的学号和最低成绩。 (说明:如果表中学生的成绩都是及格,则自己动手把其中一个学生的某门课程改成不及格。)7、查询“课程注册”表中成绩没有不及格的学生,显示学生的学号、姓名、课程号和成绩。 (提示:用带有“IN”的嵌套查询方法)。 8、查询选修了课程的每个学生学号、姓名、选修的课程名及成绩。 9、使用stu_course数据库,查询选修2号课程且成绩在80分以上的所有学生的学号、姓名. 10、使用student数据库,查询选修“0003”号课程且成绩在80分以上的学生的学号、姓 名,并显示该选修课的课程号、成绩、任课教师的教师编号和姓名。 11、查询每个学生及其选修课程的情况包括没有选修课程的学生(左外连接)。 12、查询开设选修的课程及选修课程的学生情况,包括没有被学生选修的课程(右外连接)。 13、查询每个学生及每门选修课程的情况包括没有选修课程的学生和没有被选的课程(全 外连接)。 14、查询和“孙辉”在同一个班级学习的学生信息(提示:用带IN的子查询方法)。 15、查询选修了“网络营销”课程的学生学号、姓名(试用带IN的子查询方法求解) 。 16、查询选修了课程名为“数据库”的学生学号和姓名。(试用子查询方法求解) 。 17、查询“经济管理系”和“商务技术系”的学生信息(要求用连接查询和带“IN”的子查 询两种方法)。 18、查询其他系中比信息系(IS)任意一个学生年龄小的学生,显示其姓名、年龄和所在系部。 (试用带ANY/ALL和集函数两种方法) 19、附加题:查询所有选修了1号课程的学生姓名。(试用带EXISTS谓词的方法求解)

C#获取当前系统时间

C#获取当前系统时间 2010-01-02 16:24 --DateTime 数字型 System.DateTimecurrentTime=new System.DateTime(); 取当前年月日时分秒 currentTime=System.DateTime.Now; 取当前年 int 年=currentTime.Year; 取当前月 int 月=currentTime.Month; 取当前日 int 日=currentTime.Day; 取当前时 int 时=currentTime.Hour; 取当前分 int 分=currentTime.Minute; 取当前秒 int 秒=currentTime.Second; 取当前毫秒 int毫秒=https://www.doczj.com/doc/f618885081.html,lisecond; (变量可用中文) 取中文日期显示——年月日时分 string strY=currentTime.ToString("f"); //不显示秒 取中文日期显示_年月 string strYM=currentTime.ToString("y"); 取中文日期显示_月日 string strMD=currentTime.ToString("m"); 取当前年月日,格式为:2003-9-23 string strYMD=currentTime.ToString("d"); 取当前时分,格式为:14:24 string strT=currentTime.ToString("t"); DateTime.Now.ToString();//获取当前系统时间完整的日期和时间DateTime.Now.ToLongDateString();//只显示日期 xxxx年xx月xx日,一个是长日期 DateTime.Now.ToShortDateString();//只显示日期 xxxx-xx-xx 一个是短日期 //今天 DateTime.Now.Date.ToShortDateString(); //昨天的 DateTime.Now.AddDays(-1).ToShortDateString(); //明天的 DateTime.Now.AddDays(1).ToShortDateString(); //本周(注意这里的每一周是从周日始至周六止) DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString(); DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString(); //上周,上周就是本周再减去7天 DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();

JAVA数据库基本操作增删改查(精)

JAVA 数据库基本操作, 增删改查 package mypack; JAVA 数据库基本操作, 增删改查 import java.sql.Connection; import java.sql.ResultSet; import java.util.ArrayList; public class DbOper {//查询多行记录public ArrayList select({Connection conn =null; ResultSet rs =null; try {import java.sql.PreparedStatement; import java.sql.SQLException; PreparedStatement pstmt =null; ArrayList al =new ArrayList(; conn =DbConn.getConn(;pstmt =conn.prepareStatement(“select *from titles ”; rs =pstmt.executeQuery(;while (rs.next({Titles t =new Titles(;t.setTitleid(rs.getString(1;t.setTitle(rs.getString(2;al.add(t;}}catch (SQLExceptione { e.printStackTrace(;}finally {try {//TODO 自动生成catch 块if (rs!=null rs.close(;if (pstmt!=nullpstmt.close(;if (conn!=nullconn.close(;}catch (SQLExceptione { e.printStackTrace(;}}//TODO 自动生成catch 块 return al; }//查询单个对象public Titles selectOne(Stringtitleid{Connection conn =null; ResultSet rs =null; try {PreparedStatement pstmt =null; Titles t =new Titles(;

数据库与表的基本操作

第四章数据库与表的基本操作 实验4-1 数据库及表的操作 (一)实验目的 1.掌握创建数据库的基本操作方法。 2.熟练掌握创建表结构和输入记录的操作方法。 3.熟练掌握修改表结构、浏览和修改表记录数据的操作。 4.熟练掌握建立索引的操作。 5.掌握创建表间联系的操作。 (二)实验内容及步骤 1.创建数据库 【实例4-1】在实验2-1所建立的“教学管理.pjx”项目中,创建一个“学生成绩.dbc”数据库。 操作步骤如下: (1)打开“教学管理.pjx”项目。 (2)在“项目管理器”窗口中,选择“数据库”,然后单击“新建”按钮,打开“新建数据库”对话框,单击其中的“新建数据库”按钮,打开“创建”对话框,如图4-1所示。 图4-1“创建”对话框 (3)在“保存在”文本框中,选择保存数据库的文件夹“程序VX”;在“数据库名”文本框中,输入数据库名称“学生成绩”。 (4)单击“保存”按钮,即在指定位置建立一个“学生成绩.dbc”数据库文件。 此时,在VFP主窗口中弹出一个“数据库设计器”窗口,同时还激活了“数据库设计器”工具栏,如图4-2所示。

18 数据库应用学习与实训指导 图4-2“数据库设计器”窗口 2.创建数据表 【实例4-2】在“教学管理.pjx”项目中,创建学生表(Student.dbf)、成绩表(Grade.dbf)、课程表(Course.dbf)、授课表(Teach.dbf)和教师表(Teacher.dbf)。各个表的结构和数据记录如图4-3、图4-4、图4-5、图4-6、图4-7、图4-8、图4-9、图4-10、图4-11和图4-12所示。 图4-3学生表(Student.dbf)的结构 图4-4学生表(Student.dbf)的记录浏览窗口

VC 获取当前时间

VC++中其实还是通过调用它自带的CTime类来完成的获取当前系统时间的,我们做一个小程序来了解这个过程吧!对话框里只有两个显示框和两个按钮,点下按钮显示当前时间。就这么一个小程序。 (1)建立应用程序外壳 创建一个新的AppWizard项目,命名为shiyan,选择Dialog based;其他都选用默认属性,单击Finish完成生成应用程序的步骤。进入对话框界面以后,按下图所示布置显示框和功能按钮。 (2)设置参数 其中上面的显示文本框设为CString型,命名为m_show,ID号为IDC_show。下面的显示文本框设为CString型,命名为m_show1,ID号为IDC_show1。 (3)编译程序 start键程序: void CDate1Dlg::Onstart() { //count=0; SetTimer(1,1000,NULL); // TODO: Add your control notification handler code here

} stop键程序: void CDate1Dlg::Onstop() { KillTimer(1); // TODO: Add your control notification handler code here } (4)增加计时器控件 View -> ClassWizard -> MessageMaps -> CUse progressDlg,加入WM_TIMER函数,编辑程序: void CDate1Dlg::OnTimer(UINT nIDEvent) { if(nIDEvent==1) { // count++; UpdateData(1); CTime mtime=CTime::GetCurrentTime();//获取当前时间 char i; CString w; i=char (mtime.GetDayOfWeek()); //获取当前时间的天数是这个星期的第几天,这里要注意了,系统上默认的一个星期的第一天是星期日,最后一天是周六,大家千万不要搞错了。我也是试了才知道的。 switch(i)//将数字状换成字符就不会出现星期7这种情况了 { case 2:

MySQL数据库高级查询和多表查询(二)

机试测试试卷(MySQL数据库应用与开发) 注意:考试结束试卷必须交回,不交回试卷者成绩无效

题目:MySQL 数据库高级查询和多表查询 一、语言和环境 A、实现技术 SQL 语句练习 B、环境要求 Mysql5.7+Navicat 二、实验要求 1、创建名为 s_t 的数据库,参数全部使用 UTF-8 实验目的: 通过上机实验验证数据库的多表的高级查询操作。 实验内容: 1、将s_t数据库还原。 2、在s_t数据库中,完成以下多表连接查询的操作。 (1)查询计算机系学生的修课情况,要求列出学生的名字、所修课的课程号和成绩。 (2)查询“信息管理系”修了“计算机文化学”的学生姓名和成绩。 (3)查询所有选修了Java课程的学生情况,列出学生姓名和所在系。 (4)统计每个系的学生的考试平均成绩。 (5)统计计算机系学生每门课程的选课人数、平均成绩、最高成绩和最低成绩。 (6)查询与刘晨在同一个系学习的学生的姓名和所在的系。 (7)查询与“数据结构”在同一个学期开设的课程的课程名和开课学期。 (8)查询至少被两个学生选的课程的课程号。 (9)查询全体学生的选课情况,包括选修了课程的学生和没有选修课程的学生。 (10)查询没人选的课程的课程名。 (11)查询计算机系没有选课的学生,列出学生姓名和性别。 (12)统计计算机系每个学生的选课门数,包括没有选课的学生。 (13)查询信息管理系选课门数少于3门的学生的学号和选课门数,包括没有选课的学生。查询结果按选课门数递增排序。 (14)查询考试成绩最高的三个成绩,列出学号、课程号和成绩。 (15) 查询Java考试成绩最高的前三名的学生的姓名、所在系和VB考试

c++ 简单获取系统时间

C++获取时间方法有多种,其中比较实用的是localtime函数 我们来看下下面这个范例 struct tm t; //tm结构指针 time_t nowT; //声明time_t类型变量 time(&nowT); //获取系统日期和时间 t = localtime( &nowT); //获取当地日期和时间 printf("%4d年%02d月%02d日%02d:%02d:%02d\n", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec); //格式化输出本地时间 该方法是调用了localtime函数进行时间获取,使用时得包含time.h头文件 #include 但是在vs上不少人会遇到编译器的报错提示,要求把localtime换成localtime_s 解释是为了安全性 如果出现这种情况我们只要改一行代码即可 t = localtime( &nowT); 改为localtime_s( &t,&nowT); 如果想要一次性输出日期与时间,那我们就要用到asctime函数 struct tm t; //tm结构指针 time_t nowT; //声明time_t类型变量 time(&nowT); //获取系统日期和时间 t = localtime( &nowT); //获取当地日期和时间 char TIMET[32]; TIMET = asctime(,&t); printf("now is: %s\n",TIMET ); 如诺出现vs的编译器报错,那只需要改成这样既可 struct tm t; //tm结构指针 time_t nowT; //声明time_t类型变量 time(&nowT); //获取系统日期和时间 localtime_s(&t, &nowT); //获取当地日期和时间 char TIMET[32]; asctime_s(TIMET, &t); printf("now is: %s\n",TIMET);

JAVA中常见数据库操作API

这篇文章仅用于补充:JAVA代码审计的一些Tips(附脚本)一文中关于SQLi中不足部分 JDBC常用API DriverManager:用于管理JDBC驱动的服务类。主要功能是获取Connection对象 public static Connection getConnection(String url, String user, String password) throws SQLException //该方法获得url对应数据库的连接 Connection:代表数据库连接对象。每一个Connection代表一个物理连接会话 Statement createStatement() throws SQLException; //该方法返回一个Statement对象 PreparedStatement prepareStatement(String sql)throws SQLException; //该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译 CallableStatement prepareCall(String sql) throws SQLException; //该方法返回CallableStatement对象,该对象用于调用存储过程 // 控制事务的相关方法 Savepoint setSavepoint() throws SQLException //创建一个保存点 Savepoint setSavepoint(String name) throws SQLException; //以指定名字来创建一个保存点; void setTransactionIsolation(int level) throws SQLException; //设置事务的隔离级别; void rollback() throws SQLException; //回滚事务; void rollback(Savepoint savepoint) throws SQLException; //将事务回滚到指定的保存点; void setAutoCommit(boolean autoCommit) throws SQLException; //关闭自动提交,打开事务; void commit() throws SQLException; //提交事务; Statement:用于执行SQL语句的工具接口。该对象既可以执行DDL,DCL语句,也可以执行DML语句,还可以用于执行SQL查询 ResultSet executeQuery(String sql) throws SQLException; //该方法用于执行查询语句,并返回查询结果对应ResultSet对象。该方法只能用于执行查询语句 int executeUpdate(String sql) throws SQLException; //该方法用于执行DML语句,并返回受影响的行数;该方法也可用于执行DDL语句,执行DDL语句将返回0 boolean execute(String sql) throws SQLException; //改方法可以执行任何sql语句。如果执行后第一个结果为ResultSet对象,则返回true;如果执行后第一个结果为受影响的行数或没有任何结果,则返回false PreparedStatement:预编译的Statement对象,它允许数据库预编译sql语句,以后每次只改变sql命令的参数,避免数据库每次都需要编译sql语句,无需再传入sql语句,它比Statement多了以下方法 void setXxx(int parameterIndex, Xxx value): //该方法根据传入参数值的类型不同,需要使用不同的方法。传入的值根据索引传给sql语句中指定位置的参数 Hibernate框架常用API Configuration:负责Hibernate的配置信息。包括运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等和持久化类与数据表的映射关系(*.hbm.xml文件) //属性文件(hibernate.properties): Configuration cfg = new Configuration(); //Xml文件(hibernate.cfg.xml) Configuration cfg = new Configuration().configure(); SessionFactory:Configuration对象根据当前的配置信息生成SessionFactory对象,SessionFactory对象中保存了当前数据库的配置信息和所有映射关系以及预定义的SQL语句,同时还负责维护Hibernate的二级缓存 SessionFactory configuration.buildSessionFactory() 获取SessionFactory对象 Session sessionFactory.openSession() 获取Session对象 Session:是应用程序与数据库之间交互操作的单线程对象。session对象有一个一级缓存,显式执行flush之前,所有的持久层操作的数据都缓存在session对象处。相当于JDBC的Connection //获取持久化对象方法分为get()和load() public Object get(Class clazz, Serializable id); //通过持久化类和主键获取对象 public Object get(Class clazz, Serializable id, LockOptions lockOptions); //通过持久化类和主键、锁选项获取对象 public Object get(String entityName, Serializable id); //通过全类名+主键获取对象 public Object get(String entityName, Serializable id, LockOptions lockOptions); //通过全类名+主键+锁选项获取对象 //load()方法与get()相同,但多了下列方法 public void load(Object object, Serializable id); //通过一个空的持久化类的实例+主键获取对象 //get方法会在调用之后立即向数据库发出sql语句(不考虑缓存的情况下),返回持久化对象; //而load方法会在调用后返回一个代理对象,该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句. //查询数据库中不存在的数据时,get方法返回null,load方法抛出异常:org.hibernate.ObjectNotFoundException Serializable save(Object object) //保存持久化对象 void update(Object object) //更新持久化对象 void delete(Object object) //删除持久化对象 void saveOrUpdate(Object object) //根据ID判断是save还是update,如果id存在,则为update,若id不存在,即为save Query createQuery(String hql) //执行HQL查询

相关主题
文本预览
相关文档 最新文档