Java学习路线-40:Java数据库编程基础操作

举报
彭世瑜 发表于 2021/08/14 01:05:41 2021/08/14
【摘要】 第36 章 : Java数据库编程基础操作 156 JDBC简介 JDBC 属于一种服务,所有服务都必须按照指定的流程进行操作 Java Database Connectivity 开发包 java.sql 核心组成 DriverManager 接口 Connection、Statement、PreparedStatement、ResultSet 四种连接方式: ...

第36 章 : Java数据库编程基础操作

156 JDBC简介

JDBC 属于一种服务,所有服务都必须按照指定的流程进行操作
Java Database Connectivity
开发包 java.sql
核心组成 DriverManager
接口 Connection、Statement、PreparedStatement、ResultSet

四种连接方式:
JDBC-ODBC 桥连接 JDK支持,性能较差
JDBC 一般只连接本地服务
JDBC网络连接 连接网络数据库
JDBC协议连接

157 连接MySQL数据库

需要配置驱动程序路径
通过反射机制加载数据库驱动程序类
整个JDBC设计实现的就是一个工厂类

pom.xml

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version>
</dependency>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
import java.sql.Connection;
import java.sql.DriverManager;

class Demo { // MySQL < 8.0 // static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; // static final String DB_URL = "jdbc:mysql://localhost:3306/data"; // MySQL >= 8.0 private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:3306/data?useSSL=false&serverTimezone=UTC"; private static final String USER = "root"; private static final String PASSWORD = "123456"; public static void main(String[] args) throws Exception { // 注册 JDBC 驱动 Class.forName(JDBC_DRIVER); // 打开链接 Connection conn = DriverManager.getConnection(DB_URL, USER, PASSWORD); // 关闭链接 conn.close(); }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

参考:
https://www.runoob.com/java/java-mysql-connect.html

第37 章 : Statement数据库操作接口

158 Statement接口简介

Statement 数据操作

门面设计模式

Connection - 创建 -> Statement - 操作 -> SQl数据库

  
 
  • 1

常用操作

// 数据更新 insert update delete 返回影响行数
int executeUpdate(String sql)

// 数据查询 select 返回查询结果
ResultSet executeQuery(String sql)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

159 Statement实现数据更新

新建学生表

create table student( id int not null PRIMARY key auto_increment, name varchar(20), age int
)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

class Demo { // MySQL >= 8.0 private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:3306/data?useSSL=false&serverTimezone=UTC"; private static final String USER = "root"; private static final String PASSWORD = "123456"; public static void main(String[] args) throws Exception { // 注册 JDBC 驱动 Class.forName(JDBC_DRIVER); // 打开链接 Connection conn = DriverManager.getConnection(DB_URL, USER, PASSWORD); // 执行SQL语句 Statement statement = conn.createStatement(); String sql = "insert into student(name, age) values('Tom', 23)"; int count = statement.executeUpdate(sql); System.out.println("insert count: " + count); // insert count: 1 // 关闭链接 conn.close(); }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

160 Statement实现数据查询

避免SELECT *查询,跟上具体要返回的字段名称
select查询结果过大也会对程序造成影响,注意加limit限制

// 查询数据
String sql = "select name, age from student";
ResultSet result = statement.executeQuery(sql);

while (result.next()){ String name = result.getString("name"); int age  = result.getInt("age"); System.out.println(String.format("%s %s", name, age)); // Tom 23
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第38 章 : PreparedStatement数据库操作

161 Statement问题分析

Statement问题:
1、不能很好描述日期形式
2、SQL拼凑,造成编写与维护困难
3、对敏感字符数据不能合理拼凑

162 PreparedStatement接口简介

数据和SQL语句分离, 问号? 作为占位符
常用操作

// 数据更新
int executeUpdate()

// 数据查询
ResultSet executeQuery()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

更新数据

String sql = "update student set age = ? where id = ? ";
PreparedStatement statement = conn.prepareStatement(sql);
statement.setInt(1, 16);
statement.setInt(2, 1);

int count = statement.executeUpdate();
System.out.println("update count: " + count);
// 1

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

163 使用PreparedStatement实现数据查询操作

-- 查询全部数据
select name, age from student

-- 根据id查询数据
select name, age from student where id = ?

-- 分页查询
select name, age from student limit ?

-- 统计查询
select count(*) from student

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/103841854

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。