JDBC 数据库的访问

JDBC: Java database connectivity

Jdbc 就是JAVA代码和数据库的连接桥梁,可以为多重关系学数据库提供同意的访问方式,

Jdbc 对各种数据库驱动(jar包)进行隐藏,操作各种数据库的行为一致化

jdbc 种主要的使用类:

  1. DriverManager: 管理jdbc驱动
  2. Connection: 管理连接
  3. Statement(PreparedStatement):增删改查
  4. CallbelStatement: 调用数据库中的存储过程/存储函数
  5. ResultSet: 查询结果集

访问数据库具体步骤:

  1. 导入具体的驱动类。
  2. 建立连接
  3. 发送sql,执行
  4. 处理结果,查询

不同数据库中的驱动是不一样的,常见的数据库有:(-x: 版本号)

数据库: 驱动: 主要驱动类: 连接字符串

Oracle:  ojdbc-x.jar                    oracle.jdbc.OracleDriver

Mysql:   mysql-connector-java-x.jar  com.mysql.jdbc.Driver       jdbc:mysql://localhost:3306/数据库

Sqler :  sqljdbc-x.jar                  com.microsoft.sqlserver.jdbc

实现数据库的增删改:mysql数据库为例

连接数据库:

private final static String URL = "jdbc:mysql://localhost:3306/springbootdb";
private final static String USER = "root";
private final static String password = "password";

1、加载具体的驱动类
Class.forName("com.mysql.jdbc.Driver");
如果要切换数据库,那么导入其他数据库的驱动,并切换驱动,而其它的操作都是OK的,

2、于数据库建立连接
connection = DriverManager.getConnection(URL, USER, password);
3、发送sql 并执行(增删改, 查)
statement = connection.createStatement();
String sql ="insert into `user` values(3,'wangwu', 26);";
// String sql = "update user set name ='lisi' where age=26";
// String sql = "delete from user where age=26";

4 返回值表示修改几条数据, 在增删改都是使用 executeUpdate 执行sql
int count = statement.executeUpdate(sql);
执行结束之后需要将以上的语句都closed,close 的规则是,先打开后关闭,后打开先关闭。打开顺序和关闭顺序是相反的
if (statement != null) statement.close();
if (connection != null) connection.close();

查询:前四步骤都是一样的,只有在执行的时候使用executeQuery, 并且返回的也不是int

String names = "ang";
String sql = "select * from user where name like '%"+names+"%'";

// 查询不再是 executeUpdate
ResultSet resultSet = statement.executeQuery(sql);

resultSet 对应数据库中的一张表数据,通过循环将按照sql语句将数据一行一行的拿出来rs 初始化的时候是指向第0行,通过next方法移到下一行,并在下移动的时候判断是否为空有数据返回true,否则false然后通过 rs.getString(), rs.getInt(), rs.getDate() 等获取字段值。
resultSet 还有 previous() 方法 true/false
        while (resultSet.next()){
            int age = resultSet.getInt("age");
            String name = resultSet.getString("name");
            System.out.println(age + " " + name);

//          或者根据index (是从 1 开始)
            int age = resultSet.getInt(3);
            String name = resultSet.getString(2);
            System.out.println(age + " " + name);
驱动产生连接 -> 连接产生语句 -> 执行语句产生结果
Statement (PreparedStatement) 增删改查  connection 产生 PreparedStatement 是 Statement 子接口
PreparedStatement 比 Statement 强大,主要强大地方是 SetXXX 方法,实现赋值

String names = "ang";
String sql = "select * from user where name like ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);// 预编译
preparedStatement.setString(1, "%ang%");
// 查询不再是 executeUpdate
resultSet = preparedStatement.executeQuery();
推荐使用PreparedStatement:
编码会更加简单,避免字符串的拼接。比较上面的例子,
提高性能,有编译操作。
安全


CallableStatement: 调用数据库中的存储过程/存储函数  connection 产生
connection.prepareCall(存储过程/存储函数)

参数格式:

存储过程(无返回值 return,使用out 参数代替): {call 存储过程名(参数列表)}

存储函数(有返回值 return ):{ ?= call 存储函数(参数列表)}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值