实习中接触到的数据库知识

作者: 雾里看花最是迷人 | 来源:发表于2017-03-02 18:33 被阅读120次

在数据库方面,主要是涉及到之前没有接触或者接触很少的知识点。比如存储过程、select top实现数据分页、短路表达式。下面使用简单的例子来说明

首先在数据库中简单建立一个数据表,如图


users表.PNG

对于上表,只是截取部分,数据远不止7个,建表时采用循环插入数据的方法共插入99条数据
<pre>declare @i int,@j int;
set @i=1;
set @j=10;
while @i < 100
begin insert into test.dbo.users(id,name,password) values(@i,@j+1,@j+2);
set @i=@i+1;
set @j=@j+1;
end </pre>

在实际开发中建表时需要注意的问题:相似数据类型的区别
char:使用时需固定长度,如char(10),表示它占有10个字节,如果实际数据并未达到10字节,则差的部分会以空格来填补
varchar:使用时虽然设置有长度,如varchar(10),但是实际占位以实际数据为准,若数据只有5个字节则只占5个字节
text:不需要定义长度,一般用来存储文本数据
nchar、nvarchar、ntext:与char、varchar和text的区别在于存储数据的方式不同,nchar、nvarchar和ntext采用unicode字符存储数据,所有字符都是使用两个字节表示,因此存储总量(都是存储英文的情况下)char、varchar和text为8000,ncahr、nvarchar和ntext则只有4000

1.存储过程:在数据库中进行sql代码编写,类似java中的一个方法,可以接收参数,在java代码中可以直接调用这个方法获取数据,避免在java代码中编写sql语句(只是举例,并不是只有java可以使用)
建立存储过程

新建存储过程.png
右键新建存储过程,会得到下面的页面
存储过程示例.PNG
本例中先使用简单的查询全部数据,稍后会进行参数的添加
存储过程getUsers.PNG
如图:设置方法名为getUsers,查询全部数据
然后在java代码中进行调用
<pre>Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test","xxx","xxx");
CallableStatement cs = conn.prepareCall("{call getUsers()}"); //调用getUser()方法
ResultSet rs = cs.executeQuery(); //查询结果保存在ResultSet中
while(rs.next()){ //读取ResultSet中的数据
String name = rs.getString("name");
String password = rs.getString("password");
System.out.println("name is " + name + "and password is" + password);
}</pre>
打印结果:
部分数据.PNG

2.select top实现数据分页
select top在数据库中是读取前多少条数据。
新建存储过程,如下

存储过程getUsersByIndex.PNG
上图中select top部分的代码,pageSize是指每个页面显示多少数据,pageIndex是指当前的页面,@pageSize*(@pageIndex-1)得到的结果便是当前页之前已经显示了多少条数据,第二个select top就是获得这些数据的id,然后第一个select top则是从id不在这些id之中的数据开始选取前多少条,由此实现分页功能
在java代码中进行调用
<pre>CallableStatement cs = connection.prepareCall("{call getUsersByIndex(?,?)}");
callableStatement.setInt(1, 10); //第一个参数指的是pageSize,就是每页显示多少数据
callableStatement.setInt(2, 3); //第二个参数指的是pageIndex,当前的页码
ResultSet rs = callableStatement.executeQuery();
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String password = rs.getString("password");
System.out.println("id is " + id + " name is" + name + " password is " + password);
}</pre>
综上就是每页显示10条数据,当前显示第3页,打印结果如下
第3页的10条数据.PNG

3.短路表达式
在涉及模糊查询和全部查询时,可以分两条语句操作,需要写两个方法,但是会有重复代码,使用短路表达式可以将两条语句变为一条, 只需要一个方法即可。还是以上表为例,查询全部数据,查询name中关键字为0的数据(这次不使用存储过程)
<pre> keyword = "%" + keyword + "%"; //keyword由调用该方法时传入
String sql = "select * from users where ((0=? and name like '%%') or (name like ?))";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test","huangkunkun","312293");
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 1); //第一个参数作为判断条件,这里为了执行or后面的语句,直接设置成1
ps.setString(2, keyword);
ResultSet rs = ps.executeQuery();
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String password = rs.getString("password");
System.out.println("id is " + id + " name is " + name + " password is " + password);
}
} catch (Exception e) {
e.printStackTrace();
}</pre>
上面代码中的<pre>select * from users where ((0=? and name like '%%') or (name like ?))</pre> 如果0=?即传入的参数若满足和0相等,则执行or前面的代码,且忽略or后面的代码,如果等式不成立,则会执行or后面的代码。打印结果如下

name关键字为0的数据.PNG

主要知识点就是这些,都是按照自己的理解来写的,可能会有不全面的地方,如果有错误,欢迎指出共同探讨哈。

相关文章

  • 实习中接触到的数据库知识

    在数据库方面,主要是涉及到之前没有接触或者接触很少的知识点。比如存储过程、select top实现数据分页、短路表...

  • 实习中接触到的JSP知识

    JSP主要用于动态WEB开发,打开一个JSP页面,会发现主要是由HTML和JAVA代码构成,在学校刚开始接触到JS...

  • mongo学习第一步

    mongodb 学习 首次接触到非关系型数据库mongodb,相比于关系型数据库mysql中的数据库,表还有字段,...

  • 实习的意义

    在短暂的实习过程中,我采用了看、问,亲自动手等方式,我深深地感觉到自己所学知识的肤浅,接触到实际,才发现自...

  • Neo4j安装教程

    最近再做企业与纳税人关联关系知识图谱,接触到图数据库,经过一番比较后,选择Neo4j图数据库作为知识图谱项目的数...

  • HttpClient 学习笔记(持续更新中)

    本文是博主在实习阶段所接触到的业务中所学到的关于HttpClient知识点总结。 前言 HttpClient是通过...

  • 初识Neo4j - 图数据库

    起个头:由于涉及知识图谱的项目需要,接触到Neo4j图形数据库,就想写个笔记,做个分享,督促自己。 知识图谱: 简...

  • 浅谈数据库中的知识发现

    浅谈数据库中的知识发现 前言:数据挖掘只是数据库知识发现中的一小部分内容,数据库中的知识发现是一个从数据集中发现知...

  • 13 1 25 你的改变“冲上云霄”

    接触了三年多学前教育理论知识,真正接触到幼儿是在上个学期为期三个多月的实习生活中。我在公幼月亮小班见识到了很...

  • GreenDao 3.2.0 的基本使用

    前言 Android开发中我们或多或少都会接触到数据库。Android中提供了一个占用内存极小的关系型数据库-SQ...

网友评论

    本文标题:实习中接触到的数据库知识

    本文链接:https://www.haomeiwen.com/subject/pmdkgttx.html