JDBC使用方式

一、JDBC是什么

使用java语言操作关系型数据库的一套API

二、如何来使用JDBC

1.注册驱动

Class.forName("com.mysql.jdbc.Driver");

2.获取连接

String url ="jdbc:mysql://127.0.0.1:3306/db1";//你的数据库
String username = "root";//数据库账户
String password = "123456"//数据库密码
Connection connection = DriverManager.getConnection(url,username,password);

3.定义sql

String sql = "UPDATE mytable set password =123456 WHERE id = 1";

4.获取执行对象

Statement stmt = connection.createStatement();

5.执行sql

int count = stmt.executeUpdate(sql);

6.处理结果

System.out.println(count);
//这里的结果是上一步executeUpdate的返回值,即执行成功的数目

7.释放资源

stmt.close();
connection.close();

三、JDBC的API有哪些?

1.DriverManager

DriverManager被用来注册驱动以及获取数据库连接。

2.Connection

(1)Connection被用来获取执行sql的对象,可以分为普通执行sql对象和预编译执行的sql对象。
①普通执行的sql对象
就如上文所说,这里直接获取sql对象就可以了,没有什么好补充的。

Statement stmt = connection.createStatement();

②什么是预编译的sql对象?
预编译SQL的执行SQL对象产生的目的是防止SQL注入。那么什么是SQL注入呢?这里举个例子:
首先定义如下的SQL语句:

select * from mytable where username = ' "+username+" ' and password = ' "+pwd+" '

那么在正常情况下只有用户名与密码都正确的情况下才能获取到用户信息,但是真的是这样吗?我们这里提供一个账户密码输入范例:

 username:root
 password:' or '1' = '1

我们会神奇的发现同样可以登录成功,这是为什么呢?我们把这个username和password带入进去组装成完整的SQL语句:

select * from mytable where username = ' root ' and password = ' ' or '1' = '1 '

原因显而易见了,前面对username和password的判断都被否定了,但是最后有一个 or ‘1’ = ‘1’,而我们知道这是恒成立的,这样就可以登录成功了,这是很危险的,所以我们要用预编译的SQL对象,实际使用方法也很简单,我们将在下文详细介绍。

③执行存储过程的对象,这里我们不多做介绍

CallableStatement prepareCall(sql)

(2)管理事务
事务是一个整体,在事务过程中如果出现错误,整个事务的状态会回滚到开启事务之前,繁殖则全部执行完成。
①开启事务

setAutoCommit(boolean autoCommit)//true为自动提交事务;false为手动提交事务,即为开启事务

②提交事务

commit()

③回滚事务

rollback()

3.Statement

(1)executeUpdate(sql)

返回执行完DML语句,受影响的行数

(2)executeQuery (sql)

用来查询sql数据,但是执行DDL语句不一定有返回结果

4.ResultSet(结果集对象)

(1)结果集对象封装了DQL查询语句的结果

 ResultSet rs = stmt.executeQuery(sql1);//执行DQL语句,返回ResultSet对象

(2)获取查询结果

boolean next()

①将光标从当前位置向下移动一行
②判断当前行为是否有效

true//有效行
false//无效行

参数获取:
getxxx(参数)

参数
int:列的编号
String:列的名称

举个例子:

 while (rs.next()){
            String username = rs.getString(2);
            int password = rs.getInt(3);
            System.out.println(username);
            System.out.println(password);
        }//获取rs中存的数据的username以及password属性,分别在第二列和第三列

(3)查询account账户表数据,封装到Account对象中,并存储到ArrayList集合中

①定义实体类Account放在pojo文件夹中

②查询数据,封装到Account对象中

Account account = new Account();

③将Account对象存入ArrayList集合中

List<Account> list = new ArrayList<>();

5.PreparedStatement

PreparedStatement用来预编译SQL语句并执行,预防SQL注入问题

(1)操作如下:

①定义sql

String sql = "select * from mytable where name = ? and pwd = ?";

②获取对象

PreparedStatement preparedStatement = connection.prepareStatement(sql);

③设置参数

preparedStatement.setString(1,username);//设置第一个?的参数username
preparedStatement.setInt(2,pwd);//设置第二个?的参数password

④执行sql

preparedStatement.executeQuery();

(2)原理
① 获取对象时,将sql语句发给sql服务器进行检查,编译
②执行是不需要进行这些步骤
③如果sql模板一样,只需要进行一次检查、编译

(3)预编译开启
预编译功能需要手动开启,开启方式如下:
①首先在url中打开预编译

String url ="jdbc:mysql://127.0.0.1:3306/db1?useServerPrepStmts=true";

②配置mysql执行日志
在mysql文件目录下的my.ini文件中添加以下配置:

log-output=FILE
general-log=1
general_log_file="D:\mysql.log"
slow-query-log=1
slow_query_log_file="D:\mysql_slow.log"
long_query_time=2

四、数据库连接池

1.概念

  • 是个容器,负责分配、管理数据库连接
  • 允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

2.好处

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接遗漏

3.标准接口

  • DataSource

4.Druid连接池

Druid是阿里巴巴功能强大,性能优秀的连接池,使用方法如下。

(1)导入jar包
(2)定义配置文件

在项目中创建druid.properties

druid.properties文件的配置

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db1?useServerPrepStmts=true
username=root
password=123456
初始化连接数量
initialSize=5
最大连接数
maxActive=10
最大超时时间
maxWait=3000

(3)加载配置文件

Properties properties = new Properties();
properties.load(new FileInputStream("jdbc/src/druid.properties"));

其中如果不清楚文件的相对路径,可以使用以下代码查看当前文件所在位置:

System.out.println(System.getProperty("user.dir"));

(4)获取连接池对象

DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

(5)获取数据库连接

Connection connection = dataSource.getConnection();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sharding-JDBC 是一款基于 Java 的开源分布式数据库中间件,提供了分库分表、读写分离、柔性事务等功能。下面是 Sharding-JDBC使用步骤: 1. 引入依赖 在项目的 pom.xml 文件中,引入 Sharding-JDBC 的相关依赖: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>${sharding-jdbc.version}</version> </dependency> ``` 其中,`${sharding-jdbc.version}` 是 Sharding-JDBC 的版本号。 2. 配置数据源 在项目中配置数据源,并将数据源的信息添加到 Sharding-JDBC 的配置中。Sharding-JDBC 支持多种数据源,包括 JDBC、Spring、MyBatis 等。以 JDBC 数据源为例,配置文件如下: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true username: root password: root sharding: jdbc: datasource: ds0: url: jdbc:mysql://localhost:3306/ds0?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true username: root password: root ds1: url: jdbc:mysql://localhost:3306/ds1?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true username: root password: root config: sharding: tables: user: actualDataNodes: ds$->{0..1}.user$->{0..2} tableStrategy: standard: shardingColumn: id shardingAlgorithmName: userShardingAlgorithm keyGenerateStrategy: column: id keyGeneratorName: snowflake shardingAlgorithms: userShardingAlgorithm: type: INLINE props: algorithm-expression: user$->{id % 2} keyGenerators: snowflake: type: SNOWFLAKE props: worker-id: 123 ``` 其中,`spring.datasource` 是项目中的数据源配置,`sharding.jdbc.datasource` 是 Sharding-JDBC 的数据源配置。在 `sharding.jdbc.datasource` 中,`ds0` 和 `ds1` 分别代表两个数据源,`actualDataNodes` 表示表的真实数据节点,`tableStrategy` 表示分表策略,`keyGenerateStrategy` 表示主键生成策略,`shardingAlgorithms` 表示分片算法,`keyGenerators` 表示主键生成器。 3. 配置 Sharding-JDBC 在项目中配置 Sharding-JDBC,并将数据源的信息添加到 Sharding-JDBC 的配置中。配置文件如下: ```yaml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true username: root password: root sharding: jdbc: datasource: ds0: url: jdbc:mysql://localhost:3306/ds0?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true username: root password: root ds1: url: jdbc:mysql://localhost:3306/ds1?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true username: root password: root config: sharding: tables: user: actualDataNodes: ds$->{0..1}.user$->{0..2} tableStrategy: standard: shardingColumn: id shardingAlgorithmName: userShardingAlgorithm keyGenerateStrategy: column: id keyGeneratorName: snowflake shardingAlgorithms: userShardingAlgorithm: type: INLINE props: algorithm-expression: user$->{id % 2} keyGenerators: snowflake: type: SNOWFLAKE props: worker-id: 123 ``` 其中,`spring.datasource` 是项目中的数据源配置,`sharding.jdbc.datasource` 是 Sharding-JDBC 的数据源配置。在 `sharding.jdbc.config` 中,`sharding` 表示 Sharding-JDBC 的配置,`tables` 表示分片表的配置,`shardingAlgorithms` 表示分片算法的配置,`keyGenerators` 表示主键生成器的配置。 4. 使用 Sharding-JDBC 在项目中使用 Sharding-JDBC,只需要按照普通的 JDBC 使用方式即可。Sharding-JDBC 会自动根据配置将 SQL 语句分片执行,并将结果合并返回。例如: ```java public class UserService { @Autowired private JdbcTemplate jdbcTemplate; public List<User> listUsers() { String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); } } ``` 在上面的代码中,`JdbcTemplate` 是 Spring Framework 提供的 JDBC 工具类,可以方便地执行 SQL 语句。Sharding-JDBC 会自动将 SQL 语句分片执行,并将结果合并返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值