详细MySQL数据库与JDBC编程

文章目录

MySQL数据库与JDBC编程

JDBC(JavaDatabaseConnectivity)

DDL(DataDefinitionLanguage,数据定义语言)语句

创建表

修改表结构

增加列定义

修改列定义

删除列

删除数据表

清空表

MySQL重命名数据表

MySQL修改列名

数据库约束

索引(一个数据库对象)

视图

DML(DataDefinitionLanguage,数据定义语言)语句

insertinto语句

update语句

deletefrom语句

单表查询

where后的其他运算符

orderby输出排序

数据库函数

MySQL单行函数

分组和组函数

groupby分组

多表连接查询

交叉连接

自然连接

using子句连接

on子句连接

左、右、全外连接

子查询

集合运算

union并运算

minus差运算

intersect交运算

JDBC的经典用法

JDBC编程步骤

示例:简单SQL查询

执行SQL语句的方法

使用executeLargeUpdate方法执行DDL和DML语句

示例:读取ini文件,连接并创建数据表

使用PreparedStatement执行SQL语句

示例:使用PreparedStatement插入记录

使用CallableStatement调用存储过程

示例:调用存储功能

管理结果集

可滚动、可更改的结果集

示例:创建可滚动、可更改的结果集

处理Blob类型数据

示例:通过SQL的Blob存储并读取图片数据

使用ResultSetMetaData分析结果集

示例:分析结果集

使用RowSet包装结果集

RowSetFactory和RowSet

示例:通过RowSetFactory使用jdbcRowSet

离线RowSet

示例:CachedRowSet离线操作SQL

事务处理

事务的概念

JDBC事务支持

使用批量更新

MySQL数据库与JDBC编程

JDBC(JavaDatabaseConnectivity)

对于关系数据库而言,最基本的数据存储单元是数据表。

SQL:StructuredQueryLanguage,结构化查询语言。

DDL(DataDefinitionLanguage,数据定义语言)语句

主要操作数据库对象。

创建表

CREATETABLE[模式名.]表名(columnName1datatype[defaultexpr],...)利用子查询建表

CREATETABLE[模式名.]表名[col[,col]]asselect*fromuser_inf;修改表结构

增加列定义

ALTERTABLE表名add(columnName1datatype[defaultexpr],...);字符串值由单引号引起。

修改列定义

ALTERTABLE表名modifycolumnNamedatatype[defaultexpr][first

afterColName];first、afterColName指定需要将目标修改到指定位置。

删除列

ALTERTABLE表名dropcolumnName;删除数据表

DROPTABLE表名;表结构删除,表对象不再存在;表的所有数据被删除;该表所有相关的索引、约束也被删除。

清空表

TRUNCATE表名;删除表内的全部数据,但保留表结构。

MySQL重命名数据表

ALTERTABLE表名renameto新表名;MySQL修改列名

ALTERTABLE表名CHANGE列名新列名type[defaultexpr][first

afterColName]数据库约束

5种完整性约束

1、NOTNULL:非空约束,指定某列不能为空。

CREATETABLE表名(idintNOTNULL);

2、UNIQUE:唯一约束,指定某列或者某几列组合不能重复。

1、列级约束nameVARCHAR()UNIQUE;2、表级约束(为多列组合建立唯一约束,或想自行指定约束名)CREATETABLE表名(#表级约束语法建立唯一约束UNIQUE(name),#并指定约束名CONSTRAINT新约束名UNIQUE(pass),#指定两列组合不允许重复CONSTRAINT新约束名UNIQUE(name,pass))3、MySQL删除约束ALTERTABLE表名DROPINDEX约束名;4、大部分数据库删除约束ALTERTABLE表名DROPCONSTRAINT约束名;

3、PRIMARYKEY:主键,指定该列的值可以唯一地标识该条记录。

1、列级约束CREATETABLE表名(idINTPRIMARYKEY);2、表级约束CREATETABLE表名(idINT,CONSTRAINT约束名PRIMARYKEY(id));3、建立多列组合的主键约束CREATETABLE表名(idINT,nameVARCHAR(),PRIMARYKEY(id,name));4、删除主键约束ALTERTABLE表名DROPPRIMARYKEY;5、增加主键约束MODIFY:采用列级约束语法ADD:采用表级约束语法6、主键自增长idINTAUTO_INCREMENTPRIMARYKEY

4、FOREIGNKEY:外键,指定该行记录从属于主表中的一条记录,主要用于保证一个或两个数据表之间的参照完整性。

1、指定两列的联合外键CREATETABLE表名(SnameVARCHAR(),SpassVARCHAR(),CONSTRAINT约束名FOREIGNKEY(Sname,Spass)REFERENCES主表名(Fname,Fpass));2、级联删除(定义当删除主表记录时,从表记录也会随之级联删除/从表记录的外键设置为null)CREATETABLE表名(SnameVARCHAR(),FOREIGNKEY(Sname)REFERENCES主表名(Fid)ONDELETECASCADE#也可用ONDELETESETNULL);

5、CHECK:检查,制定一个布尔表达式,用于指定对应列的值必须满足该表达式。(MySQL不支持)

CREATETABLE表名(keyINT,CHECK(key10));索引(一个数据库对象)

创建索引的唯一作用是加速对表的查询,索引通过使用快速路径访问方法来快速定位数据,从而减少了磁盘的I/0。

创建索引:

1、自动当在表上定义主键约束、唯一约束、外键约束时,系统自动创建对应的索引。2、手动CREATEINDEX索引名ON表名(name,pass);删除索引:

1、自动数据表被删除时,该表上的索引自动被删除。2、手动DROPINDEX索引名ON表名;

视图

数据表中数据的逻辑显示。

创建视图,且不允许修改数据:

CREATEORREPLACEVIEW视图名AS查询语句WITHCHECKOPTION;删除视图

DROPVIEW视图名;DML(DataDefinitionLanguage,数据定义语言)语句

主要操作数据表里的数据。由insertinto、update、deletefrom三个命令组成。

insertinto语句

向数据表中插入记录:

INSERTINTO表名(id,name,age)VALUES(1,sxf,null);带子查询的插入(要求所选的数据列个数相等、类型匹配):

INSERTINTO表名(name)SELECTnameFROM表2;MySQL多条插入

INSERTINTO表名(id,name)VALUES(1,a),(2,b);update语句

修改数据表的记录。

UPDATE表名SETname=sxf,pass=WHEREid=1;deletefrom语句

删除指定数据表的记录。总是整行删除。

DELETEFROM表名WHEREid1ANDid5;单表查询

字符串连接用:concat();为数据列和表达式起别名用:as或空格;为表起别名用:as或空格;去除重复行用:distinct;

SELECTDISTINCTCONCAT(na,me)ASmyNameFROMtabletWHEREid*24;where后的其他运算符

1、expr2=expr1=expr3expr1BETWEENexpr2ANDexpr3;2、expr1等于括号里的任意一个表达式的值expr1IN(expr2,expr3,...);3、字符串匹配,下划线代表一个字符,百分号代表任意多个字符like‘_%’;4、是否为nullisnull;orderby输出排序

desc降序,默认asc升序。如果按多列排序,则每列的asc、desc必须单独设定。

SELECT*FROMtableORDERBYnameDESC,idASC;数据库函数

多用在select和where后面。

MySQL单行函数

选出字符长度SELECTchar_length(ip)FROMIP;计算sin值SELECTsin(1.57);为日期添加一定时间SELECTADDDATE(-01-02,3);获取当前日期SELECTCURDATE();获取当前时间SELECTcurtime();如果expr1=null,返回expr2,否则返回expr1ifnull(expr1,expr2)如果expr1=expr2,返回null,否则返回expr1nullif(expr1,expr2)类似于三目运算符“:?”if(expr1,expr2,expr3)如果expr1为null,返回true,否则返回falseisnull(expr1)选择流程控制CASEvalueWHENvalue1THENresult1WHENvalue2THENresult2...ELSEresultENDCASEWHENcondition1THENresult1WHENcondition2THENresult2...ELSEresultEND分组和组函数

将一组记录作为整体计算,返回一个结果。

计算多行expr的平均值,数据类型必须是数值型。distinct不计算重复值;默认all计算重复值avg([distinct

all]expr)计算多行expr的总条数,数据类型可以是任意类型。*表示统计该表内的记录行数;distinct不计算重复值count({*

[distinct

all]expr})计算多行expr的最大值max(expr)计算多行expr的最小值min(expr)计算多行expr的综合sum([distinct

all]expr)groupby分组

对记录进行显示分组。

相同的记录当成一组,并过滤组havingSELECT*FROMipGROUPBYipHAVINGcount(*)2;多列的值完全相同时才会被当成一组SELECTcount(*)FROMipGROUPBYid,ip;多表连接查询

交叉连接

无需任何连接条件。

SELECTs.*,nameFROMstudentTablesCROSSJOINteacherTablet;自然连接

以两个表中的同名列作为连接条件;若没有同名列,则效果等同交叉连接。

SELECTs.*,nameFROMstudentTablesNATURALJOINteacherTablet;using子句连接

显式指定两个表中的哪些同名列作为连接条件,要求必须有同名列;自然连接无法指定。

SELECTs.*,nameFROMstudentTablesJOINteacherTabletUSING(id);on子句连接

每个on子句只能指定一个连接条件。如果需要进行N表连接,则需要N-1个join...on对。

SELECTs.*,nameFROMstudentTablesJOINteacherTabletONs.teacher=t.id;左、右、全外连接

分别使用left[outer]join、right[outer]join、full[outer]join,连接条件通过on子句指定。

左外连接:把左边表中所有不满足连接条件的记录全部列出。右外连接:把右边表中所有不满足连接条件的记录全部列出。全外连接(MySQL不支持):把两个表中所有不满足连接条件的记录全部列出。SELECTs.*,nameFROMstudentTablesLEFTJOINteacherTabletONs.teacher=t.id;子查询

在查询语句中嵌套另一个查询,支持多层嵌套。

出现在from语句后当成数据表;出现在where条件后作为过滤条件的值;子查询要用括号括起来;把子查询当成数据表时,可以为该子查询起别名。SELECT*FROM(SELECT*FROMip)tWHEREt.id1;SELECT*FROMipWHEREid(SELECTSidFROMStableWHERESname=SXF);集合运算

两个结果集所包含的数据列的数量必须相等。两个结果集所包含的数据列的数据类型也必须一一对应。union并运算

SELECT语句UNIONSELECT语句;minus差运算

MySQL不支持,使用notin代替。

SELECT语句MINUSSELECT语句;SELECTXXFROMXXWHERE(XX,XX)NOTIN(XX,XX);intersect交运算

MySQL不支持,使用join...on代替。

SELECT语句INTERSECTSELECT语句;SELECTXXFROMXXJOINXXON(XX=XX)WHEREXX=XX;JDBC的经典用法

JDBC编程步骤

Java连接MySQL需要驱动包,最新版下载地址为:


转载请注明:http://www.xcqg58.com/pxxx/pxxx/26846789.html

  • 上一篇文章:
  •   
  • 下一篇文章: