数据库SQL的基础知识及java连接数据库的基本操作过程
Posted 南疆小黎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库SQL的基础知识及java连接数据库的基本操作过程相关的知识,希望对你有一定的参考价值。
数据库SQL的基础知识
【补充数据库基本知识点】
数据库是按照一定的数据结构来组织、存储和管理数据的仓库
数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库
1、数据库表的完整性约束:域约束(表中字段取值范围)、主码约束(主键,唯一确定一条记录)、外码约束(表中一个字段,确实另外一张表的主码)
用SQL语句生成外键:
//为foods表的CategoryId字段生成外键fk_Foods_Category
alter table foods add constraint fk_Foods_Category foreign key(CategoryId) references Category(id);
####-----增加外键的方法------#####
#######alter table 需加外键的表 add constraint 外键名 foreign key(需加外键表的字段名) referencnes 关联表名(关联字段名);#####
2、SQL语句补充
在描述SQL有关语句格式时,常常用到一些符号
[ ] :表示可选项,即方括号中内容可以根据需要进行选择
{ } :表示必选项
<> :表示尖括号中的内容是用户必须要提供的参数
| : 表示有多个选项时只能选择一项,多个选项之间用 ‘ | ’隔开
[ , …n] : 表示前面的项可重复n次,相互之间用‘ ,’隔开
A、 创建数据库的SQL命令
CREATE DATABASE<数据库名>
Eg: CREATE DATABASE Student;//创建Student数据库
B、 表的操作
(1)sql语句创建表
CREATE TABLE<表名>(<字段名><数据类型>[<字段完整性约束>],<字段名><数据类型>[<字段完整性约束>]…,<字段名><数据类型>[<字段完整性约束>]);
Eg:CREATE TABLE Students(sno CHAR(9) NOT NULL PRIMARY KEY,
sName CHAR(12) NOT NULL , sex CHAR(2) , age INT);
(2) 删除表
DROP TABLE<表名>
(3)修改表结构
ALTER TABLE<表名>[ALTER COLUMN <字段名><数据类型>] |
ADD COLUMN 子句—增加新字段及相应的完整性约束条件
DROP COLUMN 子句 –删除表中字段
DROP CONSTRAINT 子句—删除完整性约束
Eg:
ALTER TABLE Student ADD COLUMN phone CHAR(11);
C、 表数据操作
(1) 插入数据:
INSERT INTO<表名>[(<字段名>[,<字段名>]…)] VALUES(<值>[,<值>]…)
Eg:
Insert into Student(sNO,sName,sex,age) values(‘201201009’,’隔壁老王’,‘男’,18);
(2) 修改数据
UPDATE <表名> SET <字段名>=<表达式>[,<字段名>==<表达式>[WHERE <条件>];
Eg:update Student set age=20 where sNO=‘201201009’;
(3) 删除数据
DELETE FROM <表名>[WHERE <条件>]
Eg:delete from Student where sNo=’201201009’;
(4) 查询数据
SELECT [ALL | DISTICT][TOP n [PERCENT]]{ * | {<字段名>|<表达式>|}
[[AS <别名>]|<字段名>[[AS] <别名>]][ , …n]}
FROM <表名>[WHERE <查询条件表达式>]
[GROUP BY <字段名>[HAVING<分组条件>]]
[ORDER BY <次序表达式>[ASC | DESC]];
参数说明:
ALL—显示结果集中的所有数据,包括重复行,ALL是默认设置
DISTINCT—显示结果集中不重复的所有行
GROUP BY 子句—按照<字段名>进行分组,该字段值相同的分为一个组,分组后每组只显示一个结果;如果GROUP BY子句带HAVING 子句,则只有满足HAVING指定条件的组才会输出,有过GROUP BY 有多个字段名,则按照第一个字段分组,再按照第二个字段分组,以此类推
HAVING 子句---分组条件与WHERE 子句中的条件格式类似
ORDER By 子句---只有两个结果一个是ASC升序(系统默认),一个DESC降序;ORDER BY子句需要放到查询语句的最后
A、 简单查询
Eg:Select sNO as 学号,sName as 姓名 from Student where age betwwen 18 and 20 ;
将年龄在18到20及之间满足条件的结果返回
【注】v1 betwwen v2 and V3 相当于v1>=v2 and v1<=v3
v1 not betwwen v2 and V3 相当于v1<v2 and v1>v3
Where 常用的运算符及功能 |
|
运 算 符 |
功 能 |
=、>、<、>=、<=、!=、<> |
比较范围 |
betwwen and、not betwwen and |
在某个范围之间(包含两端) |
In 、not in |
数据在某一个集合 |
Like 、not like |
字符模糊匹配 |
Is null、is not null |
判断空值 |
and、or、not |
逻辑运算(与或非) |
B、 多重条件查询
Eg:select * from Student where dep=’计算机’ and sex=‘男’;
C、 模糊查询
<字段名>[not] like <匹配串>
模糊查询时<匹配串>中可以含有的通配符 |
||
通配符 |
功能 |
实例 |
% |
代表0个或多个字符 |
‘ab%‘ 表示’ab’后可接任意字符串 |
_(下划线) |
代表一个字符 |
‘a_b’表示‘a’与‘b‘之间可为任意单个字符 |
[ ] |
代表在某一范围的字符 |
[0-9]表示0~9之间的字符 |
[^ ] |
表示不在某一范围的字符 |
[^0-9]表示不在0~9之间的字符 |
Eg:select * from student where sName Like ’李%’;
D、 常用的统计函数汇总查询
常用的统计函数及功能 |
|
函 数 名 |
功 能 |
AVG(<字段名>) |
求字段名所在列的平均值(必须是数值型) |
SUM(<字段名>) |
求字段名所在列的总和(必须是数值型) |
MAX(<字段名>) |
求字段名所在列的最大值 |
MIN(<字段名>) |
求字段名所在列的最小值 |
COUNT(*) |
统计个数 |
COUNT([DISTINCT])<字段名> |
统计不重复列的个数 |
Eg:select AVG(grade) as 平均成绩 from score;
E、 OEDER BY 子句
Eg:select sNo,grade from Score where cNo=‘c001‘ ORDER BY grade DESC;
F、 分组数据
GROUP BY子句可以按照关键字段的值来组织数据,关键字段相同的为一组,一般情况之下可以根据表中的某一个字段进行分组,并且要求使用统计函数,这样每一个分组就只有一个记录
Eg:
Select cNO,COUNT(*) as 人数 from Score GROUP BY cNO;
java连接数据库的基本操作过程
1、 JDBC是java程序中访问数据库的标准API,jdbc给java程序员提供访问和操纵众多关系数据库的一个统一的接口。
2、 JDBC的分类:
SQL Server JDBC、mysql JDBC、Oracle JDBC、JDBC-ODBC(连接ACCESS)
3、 JDBC中主要的类与接口(有颜色的代表接口)
JDBC中主要的类与接口 |
|
类与接口 |
功 能 说 明 |
DriverManager |
负责加载各种不同的驱动程序,根据不同的请求返回相应的 |
SQLException |
代表数据库连接的建立、关闭或SQL语句的执行过程中发生的异常 |
Connection |
数据库连接,负责与数据库间通讯 |
Statement |
用以执行不含参数的静态SQL查询和更新,并返回执行结果 |
PreparedStatement |
用以执行包含参数的动态SQL查询和更新 |
CallableStatement |
用以获得数据库的存储过程 |
ResultSet |
获得SQL查询结果 |
【注】使用JDBC访问数据库的基本步骤为:加载驱动程序、建立与数据库的连接、创建执行方式语句、执行SQL语句、处理返回结果和关闭创建的各种对象。
4、 建立与数据库的连接
(1) 加载JDBC驱动程序:利用Class.forName(JDBCDriverClass);
forName()是Class的静态方法,参数JDBCDriverClass是要加载的JDBC驱动程序类的名称,它是以字符串形式表达的类长名。
数据库的常用驱动程序类 |
|
数据库 |
驱动程序类 |
Access |
sun.jdbc.odbc.JdbcOdbcDriver |
SQL Server |
com.microsoft.sqlserver.jdbc.SQLServerDriver |
MySQL |
com.mysql.jdbc.Driver |
Oracle |
oracle.jdbc.driver.OracleDriver |
Eg:
Class.froName(“com.mysql.jsbd.Driver”);//加载MySQL数据库驱动
【注】创建数据库连接时Driver Manager类的常用方法
Public static Connection getConnection(String url,String user,String password);
url为链接数据库的url连接,用户名和密码为登录数据库的用户名和密码
DriverManager类的getConnection()是实现建立JDBC驱动程序到数据库连接的方法一般格式如下:
Connection conn=DriverManager.getConnection(url,user,password);
JDBC的URL |
|
数据库 |
URL模式 |
Access |
jdbc:odbc:dataSource |
SQL Server |
jdbc:sqlserver://hostname:port#;DatabaseName=dbname |
MySQL |
jdbc:mysql://hostname:3306/dbname |
Oracle |
jdbc:oracle:thin:@hostname:port#:oracleDBSID |
例如连接MySQL数据库的操作:
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/Student”,”root”,”123456”);
简单操作数据库的实例代码
package com.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class dataBaseConnection {
//要加载的驱动类型
private static String driver="com.mysql.jdbc.Driver";
//连接数据库的URl
private static String url="jdbc:mysql://localhost:3306/foods";
//登录数据库的用户名
private static String user="root";
//登录数据库的密码
private static String password="root";
public static void main(String[] args) {
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
String selectsql ="select * from foods where CategoryId=1";
try {
//加载驱动,同时需要在项目中add libraries连接驱动程序mysql-connector-java-5.1.26-bin.jar
Class.forName(driver);
//创建数据库连接
//conn=DriverManager.getConnection(url);这是错误方式,数据库登录用户名和密码没有添加
conn=DriverManager.getConnection(url,user,password);
//利用连接对象conn创建Statement接口对象,类似于游标的作用
stm=conn.createStatement();
//将sql语句作为参数传递给Statement的查询方法
rs=stm.executeQuery(selectsql);
//遍历查询结果集中的元素
while(rs.next()){
//利用集合中的getXXX(Colum)方法获得数据库表中Colum的内容
int foodsId=rs.getInt("FoodsId");
int CategoryId=rs.getInt("CategoryId");
String ChineseName=rs.getString("ChineseName");
String English=rs.getString("English");
String Description=rs.getString("Discription");
System.out.println(foodsId+" "+CategoryId+" "+ChineseName+" "+English+" "+Description);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//关闭结果集对象
if(rs!=null) rs.close();
//关闭Statement对象
if(stm!=null) stm.close();
//关闭JDBC与数据库的连接对象
if(conn!=null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
以上是关于数据库SQL的基础知识及java连接数据库的基本操作过程的主要内容,如果未能解决你的问题,请参考以下文章
Java JDBC连接MySQL数据库,基础语法及自定义JDBC的MySQL工具类