概述
mysql是服务器客户端结构的程序,我们一般通过三种方式对数据库的数据进行交互

Q:我们使用什么代码才能对数据库进行交互?
MySQL提供了一组API(Application Program Interface应用程序编程接口),就是mysql提供的一组类/函数,供程序员进行调用
Q:市面上有许多数据库导致API不同如何解决?
MySQL的原生API是C语言风格的,但希望用Java进行开发,同时市面上有mysql、sqlsever、oracle都有不同的API,导致学习成本比较高,此时Java就提供了一个东西,就是JDBC,Java提供了一组类/方法,通过类和方法对C语言风格的API进行封装
驱动程序
如果想使用JDBC操纵数据库,就需要下载安装配套的驱动程序,以便于使用驱动程序

驱动程序有许多,Java没有内置,需要额外下载安装,所以找第三方的库有三种途径:
1.Maven仓库,eg:从应用商城下载APP
2.github
3.官网
进行JDBC编程
将jar包导入到项目当中去
1.在项目当中,创建lib目录,复制jar包进去
2.右键目录,让项目识别到
创建数据源对象
数据源:"数据从哪里来?" 或者 "数据库服务器从哪里来?"
注:之所以不使用"数据库服务器"术语,来创建对象,是因为不是所有的数据库都是客户端---服务器结构
java
//1.创建数据源对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("060419");
和数据库服务器进行通信,需要建立网络连接
java
//2.和数据库服务器进行通信,需要建立网络连接
Connection connection = dataSource.getConnection();
构造SQL语句
java
//3.构造SQL语句
String sql = "insert into student values(null,'张三')";
这是一个字符串格式的语句,但是实际上需要一个"语句对象"
java
//"Statement statement =" :只是保存了字符串
PreparedStatement preparedStatement = connection.prepareStatement(sql);
而PrepareStatement给数据库服务器收到的是与处理过的语句,这样就节约一定的数据库资源
执行SQL语句
java
/4.执行SQL(把SQL通过网络发送给数据库服务器)
int n = preparedStatement.executeUpdate();
System.out.println("n ="+ n);
关闭连接等资源
Why:在日常开发中,我们会经常遇到申请"资源"的情况,但在Java中,内存资源不需要手动释放,Java内置了"垃圾回收机制",自动回收内存资源,自动释放内存.但存在例外需要手动释放资源,因为创建Connection,PreparedStatement不仅仅申请内存资源,也可能包含其他资源(和网络通信相关的资源).
java
//5.关闭连接等资源
preparedStatement.close();
connection.close();
同时,释放的顺序先创建后释放
附加
构造语句升级
Q:在上述构造SQL语句时,我们是在插入固定的数据,但如果需要插入许多不同的数据呢,又怎么能让用户指定插入许多数据呢?
java
String sql = "insert into student values("+ id +",'" + name +"')";
但这样如果插入的性质多的话,可读性不高,而且也不够美观,此时就需要占位符," ? "只是占用一个位置,之后用户输入的数据会代替
java
String sql = "insert into student values( ?, ? )";
但只有这样一个语句,并没有将id和name构造到SQL语句当中
java
preparedStatement.setInt(1,id);
preparedStatement.setString(2,name);
此时就构造成功了
查找语句进行的JDBC编程
进行查找语句与其他语句不一样,所以单独演示
ResultSet resultSet 表示一个集合(一组不重复的数据),就相当于查询到的一个"临时表",而我们此时就需要对这个临时表进行遍历
java
public class JDBCdemo2 {
public static void main(String[] args) throws SQLException {
//1.创建数据数据源对象
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java117?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("060419");
//2.与数据库服务器通信,需要建立网络连接
Connection connection =dataSource.getConnection();
//3.构造器SQL语句
String sql = "select * from student";
PreparedStatement preparedStatement =connection.prepareStatement(sql);
//4.执行SQL语句,返回结果是一个语句,称为ResultSet
ResultSet resultSet =preparedStatement.executeQuery();
while(resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println(id+" "+name);
}
//5.关闭连接等资源
resultSet.close();
preparedStatement.close();
connection.close();
}
}