mysql jdbc 表结构_JavaEE_day09_MySQL多表JDBC
一、数据库表结构:
首先,有两个表:
分类表:category
create table category(
cid varchar(32) primary key,
cname varchar(100)
);
商品表:product
create table product(
pid varchar(32) primary key,
pname varchar(40),
price double,
category_id varchar(32)
);
其中:category为主表,"cid"为主键;product为从表,category_id为外键。
外键的特点:
从表外键的值是对主表主键的引用;
从表外键类型,必须与主表外键类型一致。
使用外键的目的:保证数据完整性。
1.表与表之间的关系:
一对多关系:从表(多方)创建一个字段,作为外键指向主表(一方)的主键;
多对多关系:创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自的主键;
一对一:外键唯一、外键是主键、笛卡尔积。
2.创建表实现:
添加外键字段:
alter table product add category_id varchar(32);
添加约束:
alter table product add foreign key(category_id) references category(cid);
注意:
从表不能添加主表不存在的记录;
主表不能删除从表已引用的记录。
多对多关系的实现:
首先,有三个表:
商品表:product
create table product(
pid varchar(32) primary key,
pname varchar(40),
price double,
category_id varchar(32)
);
订单表: orders
create table orders(
oid varchar(32) primary key,
totalprice double
);
订单项表:orderitem
此表为建立商品表和订单表的关系而建立
create table orderitem(
oid varchar(50),
pid varchar(50)
);
添加订单表和订单项表的主外键关系:
alter table orderitem add constraint oreritem_orders_fk foreign key(oid) refereneces orders(oid);
添加商品表和订单项表的主外键关系:
alter table product add constraint orderitem_product_fk foreign key(pid) references orders(pid);
二、查询:
两个表:
1.交叉连接:
//基本不会使用,得到的是两个表的笛卡尔乘积
select * from A,B;
2.内连接:
隐式内连接:
select * from A,B where 条件;
显式内连接:
//inner可以省略
select * from A inner join B on 条件;
3.外链接:
左外连接:
//out可以省略
select * from A left out join B on 条件;
右外连接:
select * from A right out join B on 条件;
3.子查询:
例:查询“化妆品”分类上架商品详情:
select * from product where category_id=(select cid from category where name=‘化妆品’);
JDBC相关操作:
JDBCUtils_V3.java:
package com.zl.jdbc;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.ResourceBundle;
/**
* 提供获取连接和释放资源的 方法
*
*/
public class JDBCUtils_V3 {
private static String driver;
private static String url;
private static String username;
private static String password;
/**
* 静态代码块加载配置文件信息
*/
static {
try {
// 1.通过当前类获取类加载器
ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();
// 2.通过类加载器的方法获得一个输入流
InputStream is = classLoader.getResourceAsStream("db.properties");
// 3.创建一个properties对象
Properties props = new Properties();
// 4.加载输入流
props.load(is);
// 5.获取相关参数的值
driver = props.getProperty("driver");
url = props.getProperty("url");
username = props.getProperty("username");
password = props.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取连接方法
*
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
TestUtils.java
package com.zl.jdbc.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.junit.Test;
import com.zl.jdbc.JDBCUtils_V1;
import com.zl.jdbc.JDBCUtils_V2;
import com.zl.jdbc.JDBCUtils_V3;
/**
* 测试工具类
*
*/
public class TestUtils {
/**
* 根据id更新用户信息方法
*/
@Test
public void testUpdateById() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 1.获取连接
conn = JDBCUtils_V3.getConnection();
// 2.编写sql语句
String sql = "update tbl_user set upassword=? where uid=?";
// 3.获取执行sql语句对象
pstmt = conn.prepareStatement(sql);
// 4.设置参数
pstmt.setString(1, "999");
pstmt.setInt(2, 3);
// 5.执行更新操作
int row = pstmt.executeUpdate();
if (row > 0) {
System.out.println("更新成功!");
} else {
System.out.println("更新失败!");
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
// 6.释放资源
JDBCUtils_V3.release(conn, pstmt, null);
}
}
/**
* 根据id删除信息方法
*/
@Test
public void testDeleteById() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 1.获取连接
conn = JDBCUtils_V3.getConnection();
// 2.编写sql语句
String sql = "delete from tbl_user where uid=?";
// 3.获取执行sql语句对象
pstmt = conn.prepareStatement(sql);
// 4.设置参数
pstmt.setInt(1, 4);
// 5.执行删除操作
int row = pstmt.executeUpdate();
if (row > 0) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
// 6.释放资源
JDBCUtils_V3.release(conn, pstmt, null);
}
}
/**
* 添加用户信息方法
*/
@Test
public void testAdd() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 1.获取连接
conn = JDBCUtils_V2.getConnection();
// 2.编写sql语句
String sql = "insert into tbl_user values(null,?,?)";
// 3.获取执行sql语句对象
pstmt = conn.prepareStatement(sql);
// 4.设置参数
pstmt.setString(1, "lisi");
pstmt.setString(2, "hehe");
// 5.执行插入操作
int row = pstmt.executeUpdate();
if (row > 0) {
System.out.println("添加成功!");
} else {
System.out.println("添加失败!");
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
// 6.释放资源
JDBCUtils_V2.release(conn, pstmt, null);
}
}
/**
* 根据id查询用户信息
*/
@Test
public void testFindUserById() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 1.获取连接
conn = JDBCUtils_V1.getConnection();
// 2.编写sql语句
String sql = "select * from tbl_user where uid=?";
// 3.获取执行sql语句对象
pstmt = conn.prepareStatement(sql);
// 4.设置参数
pstmt.setInt(1, 2);
// 5.执行查询操作
rs = pstmt.executeQuery();
// 6.处理结果集
while (rs.next()) {
System.out.println(rs.getString(2) + "----" + rs.getString("upassword"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 7.释放资源
JDBCUtils_V1.release(conn, pstmt, rs);
}
}
}
mysql jdbc 表结构_JavaEE_day09_MySQL多表JDBC相关推荐
- mysql jdbc 表结构_JDBC操作表:JDBC修改表结构
操作数据库:mysql 操作目的:通过增加字段,删除字段,修改字段和修改字段类型的方式让大家熟练掌握通过JDBC修改表结构. 在通过JDBC修改表结构前,我们还是先看下当前的表结构,如下图所示: 1. ...
- php拷贝mysql表_MySQL复制表数据或表结构到新表中
MySQL复制表数据到新表的几个步骤. 1.MySQL复制表结构及数据到新表 CREATE TABLE new_table SELECT * FROM old_table; 2.只复制 MySQL复制 ...
- mysql 表结构关系_mysql 表关系 与 修改表结构
mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远是在多的那张表中设置外键 """ 从左边的表思 ...
- mysql 复制表结构到一个新表_MySQL复制表数据或表结构到新表中
MySQL复制表数据到新表的几个步骤. 1.MySQL复制表结构及数据到新表 CREATE TABLE new_table SELECT * FROM old_table; 2.只复制 MySQL复制 ...
- mysql表结构定义_Mysql表结构定义及相关语法
mysql语法及相关命令 1.每个sql命令都需要使用分号来完成 2.可以将一个命令写成多行 3.可以通过\c来取消本行命令 4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端 5. ...
- java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解
摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...
- Mysql复制表两种方式(复制表结构、复制表结构和数据、复制表中的部分数据、复制表中的部分数据并起别名)
需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE - SELECT 命令,是无法实现的. 本章节将为大家介绍如何完整的复制MySQL数据表,步骤如 ...
- Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句
Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句 1.创建数据库表 create table t_student( 表属性以,隔开 最后一行不用,): 2.查看表结构 desc t_st ...
- mysql根据表结构自动生成表设计文档
最近总是接到要整理新增需求的文档任务, 其他的业务逻辑说明写起来倒还可以没问题, 每每到了,写表设计文档时,慢慢的粘贴就很是头疼 刚好最近在学go 正愁没什么需求练手,就想写个 根据表结构自动生成表设 ...
最新文章
- k-d tree树 近邻算法
- 使用R进行相关性分析
- Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录...
- 谷歌停止中国版搜索引擎;李楠宣布离职魅族;微软用 Rust 替代 C/C++ | 极客头条...
- 为什么我会弃Java,选择了Kotlin——专访《Java编程思想》作者 Bruce Eckel
- office2010 反应慢_office2010打开时间太慢。怎么办?
- 树莓派安装centos系统
- 利用bat文件批量修改文件后缀名
- 程序读取凡人修仙传热度数据
- shell 后台运行
- 系统设计-开放平台(二)
- 关于 Java.lang.NoClassDefFoundError 解决
- springboot搭建项目环境以及整合其他技术
- 电脑屏幕亮度能否自动调节
- php取FBOX数据,如何实现如下功能
- 整理的一些 Vue3 知识点,初学者看完就能上手做项目
- matlab的仿真实验报告答案,模糊控制MALTAB系统仿真实验报告
- 首场百度大脑开放日来袭 | 全新开放24项AI技术
- 香港室内设计公司【Junee】申请纳斯达克IPO上市,募资2500 万美元
- 标准机构发布物联网安全测试指南
热门文章
- 【MySQL】简单命令总结
- 研究人员提出增强Wi-Fi传输的新方法
- 零基础学python-3.2 变量赋值
- 博客入驻阿里“云栖社区”
- another app is currently holding the yum lock;waiting for it to exit解决
- 分布式系统设计注意点
- [转载]ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
- ASP.NET State Service
- html音乐唱片自动转,HTML5音乐播放器(四):播放列表与播放方式
- wincc报表步骤实例_Wincc 如何连接SQL Server 数据库