搜档网
当前位置:搜档网 › myBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

myBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

myBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
myBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

一、用到的实体类如下:

Student.java

[html] view plaincopyprint?

package https://www.sodocs.net/doc/4f13309098.html,pany.entity;

import java.io.Serializable;

import java.util.Date;

public class Student implements Serializable{

private static final long serialVersionUID = 1L;

private int id;

private String name;

private Date birth;

private Group group;

public Group getGroup() {

return group;

}

public void setGroup(Group group) {

this.group = group;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.sodocs.net/doc/4f13309098.html, = name;

}

public Date getBirth() {

return birth;

}

public void setBirth(Date birth) {

this.birth = birth;

}

@Override

public String toString() {

return "Student [birth=" + birth + ", group=" + group + ", id=" + id

+ ", name=" + name + "]";

}

}

package https://www.sodocs.net/doc/4f13309098.html,pany.entity;

import java.io.Serializable;

import java.util.Date;

public class Student implements Serializable{

private static final long serialVersionUID = 1L;

private int id;

private String name;

private Date birth;

private Group group;

public Group getGroup() {

return group;

}

public void setGroup(Group group) {

this.group = group;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.sodocs.net/doc/4f13309098.html, = name;

}

public Date getBirth() {

return birth;

}

public void setBirth(Date birth) {

this.birth = birth;

}

@Override

public String toString() {

return "Student [birth=" + birth + ", group=" + group + ", id=" + id

+ ", name=" + name + "]";

}

}

Group.java

[java] view plaincopyprint?

package https://www.sodocs.net/doc/4f13309098.html,pany.entity;

import java.util.List;

public class Group {

private int id;

private String name;

private String position;

private List students;

public List getStudents() {

return students;

}

public void setStudents(List students) {

this.students = students;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.sodocs.net/doc/4f13309098.html, = name;

}

public String getPosition() {

return position;

}

public void setPosition(String position) {

this.position = position;

}

@Override

public String toString() {

return "Group [id=" + id + ", name=" + name + ", position=" + position + "]";

}

}

package https://www.sodocs.net/doc/4f13309098.html,pany.entity;

import java.util.List;

public class Group {

private int id;

private String name;

private String position;

private List students;

public List getStudents() {

return students;

}

public void setStudents(List students) {

this.students = students;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

https://www.sodocs.net/doc/4f13309098.html, = name;

}

public String getPosition() {

return position;

}

public void setPosition(String position) {

this.position = position;

}

@Override

public String toString() {

return "Group [id=" + id + ", name=" + name + ", position=" + position

+ "]";

}

}

二、实体对应的表结构

student表:

create table student(

id int primary key,

name varchar2(20),

birth date,

group_id int references g_group(g_id));

g_group表:

create table g_group(

g_id int primary key,

g_name varchar2(20),

g_position varchar2(30));

sequence:

create sequence student_id_sequence;

create sequence group_id_sequence;

三、Student和Group的映射文件如下,你可以在映射文件中找到,关于MyBatis的增删改查操作,MyBatis调用存储过程,MyBatis分页以及MyBatis对一对一、多对多的处理

xml文件中都标有注释,看的时候配合下面的具体实现看,虽然有点乱

student.xml

[html] view plaincopyprint?

"https://www.sodocs.net/doc/4f13309098.html,/dtd/mybatis-3-mapper.dtd">

select id,name,birth from student

select stu_id_sequence.nextval from dual

insert into student(id,name,birth) values(#{id},#{name},#{birth})

"https://www.sodocs.net/doc/4f13309098.html,/dtd/mybatis-3-mapper.dtd">

select id,name,birth from student

select stu_id_sequence.nextval from dual

insert into student(id,name,birth) values(#{id},#{name},#{birth})

group.xml

[html] view plaincopyprint?

"https://www.sodocs.net/doc/4f13309098.html,/dtd/mybatis-3-mapper.dtd">

select * from

delete from g_group where g_id=#{id}

insert into g_group(g_id, g_name, g_position)

values(#{id}, #{name}, #{position})

"https://www.sodocs.net/doc/4f13309098.html,/dtd/mybatis-3-mapper.dtd">

select * from

delete from g_group where g_id=#{id}

insert into g_group(g_id, g_name, g_position)

values(#{id}, #{name}, #{position})

四、接口IStudentDAO.java和IGroupDAO.java中定义了IStudentDAOImpl.java和IGroupDAOImpl.java中需要实现的方法

IStudentDAO.java

[java] view plaincopyprint?

package https://www.sodocs.net/doc/4f13309098.html,pany.dao;

import java.util.List;

import https://www.sodocs.net/doc/4f13309098.html,pany.entity.Student;

public interface IStudentDAO {

/**

* 增加一个学生

* @param student

*/

public void add(Student student);

/**

* 根据学生的Id删除学生

* @param id

*/

public void deleteById(int id);

/**

* 通过学生的id获得学生的信息

* @param id

* @return

*/

public Student getById(int id);

/**

* 更新学生信息

* @param student

*/

public void update(Student student);

/**

* 此处是MyBatis的分页查询

* @return

*/

public List getAllStudent();

/**

* 多对一

* @param id

* @return

*/

public Student many2one(int id);

/**

* 获得学生的信息,并且获得该学生所属的组的信息* @param id

* @return

public Student getStudentAndGroupUseSelect(int id);

/**

* 动态sql

* @param student

* @return

*/

public List getStudentBySomeCondition(Student student);

/**

* 获得所有的学生信息,此处是调用在数据库中存储过程

* @return

*/

public List getAllUser();

}

package https://www.sodocs.net/doc/4f13309098.html,pany.dao;

import java.util.List;

import https://www.sodocs.net/doc/4f13309098.html,pany.entity.Student;

public interface IStudentDAO {

/**

* 增加一个学生

* @param student

*/

public void add(Student student);

/**

* 根据学生的Id删除学生

* @param id

*/

public void deleteById(int id);

/**

* 通过学生的id获得学生的信息

* @param id

* @return

*/

public Student getById(int id);

/**

* 更新学生信息

* @param student

*/

public void update(Student student);

/**

* 此处是MyBatis的分页查询

* @return

*/

public List getAllStudent();

/**

* 多对一

* @param id

* @return

*/

public Student many2one(int id);

/**

* 获得学生的信息,并且获得该学生所属的组的信息

* @param id

* @return

*/

public Student getStudentAndGroupUseSelect(int id);

/**

* 动态sql

* @param student

* @return

*/

public List getStudentBySomeCondition(Student student);

/**

* 获得所有的学生信息,此处是调用在数据库中存储过程

* @return

*/

public List getAllUser();

}

对应的实现类IStudentDAOImpl.java如下:

[java] view plaincopyprint?

package https://www.sodocs.net/doc/4f13309098.html,pany.dao.impl;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.ibatis.session.RowBounds;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import https://www.sodocs.net/doc/4f13309098.html,pany.dao.IStudentDAO;

import https://www.sodocs.net/doc/4f13309098.html,pany.entity.Student;

import https://www.sodocs.net/doc/4f13309098.html,pany.util.DBUtil;

public class IStudentDAOImpl implements IStudentDAO {

public void add(Student student) {

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession();

try{

IStudentDAO dao = session.getMapper(IStudentDAO.class);

dao.add(student);

https://www.sodocs.net/doc/4f13309098.html,mit();

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

}

public void deleteById(int id) {

}

public Student getById(int id) {

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession();

Student student = null;

try{

IStudentDAO dao = session.getMapper(IStudentDAO.class); student = dao.getById(id);

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

return student;

}

public void update(Student student) {

}

public List getStudentsByGroupId(int groupId) {

return null;

}

/**

* 测试selectList,分页的原型

* @author king

* @return students

* @serialData 2011-7-29

*/

public List getAllStudent() {

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory();

SqlSession session = sqlSessionFactory.openSession();

List students = new ArrayList();

try{

RowBounds rb = new RowBounds(1,6);//RowBounds的下标是从0开始,表示第一条记录,此表示从第二条记录开始,取6条记录

students = session.selectList("https://www.sodocs.net/doc/4f13309098.html,pany.dao.IStudentDAO.getAllStudent", null, rb);

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

return students;

}

public Student many2one(int id) {

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory();

SqlSession session = sqlSessionFactory.openSession();

Student student = null;

try{

IStudentDAO dao = session.getMapper(IStudentDAO.class);

student = dao.many2one(id);

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

return student;

}

public Student getStudentAndGroupUseSelect(int id){ SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession();

Student student = null;

try{

IStudentDAO dao = session.getMapper(IStudentDAO.class);

student = dao.getStudentAndGroupUseSelect(id);

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

return student;

}

public List getStudentBySomeCondition(Student student){ SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession();

List students = new ArrayList();

try{

IStudentDAO dao = session.getMapper(IStudentDAO.class);

students = dao.getStudentBySomeCondition(student);

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

return students;

}

public List getAllUser(){

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession();

List students = new ArrayList();

try{

Map> map = new HashMap>(); session.selectOne("https://www.sodocs.net/doc/4f13309098.html,pany.dao.IStudentDAO.getAllUser", map);

students = (List) map.get("students");

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

return students;

}

public static void main(String[] args) {

Student student = new Student();

IStudentDAOImpl impl = new IStudentDAOImpl();

List students = impl.getAllStudent();

for(Student s : students) {

System.out.println(s);

}

}

}

package https://www.sodocs.net/doc/4f13309098.html,pany.dao.impl;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.ibatis.session.RowBounds;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import https://www.sodocs.net/doc/4f13309098.html,pany.dao.IStudentDAO;

import https://www.sodocs.net/doc/4f13309098.html,pany.entity.Student;

import https://www.sodocs.net/doc/4f13309098.html,pany.util.DBUtil;

public class IStudentDAOImpl implements IStudentDAO {

public void add(Student student) {

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory();

SqlSession session = sqlSessionFactory.openSession();

try{

IStudentDAO dao = session.getMapper(IStudentDAO.class);

dao.add(student);

https://www.sodocs.net/doc/4f13309098.html,mit();

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

}

public void deleteById(int id) {

}

public Student getById(int id) {

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory();

SqlSession session = sqlSessionFactory.openSession();

Student student = null;

try{

IStudentDAO dao = session.getMapper(IStudentDAO.class);

student = dao.getById(id);

}catch(Exception e){

e.printStackTrace();

}finally{

session.close();

}

return student;

}

public void update(Student student) {

}

public List getStudentsByGroupId(int groupId) {

return null;

}

/**

* 测试selectList,分页的原型

* @author king

* @return students

* @serialData 2011-7-29

*/

public List getAllStudent() {

SqlSessionFactory sqlSessionFactory = DBUtil.getSqlSessionFactory();

SqlSession session = sqlSessionFactory.openSession();

数据库的增删改查(精)

学习收藏数据库增删改查 --查询信息系和计算机系的学生,并按学生所在系和学号排序。select sno,sname,Sdept from Student where Sdept='CS'OR Sdept='IS' order by Sdept,sno ASC --查询学生表中最小的年龄。 select MIN(sage from student --查询课程名中包含“数据”的课程名。 select cno,cname from course where Cname like'%数据%' --查询先行课程为空值的课程号、课程名及学分 select cno,cname,ccredit from Course where Cpno is null --查询李勇选修的数据库课程的成绩 select grade from SC where Sno=(select Sno from Student where Sname='李勇'and Cno=(select Cno from Course where cname='数据库' --查询平均成绩分以上的学生的学号 select distinct sno from SC scx where (select AVG(Grade from SC scy

where scy.sno=scx.Sno>85 --求计算机系没有选修数据库课程的学生姓名 select sname from Student where Sno not in(select Sno from SC where Cno in(select Cno from Course where Sname='数据库'and Sdept='IS' --求至少选修了学号为S1所选修的全部课程的学生学号 select distinct sno from SC scx where not exists(select*from SC scy where scy.Sno='20021522'and not exists(select* from sc scz where scz.sno=scx.sno and https://www.sodocs.net/doc/4f13309098.html,o=https://www.sodocs.net/doc/4f13309098.html,o --求各系的系的学生人数的,并将结果按学生人数的降序排序 select Sdept,COUNT(sno from Student group by Sdept order by Sdept ASC --查询选修了数学课程并且成绩高于该门课程平均分的学生学号和成绩 select sno,grade from SC scx where Grade>=(select AVG(Grade from SC scy where Cno=(select Cno from Course where Cname='数学'and Cno=(select Cno from Course

测验答案-第13章存储过程的创建与管理

测验 填空题 (1) 在SQL Server 2005中,3种基本存储过程的类型分别是、和。 答案:用户自定义存储过程,系统存储过程,扩展存储过程 (2) 在SQL Server 2005中,用户既可以使用语言编写存储过程,也可以使用方式创建存储过程。 答案:Transact-SQL,CLR (3) 如果在存储过程中定义了输出参数,则必须使用关键词说明。 答案:OUTPUT 选择题 (1) 可以使用哪个系统目录视图查看存储过程定义的文本。 A. B. C. D. 答案:C (2) 通过下列哪个系统存储过程可以查看存储过程与其他数据库对象的依赖关系。 A. sp_help B. sp_rename C. sp_depend D. sp_depends 答案:D (3) 下列哪种方式不能重新编译存储过程。 A. 使用sp_recompile系统存储过程 B. 在CREATE PROCEDURE语句中使用WITH RECOMPILE C. 在EXECUTE语句中使用WITH RECOMPILE子句 D. 使用系统存储过程sp_depends 答案:D (4) 下列哪个命令可以在存储过程的定义中使用。 A. CREATE VIEW B. CREATE TABLE C. CREATE DEFAULT D. CREATE RULE 答案:B 判断题 (1) 可以使用其他.NET架构下的语言,如C#编写存储过程并部署到SQL Server 2005。 答案:√ (2) 创建存储过程的命令关键词CREATE PROCEDURE不可以缩写。 答案:× (3) 数据库BlueSkyDB中的存储过程PrcDeleteBook用于删除Books表中的记录,如果用

创建存储过程

创建存储过程 一、在SSMS图形化界面下创建一个存储过程 从stsc数据库的三个表中查询某人指定课程的成绩和学分。该存储过程接收与传递参数精确匹配的值,操作步骤如下所示: (1)启动SQL Server Management Studio,在对象资源管理器中展开“数据库”结点,选中stsc数据库,将其展开。然后展开“可编程性”结点,右击“存储过程”选项,在弹出的快捷菜单中选择“新建存储过程”命令,结果如图所示: (2)打开存储过程的脚本编辑窗口,在该窗口中输入要创建存储过程的T-SQL语句,输入后完成后单击按钮,系统提示“命令已成功完成”,如下所示; 这里输入的创建存储过程的T-SQL语句如下: use stsc go create procedure student_info @stname char(8), @cname char(16) as select a.stno,stname,cname,grade,t.credit from student a join score b on a.stno=b.stno join course t on https://www.sodocs.net/doc/4f13309098.html,o=https://www.sodocs.net/doc/4f13309098.html,o where a.stname=@stname and https://www.sodocs.net/doc/4f13309098.html,ame=@cname

存储过程,至此完成存储过程的创建,如下所示: 二、使用T_SQL语句创建存储过程 创建一个存储过程do_insert,作用是向student表中插入一行数据。创建另外一个存储过程do_action,在其中调用第一个存储过程,并根据条件处理该行数据,处理后输出相应的信息。 (1)创建do_insert存储过程,作用是向student表中插入一行数据,如图所示:

数据库增删改查基本语句

数据库增删改查基本语句 adoquery1.Fielddefs[1].Name; 字段名 dbgrid1.columns[0].width:=10; dbgrid的字段宽度 adoquery1.Fields[i].DataType=ftString 字段类型 update jb_spzl set kp_item_name=upper(kp_item_name) 修改数据库表中某一列为大写select * from master.dbo.sysobjects ,jm_https://www.sodocs.net/doc/4f13309098.html,ers 多库查询 adotable1.sort:='字段名称ASC' adotable排序 SQL常用语句一览 sp_password null,'新密码','sa' 修改数据库密码 (1)数据记录筛选: sql="select * from 数据表where 字段名=字段值orderby 字段名[desc] " sql="select * from 数据表where 字段名like '%字段值%' orderby 字段名[desc]" sql="select top10 * from 数据表where 字段名orderby 字段名[desc]" sql="select * from 数据表where 字段名in('值1','值2','值3')" sql="select * from 数据表where 字段名between 值1 and 值2" (2)更新数据记录: sql="update 数据表set 字段名=字段值where 条件表达式" sql="update 数据表set 字段1=值1,字段2=值2……字段n=值n where 条件表达式" (3)删除数据记录: sql="delete from 数据表where 条件表达式" sql="delete from 数据表"(将数据表所有记录删除) (4)添加数据记录: sql="insert into 数据表(字段1,字段2,字段3…) values(值1,值2,值3…)" sql="insert into 目标数据表select * from 源数据表"(把源数据表的记录添加到目标数据表)

C#调用存储过程简单完整例子讲解

C#调用存储过程简单完整例子https://www.sodocs.net/doc/4f13309098.html,/itblog/article/details/752869 创建存储过程 Create Proc dbo.存储过程名 存储过程参数 AS 执行语句 RETURN 执行存储过程 GO DECLARE @iRet INT, @PKDisp VARCHAR(20) SET @iRet = '1' Select @iRet = CASE WHEN @PKDisp = '一' THEN 1 WHEN @PKDisp = '二' THEN 2 WHEN @PKDisp = '三' THEN 3 WHEN @PKDisp = '四' THEN 4 WHEN @PKDisp = '五' THEN 5 ELSE 100 END DECLARE @i INT SET @i = 1 WHILE @i<10 BEGIN set @i=@i+1 PRINT @i END DECLARE @d INT set @d = 1 IF @d = 1 BEGIN -- 打印 PRINT '正确' END ELSE BEGIN PRINT '错误' END

CREATE PROC P_TEST @Name VARCHAR(20), @Rowcount INT OUTPUT AS BEGIN SELECT * FROM T_Customer WHERE NAME=@Name SET @Rowcount=@@ROWCOUNT END GO ---------------------------------------------------------------------------------------- --存储过程调用如下: ---------------------------------------------------------------------------------------- DECLARE @i INT EXEC P_TEST 'A',@i OUTPUT SELECT @i --结果 /* Name Address Tel ---------- ---------- -------------------- A Address Telphone (所影响的行数为 1 行) ----------- 1 (所影响的行数为 1 行) */ ---------------------------------------------------------------------------------------- --DotNet 部分(C#) --WebConfig 文件: ---------------------------------------------------------------------------------------- ......

SQL数据库中的增删改查总结1

一、增:有2种方法 1.使用insert插入单行数据: 语法:insert [into]<表名> [列名] values <列值> 例:insert into Strdents (姓名,性别,出生日期) values ('邢金聪','男','1990/6/15') 注意:如果省略表名,将依次插入所有列 2.使用insert,select语句将现有表中的数据添加到已有的新表中 语法:insert into <已有的新表> <列名> select <原表列名> from <原表名> 例:insert into addressList ('姓名','地址','电子邮件')selectname,address,email from Strdents 注意:查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致 二、删:有2中方法 1.使用delete删除数据某些数据 语法:delete from <表名> [where <删除条件>] 例:delete from awhere name='邢金聪'(删除表a中列值为邢金聪的行) 注意:删除整行不是删除单个字段,所以在delete后面不能出现字段名 2.使用truncate table 删除整个表的数据

语法:truncate table<表名> 例:truncate table addressList 注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能 用于有外建约束引用的表 三、改 使用update更新修改数据 语法:update <表名> set <列名=更新值> [where <更新条件>] 例:truncate table addressList 注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能 用于有外建约束引用的表 四、查 1.普通查询 语法:select <列名> from <表名> [where <查询条件表达试>] [order by<排序的列 名>[asc或desc]] 1).查询所有数据行和列 例:select * from a 说明:查询a表中所有行和 2).查询部分行列--条件查询 例:select i,j,kfrom a where f=5 说明:查询表a中f=5的所有行,并显示i,j,k3列

实验六管理存储过程11页word

实验六存储过程与触发器一、存储过程 【创建存储过程】: CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS 如:Use pubs Go Create procedure author_information As select au_lname,au_fname,title,pub_name from authors a join titleauthor ta on a.au_id=ta.au_id join titles t on t.title_id=ta.title_id join publishers p on t.pub_id=p.pub_id Go 【管理存储过程】: ?可以使用sp_helptext命令查看创建存储过程的文本信息。 Use pubs Go Sp_helptext author_information

Go ?可以用sp_help查看存储过程的一般信息。 Use pubs Go Sp_help author_information Go ?可以使用系统存储过程sp_rename修改存储过程的名字。 Use pubs Go Sp_rename author_information ,authors_information Go ?也可以使用企业管理浏览存储过程的信息,具体方法是: ?从树型结构上选中存储过程所在的数据库节点,展开该节点; ?选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所 有的存储过程; ?选中存储过程,右击,执行〖属性〗命令, 则系统将弹出如图所示对话框。 ?可以在对话框中修改存储过程内容,并保 存修改。 ?如果想知道某个表被存储过程引用的情 况,可以使用sp_depends, Sp_depends authors

第二章 数据库的创建与管理1

第二章数据库的创建与管理 2.1 SQL Server数据库 2.1.1 数据库的结构 2.1.2 系统数据库 2..2 使用企业管理器创建数据库 2.2.1企业管理器的工作界面 2.2.2企业管理器创建用户数据库 2.2.3向导创建用户数据库 2.3使用T-SQL语句创建数据库 2.3.1查询分析器 2.3.2 用T-SQL语句创建数据库 2.4 修改和删除数据库 2.4.1 修改数据库 2.4.2 删除数据库 2..5 数据库迁移 2.5.1分离和附加数据库 2.5.2 导入和导出数据

2.1 SQL Server数据库 2.1.1 数据库的结构 2.1数据库的存储结构 数据库的存储结构分为逻辑存储结构和物理存储结构两种。 数据库的逻辑存储结构指的是,SQL Server的数据库是由诸如表、视图、索引等各种不同的数据库对象所组成。 数据库的物理存储结构是讨论数据库文件是如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成,一个数据库至少应该包含一个数据库文件和一个事务日志文件。 一、数据库文件 1.主数据库文件(Primary Database File) 一个数据库可以有一个或多个数据库文件,一个数据库文件只能属于一个数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件(简称为主文件),其扩展名为mdf 主数据库文件用来存储数据库的启动信息以及部分或者全部数据,是所有数据库文件的起点,包含指向其它数据库文件的指针。一个数据库只能有一个主数据库文件。 2.次数据库文件(Secondary Database File) 用于存储主数据库文件中未存储的剩余数据和数据库对象,一个数据库可以没有次数据库文件,但也可以同时拥有多个辅助数据库文件。 次数据库文件的扩展名为ndf(简称为辅助文件)。 3.事务日志文件 存储数据库的更新情况等事务日志信息,当数据库损坏时,管理员使用事务日志恢复数据库。 每一个数据库至少必须拥有一个事务日志文件,而且允许拥有多个日志文件。事务日志文件的扩展名为ldf,日志文件的大小至少是512KB。 SQL Server事务日志采用提前写入的方式 SQL Server 2000的文件拥有两个名称,即逻辑文件名和物理文件名。当使用Transact-SQL 命令语句访问某一个文件时,必须使用该文件的逻辑名。 物理文件名是文件实际存储在磁盘上的文件名,而且可包含完整的磁盘目录路径。 SQL Server 2000用文件来存放数据库,数据库文件有三类。 1.主数据库文件(Primary):(1)存储数据库的启动信息,是所有数据库文件的起点,包含 指向其它数据库文件的指针 (2)存放数据,每个数据库都必须有一个主数据文件。 2.次要数据文件(Secondary):存放数据,一个数据库可以没有也可以有多个Secondary 文件。 3.事务日志文件(Transaction Log):存放事务日志,每个数据库至少有一个或多个日志文 件。

实验2 数据库的创建和管理

实验2 数据库的创建和管理 学号: 2011193158 姓名:韩江玲 一、实验目的: 1、掌握使用企业管理器创建SQL Server数据库的方法; 2、掌握使用T-SQL语言创建SQL Server数据库的方法; 3、掌握附加和分离数据库的方法; 4、掌握使用企业管理器或存储过程查看SQL数据库属性的方法; 5、熟悉数据库的收缩、更名和删除; 6、掌握使用企业管理器或sp_dboption存储过程修改数据库选项的方法。 二、实验内容和步骤: 本次实验所创建数据库(包括数据库文件和事务日志)存放位置都为“D:\TestDB”。因此首先在D盘下新建文件夹TestDB。 1. 数据库的创建 创建数据库的过程实际上就是为数据库设计名称、设计所占用的存储空间和文件存放位置的过程。 实验内容1:使用SQL Server企业管理器创建一个数据库,具体要求如下: 1)数据库名称为Test1。 2)主要数据文件:逻辑文件名为Test1_Data1,物理文件名为Test1_Data1.mdf,初始容量为1MB,最大容量为10MB,递增量为1MB。 3)次要数据文件:逻辑文件名为Test1_Data2,物理文件名为Test1_Data2.ndf,初始容量为1MB,最大容量为10MB,递增量为1MB。 4)事务日志文件:逻辑文件名为Test1_Log,物理文件名为Test1_Log.ldf,初始容量为1MB,大容量为5MB,递增量为1MB。其他选项为默认值。

注:我在创建数据库的时候,系统要求主文件(Test1_data1和Test1_data2)的大小不能小于3MB,所以在本例中我设置的主文件的初始大小均为3MB 实验内容2:用Transact-SQL(T-SQL)语句创建数据库,实验步骤:启动“查询分析器”,在编辑窗口输入SQL语句。 用T-SQL语句创建一个名为teach的数据库,它由5MB的主数据文件、2MB 的次数据文件和1MB的日志文件组成。并且主数据文件以2MB的增长速度增长,其最大容量为15MB;次数据文件以10%的增长速度增长,其最大容量为10MB;事务日志文件以1MB增长速度增长,其最大日志文件大小为10MB。运行完语句后,仔细查看结果框中的消息。 提示:在查询分析器中输入如下SQL语句。 CREATE DATABASE teach On (name= teach_data1, filename= 'd:\TestDB\teach_data1.mdf ', size=5,

SQL存储过程使用方法.

SQL存储过程使用方法所有的大型数据库都支持存储过程,比如Oracle、MS SQL等,(但MS Access不支持,不过,在Access里可以使用参数化的查询)。存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix-4GL语言一样。这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序: 1、变量说明 2、ANSI兼容的SQL命令(如Select,Update…. 3、一般流程控制命令(if…else…、while…. 4、内部函数存储过程的书写格 CREATE PROCEDURE [拥有者.]存储过程名[;程序编号] [(参数#1,…参数#1024] [WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} ] [FOR REPLICATION] AS 程序行其中存储过程名不能超过128 个字。每个存储过程中最多设定1024个参数(SQL Server 7.0以上版本,参数的使用方法如下: @参数名数据类型 [VARYING] [=内定值] [OUTPUT] 每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE 外,其他SQL Server所支持的数据类型都可使用。 [=内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。 CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS SELECT @p_tot = sum(Unitprice*Quantity FROM orderdetails WHERE ordered=@o_id 该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的定单ID号码(@o_id,由定单明细表(orderdetails中计算该定单销售总额[单价(Unitprice*数量(Quantity],这一金额通过@p_tot这一参数输出给调用这一存储过程的程序使用存储过程有许多好处,它可以封装复杂的数据逻辑,充分发挥大型数据库本身的优势。我们知道,ASP并不适合做复杂的数据运算,而通过OLD DB访问数据库,由于数据需要在ASP和数据库之间传递,相当消耗系统资源。事实上,如果数据库仅仅起着

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(;

《SQL Server 数据库》数据库存储过程、触发器的创建于管理实验报告

北华航天工业学院《数据库系统管理》 实验报告 报告题目: 存储过程、触发器的创建于管理 所在系部:计算机科学与工程系 所在专业:网络工程专业 学号: 姓名: 教师姓名: 完成时间:2011 年10 月19 日 北华航天工业学院教务处制

存储过程、触发器的创建与管理 一、实验目的 1、掌握存储过程的概念、优点、特点及用途; 2、掌握创建、执行、查看、修改和删除存储过程的方法; 3、了解触发器和一般存储过程的区别、概念及优点; 4、掌握创建、查看、修改和删除触发器的方法。 二、实验内容 (一)附加上次实验所创建的数据库“db_Library”,并回顾该数据库的数据表信息。 (二)练习创建和管理存储过程 1、使用管理控制台创建一个名为“计算机系借阅信息_PROC”的无参存储过程,要求显示计算机系读者2011-1-1以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段,并执行该存储过程,查看显示结果。 2、使用T-SQL语句创建一个名为“读者借阅信息_PROC”的带参数的存储过程,要求根据输入的读者的编号显示读者的所有借阅信息,包括“读者编号”、“姓名”、“系部”、“图书编号”、“图书名称”和“借阅日期”等字段,并执行该存储过程,查看显示结果。 create proc读者借阅信息_PROC1 @dzbh char(10) as begin select tb_reader.读者编号,姓名,系部, tb_book.图书编号,书名,借阅日期 from tb_book,tb_reader,tb_borrow where tb_book.图书编号=tb_borrow.图书编号 and tb_reader.读者编号=tb_borrow.读者编号 and tb_reader.读者编号=@dzbh end -- declare @srcs char(10),@fhzt int set @srcs='R10009' exec @fhzt=读者借阅信息_PROC1 @srcs print'执行状态值为'+cast(@fhzt as varchar(10)) 3、使用T-SQL语句创建一个名为“图书借阅信息_PROC”的带参数的存储过程,要求根据输入的图书编号计算该图书的借阅数量,并根据程序执行结果返回不同的值,执行成功返回0,不成

数据库增删改查

02.连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 03.创建数据库:create database [库名] 04.显示所有数据库: show databases; 05.打开数据库:use [库名] 06.当前选择的库状态:SELECT DATABASE(); 07.创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......); 08.显示数据表字段:describe 表名; 09.当前库数据表结构:show tables; 10.更改表格 11. ALTER TABLE [表名] ADD COLUMN [字段名] DATATYPE 12. 说明:增加一个栏位(没有删除某个栏位的语法。 13. ALTER TABLE [表名] ADD PRIMARY KEY ([字段名]) 14. 说明:更改表得的定义把某个栏位设为主键。 15. ALTER TABLE [表名] DROP PRIMARY KEY ([字段名]) 16. 说明:把主键的定义删除。 17.显示当前表字段:show columns from tablename; 18.删库:drop database [库名]; 19.删表:drop table [表名]; 20.数据操作 21.添加:INSERT INTO [表名] VALUES('','',......顺序排列的数据); 22.查询: SELECT * FROM [表名] WHERE ([条件]); 23.建立索引:CREATE INDEX [索引文件名] ON [表名] ([字段名]); 24.删除:DELETE FROM [表名] WHERE ([条件]); 25.修改:UPDATE [表名] SET [修改内容如name = 'Mary'] WHERE [条件]; 26. 27.导入外部数据文本: 28.1.执行外部的sql脚本 29.当前数据库上执行:mysql < input.sql 30.指定数据库上执行:mysql [表名] < input.sql 31.2.数据传入命令load data local infile "[文件名]" into table [表名]; 32.备份数据库:(dos下) 33.mysqldump --opt school>school.bbb 34. 35. 36. 37.提示:常用MySQL命令以";"结束,有少量特殊命令不能加";"结束,如备份数据库 38.一. 增删改查操作 39. 40.============================================================================ ===== 41.1. 增: 42.insert into 表名values(0,'测试'); 43.注:如上语句,表结构中有自动增长的列,也必须为其指定一个值,通常为0 44.insert into 表名(id,name) values(0,'尹当')--同上

2.数据库的创建和管理

2 使用向导创建并管理数据库 2.1.实验目的 1.熟悉SQL Server 2005 中SQL Server Management Studio的环境; 2.了解SQL Server 2005数据库的逻辑结构和物理结构; 3.掌握使用向导创建和管理数据库。 2.2.实验环境 硬件环境:PC机一台; 软件环境:SQL SERVER 2005; 2.3.实验内容 设有一学籍管理系统,其数据库名为“EDUC”,初始大小为10MB,最大为50MB,数据库自动增长,增长方式是按5%比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。数据库的逻辑文件名为“student_data”, 物理文件名为“student_data.mdf,存放路径为“f:\data\student_data.mdf”。日志文件的逻辑文件名为“student_log”, 物理文件名为“student_log.ldf”,存放路径为“f:\data\student_data.ldf'”。 使用SQL Server Management Studio(简称SSMS)创建数据库。 (1)使用向导创建上面描述的数据库; (2)使用向导删除上面建立的数据库; (3)使用SQL语言编程建立上面描述的数据库; (4)修改数据库; (5)查看数据库; (6)删除数据库; (7)更改数据库所有者;

2.4实验步骤 2.4.1使用向导创建上述的数据库。 使用SQL Server Management Studio(简称SSMS)创建数据库。 1.启动SSMS 在开始菜单中:所有程序->SQL Server 2005 ->SQL Server Management Studio,单击“连接”按钮,便可以进入【SQL Server Management Studio】窗口。如果身份验证选择的是“混合模式”,则要输入sa的密码,如图2-1,2-2所示; 图 2-11 连接SQLServer 2005

C++调用SQL存储过程实例

c/c++调用mysql存储过程 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1还支持64位windows,以及表空间。 在c/c++中访问mysql,常见的只是一些简单的业务,使用c中嵌入简单的查询、插入、更新等操作即可。随着业务的复杂化,完成一个业务功能需要非常多的sql操作环节,把这些语句都嵌入c代码中会导致c代码越来越繁琐、不清晰,这时候,自然就想到了存储过程来封装所有的数据库逻辑,通过c简单调用mysql存储过程接口即可达到目的,极大地减轻了c程序员的工作量,也便于前端业务处理逻辑与数据库处理逻辑的分离。下面就介绍c 语言调用存储过程的简单的方法。 1、首先创建一张表 用于存放用户信息 Create table student( id int auto_increment, name varchar(20), age tinyint, remark varchar(50), primary key(id) ); 2、插入几条信息 Insert into student values(1,"zhouys",90, ""); commit; 3、查看用户信息 mysql> select * from student;

+------+-----------+------+----------+ | id | name | age | remark | +------+-----------+------+----------+ | 1 | zhouys | 90 | | +------+-----------+------+-----------+ 1 row in set (0.00 sec) mysql> 4、创建存储过程 如下: delimiter // create procedure querystudent( in in_id int , #0-字符id 1-数字id # out out_ret int, #返回结果 out out_name varchar(20), #名字 out out_age int #年龄) label_a:begin declare v_name varchar(20) ; declare v_age tinyint ; #参数判断 if (in_id<=0) then set out_ret=-1; #id error

SQL常用增删改查语句

SQLSQL常用增删改查语句 作者:hiker 一.Insert 插入语句 1.Insert into 表名(列名)values (对应列名值) //插入一行. 2.Insert into 新表名(列名) Select (列名) 旧表名 3.Select 旧表名.字段… Into 新表名from 旧表名 4.Select identity ( 数据类型,标识种子,标识增长量) as 列名 Into新表名 From 旧表名 5.Insert 表名(列名) Select (对应列名值) union Select (对应列名值) union Select (对应列名值) 二.Update 更新语句 1.Update 表名set 列名=’更新值’ where 更新条件 三.delete 删除语句 1.delete from 表名where 删除条件 2.truncate table 表名//删除表中所有行 四.select 基本查询语句 1.select 列名from 表名where 查询条件 order by 排序的列名asc或desc升/降 2.select 列名as 别名from 表名where 查询条件 3.select 列名from 表名where 列名is null //查询空值 4.select 列名, ‘常量值’ as 别名from 表名//查询时定义输出一列常量值 5.select top 5 列名from 表名//查询前5行 6.select top 5 percent 列名from 表名//查询前百分之5的数据行 五.select 函数查询语句 1.select LEN(Class_Name)from Class //查询class_Name字符串长度 2.select upper(Class_Name)from Class //查询class_Name并转换为大写 3.ltrim和rtrim //清除字符串左右空格 4.select REPLACE(card_No,'0','9')from CardRecord//修改列中字符串中的字符 列名字符串中0修改为9 5.select STUFF(Card_No,2,3,'8888')from CardRecord 列名字符串中第2个开始删除3个字符,再从第二个开始插入8888字符串 6.select GETDATE()//显示系统日期

存储过程的创建和管理

实验指导——图书馆日常事务管理系统存储过程的创建和管理 1.创建存储过程 (1)使用SSMS创建存储过程 在TSJYMS数据库中创建一个查询图书库存量的存储过程“cx_tskcl_proc”,输出的内容包含类别号、图书编号、图书名称、库存数等数据内容。 CREA TE PROC cx_tskcl_proc AS SELECT类别号,图书编号,图书名称,库存数 FROM图书明细表 在TSJYMS数据库中创建一个“cx_dzxx_proc”存储过程,该存储过程能查询出所有借书的读者信息。 CREA TE PROC cx_dzxx_proc AS SELECT读者信息.* FROM读者信息,借还明细表 WHERE读者信息.借书证号=借还明细表.借书证号 (2)使用T-SQL语句创建存储过程 ①在TSJYMS数据库中创建一个名为“ins_tslb_proc”的存储过程,该存储过程用于向图书类别表插入记录。 CREA TE PROC ins_tslb_proc @NAME CHAR(20),@KIND CHAR(20) AS INSERT图书类别 V ALUES(@NAME,@KIND) ②在TSJYMS数据库中,创建一个名为TS_CX_PROC的存储过程,它带有一个输入参数,用于接受图书编号,显示该图书的名称、作者、出版和复本数。 CREA TE PROC ts_cx_proc @BIANHAO CHAR(10) AS SELECT图书名称,作者,出版社,复本数 FROM图书明细表 WHERE图书编号=@BIANHAO 2)存储过程的调用 ①执行cx_tskcl_proc存储过程,了解图书库存的信息。 EXEC cx_tskcl_proc ②执行cx_dzxx_proc存储过程,了解读者借书的情况。 EXEC cx_dzxx_proc ③通过ins_tslb_proc存储过程,新增一个图书类别('TP311','数据库技术'),并查询结果。 EXEC ins_tslb_proc'TP311','数据库技术' ④执行TS_CX_PROC存储过程,分别查询“99011818”、“01058589”、“07410801”等书号的图书信息。

SQL存储过程入门教程

1.sql存储过程概述 在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQL Server 2000 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。 1.1存储过程的概念 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 在SQL Server 的系列版本中存储过程分为两类:系统提供的存储过程和用户自定义存储过程。系统过程主要存储在master 数据库中并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server 提供支持。通过系统存储过程,MS SQL Server 中的许多管理性或信息性的活动(如了解数据库对象、数据库信息)都可以被顺利有效地完成。尽管这些系统存储过程被放在master 数据库中,但是仍可以在其它数据库中对其进行调用,在调用时不必在存储过程名前加上数据库名。而且当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。用户自定义存储过程是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程。在本章中所涉及到的存储过程主要是指用户自定义存储过程。 1.2存储过程的优点 当利用MS SQL Server 创建一个应用程序时,Transaction-SQL 是一种主要的编程语言。若运用Transaction-SQL 来进行编程,有两种方法。其一是,在本地存储Transaction- SQL 程序,并创建应用程序向SQL Server 发送命令来对结果进行处理。其二是,可以把部分用Transaction-SQL 编写的程序作为存储过程存储在SQL Server 中,并创建应用程序来调用存储过程,对数据结果进行处理存储过程能够通过接收参数向调用者返回结果集,结果集的格式由调用者确定;返回状态值给调用者,指明调用是成功或是失败;包括针对数据库的操作语句,并且可以在一个存储过程中调用另一存储过程。 我们通常更偏爱于使用第二种方法,即在SQL Server 中使用存储过程而不是在客户计算机上调用Transaction-SQL 编写的一段程序,原因在于存储过程具有以下优点: (1)存储过程允许标准组件式编程 存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的SQL 语句。而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。 (2)存储过程能够实现较快的执行速度

相关主题