Content
🎉1什么是API
🎉2.什么是JDBC
🎉3.数据库驱动包的安装
🎉4.数据库安装包在idea的使用
🎉5.JDBC的增删改查的简单实现
今天为大家带来JAVA的数据库编程,也就是用Java实现数据库
数据库的最基本的操作就是增删改查
在实工作中,手敲sql语句几乎用不到,更多的是用代码来实现sql语句
像常见的数据库,比如mysal,sqlsever,Oracle等数据库软件,在开发的时候会提供编程的接口,叫做API
什么是API呢,也就是实现某种功能,例如Java的接口,就是API,比如Collection接口,里面有很多方法,可以实现很多功能,总的来说API多用于函数的形式来表示
现在要用Java实现数据库,那么也需要提供一个API用来对接Java和数据库,那么就要用JDBC,Java对数据库提出要求,数据库本来的功能上要增加一些来匹配Java,这样才可以让Java操作数据库,执行数据库.
JDBC,全称,Java Database Connectivity,是java和数据库的连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。可以为多种关系数据库提供统一访问.
Java通过JDBC操作数据库,那jdbc和数据库建立连接的时候,需要使用数据库驱动包,就是对不同数据库的原生API进行封装,封装成JDBC认识的API,,Java需要在项目导入数据库驱动包,也才能执行数据库,那么我们就需要下载驱动包,这里我们选择去maven中央仓库下载
上链接
https://mvnrepository.com/
这个要和自己下载的数据库的版本要匹配,因为我下载的是5系列的,所以我要用这个,5开头的都可以选
点击这个
然后下载了,之后,建立一个项目,然后在项目点新建directory,拷贝这个地址,就建立了lib文件
就像这样,这样数据库就和java建立连接了,现在就可以开始在idea编辑数据库代码了
还是和数据库一样,实现增删改查,上代码
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.ConnectionEvent;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Created with IntelliJ IDEA.
* Description:
* User: WHY
* Date: 2023-03-03
* Time: 20:57
*/
//JDBC实现sql
public class JDBCInsert {
public static void main(String[] args) throws SQLException {
//JDBC需要以下步骤完成开发
//1.创建并初始化一个数据源
DataSource dataSource=new MysqlDataSource();//向上转型
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
((MysqlDataSource) dataSource).setUser("root");//设置用户名
((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码
//2.和数据库服务器建立连接
Connection connection=dataSource.getConnection();
//3.构造sql语句
String sql="insert into student values(1,'张三')";
PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
//4.执行sql语句
int ret= statement.executeUpdate();
System.out.println(ret);
//5.释放必要的资源
statement.close();
connection.close();
}
}
看看执行结果,在idea上结果是1的原因是,stament.executeUpdate这个方法返回类型就是int型的,代表修改的行数
执行完以后记得释放资源
现在对这段代码进行优化,发现在构造sql语句的时候比较麻烦,进行优化
String sql="insert into student values(1,'张三')";
这个语句把要输入的内容写死了,也就是硬编码,在现实开发环境中,要为用户考虑,所以要写用户输入
public class JDBCInsert {
public static void main(String[] args) throws SQLException {
Scanner scanner=new Scanner(System.in);
//JDBC需要以下步骤完成开发
//1.创建并初始化一个数据源
DataSource dataSource=new MysqlDataSource();//向上转型
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
((MysqlDataSource) dataSource).setUser("root");//设置用户名
((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码
//2.和数据库服务器建立连接
Connection connection=dataSource.getConnection();
//3.从控制台读取用户输入的的内容
System.out.println("请输入姓名");
String name=scanner.next();
System.out.println("请输入学号");
int id=scanner.nextInt();
//4.构造sql语句
String sql="insert into student values("+id+",'"+name+"')";
PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
//5.执行sql语句
int ret= statement.executeUpdate();
System.out.println(ret);
//6.释放必要的资源
statement.close();
connection.close();
}
但是这种写法容易产生sql注入问题
public static void main(String[] args) throws SQLException {
Scanner scanner=new Scanner(System.in);
//JDBC需要以下步骤完成开发
//1.创建并初始化一个数据源
DataSource dataSource=new MysqlDataSource();//向上转型
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
((MysqlDataSource) dataSource).setUser("root");//设置用户名
((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码
//2.和数据库服务器建立连接
Connection connection=dataSource.getConnection();
//3.从控制台读取用户输入的的内容
System.out.println("请输入姓名");
String name=scanner.next();
System.out.println("请输入学号");
int id=scanner.nextInt();
//4.构造sql语句
String sql="insert into student values(?,?)";
PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
statement.setInt(1,id);
statement.setString(2,name);
//5.执行sql语句
int ret= statement.executeUpdate();
System.out.println(ret);
//6.释放必要的资源
statement.close();
connection.close();
}
问号代表占位符,下面的setint里面的1,id代表第一个问号放id,第二个问号放name ,然后根据动态输入就自动放入到sql语句中
这一段就是Preparestatement方法拼接以后 的数据
释放资源:
数据库的客户端和服务器通过网络进行通信,需要占用一定的资源,但客户端很多,服务器很少时,要即及时释放资源
谁先创建,谁就后释放
DataSource内置了数据库连接池,可以复用连接,提高连接服务器的效率
现在写查询操作
public class TestDemo {
public static void main(String[] args) throws SQLException {
//JDBC需要以下步骤完成开发
//1.创建并初始化一个数据源
DataSource dataSource=new MysqlDataSource();//向上转型
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
((MysqlDataSource) dataSource).setUser("root");//设置用户名
((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码
//2.和数据库服务器建立连接
Connection connection=dataSource.getConnection();
//3.构造sql语句
String sql="select* from student";
PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
//4.执行sql语句
ResultSet resultSet= statement.executeQuery();
//5遍历结果集合
while(resultSet.next()){
int id=resultSet.getInt("id");
String name=resultSet.getString("name");
System.out.println("+id+"+id+"name"+name);
}
//6.释放必要的资源
resultSet.close();
statement.close();
connection.close();
}
resultset这个代表查询的结果集,用到的get方法相当于就是拿到某下标 的元素
删除操作
public static void main(String[] args) throws SQLException {
Scanner scanner=new Scanner(System.in);
//JDBC需要以下步骤完成开发
//1.创建并初始化一个数据源
DataSource dataSource=new MysqlDataSource();//向上转型
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
((MysqlDataSource) dataSource).setUser("root");//设置用户名
((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码
//2.和数据库服务器建立连接
Connection connection=dataSource.getConnection();
/*//3.从控制台读取用户输入的的内容
System.out.println("请输入姓名");
String name=scanner.next();
System.out.println("请输入学号");
int id=scanner.nextInt();*/
//4.构造sql语句
String sql="delete from student where id=1";
PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
/* statement.setInt(1,id);
statement.setString(2,name);*/
System.out.println(statement);
//5.执行sql语句
int ret= statement.executeUpdate();
System.out.println(ret);
//6.释放必要的资源
statement.close();
connection.close();
}
}
修改操作
public static void main1(String[] args) throws SQLException {
Scanner scanner=new Scanner(System.in);
//JDBC需要以下步骤完成开发
//1.创建并初始化一个数据源
DataSource dataSource=new MysqlDataSource();//向上转型
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&useSSL=false");//向下转型,因为seturl这个方法是子方法特有的
((MysqlDataSource) dataSource).setUser("root");//设置用户名
((MysqlDataSource) dataSource).setPassword("1111");//就是数据库的密码
//2.和数据库服务器建立连接
Connection connection=dataSource.getConnection();
/*//3.从控制台读取用户输入的的内容
System.out.println("请输入姓名");
String name=scanner.next();
System.out.println("请输入学号");*/
/*int id=scanner.nextInt();*/
//3.构造sql语句
String sql="update student set id=12 where name='张三'";
PreparedStatement statement=connection.prepareStatement(sql);//提前预编译一下sql,客户端对发出的请求进行预编译,减轻服务器的压力
System.out.println(statement);
//4.执行sql语句
int ret= statement.executeUpdate();
System.out.println(ret);
//5.释放必要的资源
statement.close();
connection.close();
}
这就是今天的所有内容了,我们下期再见!!!