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中央仓库下载
上链接
这个要和自己下载的数据库的版本要匹配,因为我下载的是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(); }
这就是今天的所有内容了,我们下期再见!!!