1.初始API
客户端不是自己可以凭空实现的,而是数据库会为我们来提供一组API来供我们使用;
但是数据库的种类有很多,不同数据库提供的API都不太一样;MYSQL中的API和SQL server中的API是不太一样的,并且差异都很大;
什么是API? API就是application programming interface
提供了一组函数/类/方法,让用户直接去使用,这是一个非常广义的概念;
每当我们操作一个数据库时,都要使用不同的API,这是很让人头大的;所以在java中,为了解决这个问题,引入了JDBC,可以理解成是java自带的一组数据操作的API,这组API可以说是覆盖了所有的各种的数据库操作方式,把不同的API给统一到一起了;
java自己本身完成JDBC
API和具体数据库API的转换;不同数据库的API会通过一个中间转换器转化成JDBC风格的API,这个中间转换器就相当于是一个数据驱动程序;像相当于是以前支持很多格式充电头;我们可以通过转接头来转换我们手机的插头接口,那么数据库驱动程序就是转接头;
2,使用java代码操作数据库
1)创建Datasource对象,这是一个准备工作; 2)基于Datasource对象,针对DataSource进行一些配置,以便后续可以更方便地访问服务器
这里要用到向下转型,配置需要三方面信息URL,user,Password
3)创建Connection,和数据库建立连接(相当于打开了客户端,输入了密码,连接成功了
4)利用PrepareStatement来拼装具体的SQL语句,这就相当于是在客户端具体输入了SQL的过程;
5)拼装好SQL之后,要执行SQL中的语句,相当于是在SQL客户端敲了一下回车 6)查看服务器的结果,屏幕上会显示 7)关闭连接,释放资源
下面是代码:根据不同的场景,拼装不同的SQL对象
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import
javax.sql.DataSource; import java.sql.Connection; import
java.sql.PreparedStatement; import java.sql.SQLException; public class MYSQL {
public static void main(String[] args)throws SQLException { 1)进行一些准备工作
DataSource dataSource=new
MysqlDataSource();((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf-8&useSSL=true");
下一步 设置用户名 ((MysqlDataSource)dataSource).setUser("root"); 设置密码哦
((MysqlDataSource)dataSource).setPassword("12503487");
————————————————————————————————————————————————————————————————————————————————————————
2 和数据库建立连接,连接建立好了之后就可以进行接下来的数据
一定要保证Connection是来自java.sql.Connection,当连接建立出错时,就会抛出这个异常
建立连接的意义是为了确保当前网络连接是否正常,如果不正常,就会抛出上面的异常
Connection的生命周期是比较短的,每次请求可以创建出一个新的Connection Connection
connection=dataSource.getConnection();
_______________________________________________________________________________
3拼装一个SQL语句,这里要用到一个preparestatement //当前实例中,当前的数据是写死的,我们可以让程序动态分配下去; String
SQL="insert into student values(1,"曹操",10); PreparedStatement
preparedStatement=connection.prepareStatement(SQL);
___________________________________________________________________________
第三步还可以这么写,下面这三个参数都可以通过Scanner这个类来动态获取到 int id=1; String name="曹操"; int
classID=10; String SQL="insert into students values(?,?,?)";
这里面的问号是一个占位符,可以把具体的变量的值替换到?里面去; PrepareStatement
statement=connection.PrepareStatement(SQL); statement.setInt(1,id);
statement.setString(2,name); statement.setInt(3,classid);
——————————————————————————————————————————————————————————————————————————————————
4拼装完之后,可执行语句了 int ret=preparedStatement.executeUpdate(); //insert dele
update都时使用ececuteUpdate来执行的 //但是select就用executeQuery来执行, 返回值表示此次操作执行了多行
System.out.println(ret); //5 关闭资源,谁后创建,谁先释放 preparedStatement.close();
connection.close(); } }
我们需要注意:
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf-8&useSSL=true");
第一个部分是向下转型,第二个部分是setURL,表示需要访问那个数据库的服务器
jdbc:mysql这是固定的协议名
IP地址表示要访问哪一台主机,端口号是为了要区分一台主机上的多台服务器
端口号后面是要访问的数据库名字 createdatabase[数据库名]
?后面表示字符集要和数据库配置的服务器的字符集要一致,否则会出现字符集乱码
最后表示是否加密
当前我们JDBC编程中主要用到的类和对象
1)DataSource它的作用是用于配置如何连接MYSQL,他的一个类对象调用一个getConnection方法返回一个Connection对象;
2)Connection表示建立好的一次连接,操作数据库是需要先建立连接看一看发送请求的能力和接收数据的能力是否有缺陷,他的类对象调用一个prepareStatement方法来返回一个PrepareStatement对象;
3)PrepareStatement他有关联到一个SQL语句,然后她再调用executeUpdate或者executeQuery来执行具体的SQL语句;
4)ResultSet它用来表示Select查找结果的结果集,MYSQL返回的结果全在这个类中;
----------------------------------------------------------------------------------------------------------------------------------
示例一:下面我们用一个JDBC编程实现MYSQL数据库的查找工作;与上面结果不同的是MYSQL会根据发送的查询请求来返回一个表;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import
javax.sql.DataSource; import java.sql.Connection; import
java.sql.PreparedStatement; import java.sql.ResultSet; import
java.sql.SQLException; public class HelloServlet{ public static void
main(String[] args)throws SQLException { //1创建DataSource对象 DataSource
dataSource=new MysqlDataSource(); ((MysqlDataSource)
dataSource).setURL("jdbc:mysql://127.0.0.1:3306/javaweb?characterEncoding=utf-8&userSSL=true");
((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource)
dataSource).setPassword("12503487"); //2借助Connection对象,与数据库进行连接 Connection
connection=dataSource.getConnection(); //3拼装SQL语句; String sql="select * from
student"; PreparedStatement preparedStatement=
connection.prepareStatement(sql); //4执行请求 ResultSet
resultSet=preparedStatement.executeQuery();
//5遍历结果集,结果集相当于是一张表,这个表里面有很多行,每一行是一条记录next()一方面是判断当前是否存在下一行,另一方面是如果有下一行就获取到这一行
while(resultSet.next()) {//在这里一定要保证方法中的列名和表中的列名一定是一致的 int
id=resultSet.getInt("id"); String name=resultSet.getString("name"); int
classid=resultSet.getInt("classid");
System.out.println("id"+id+"name"+name+"classid"+classid); } //6关闭释放资源;
resultSet.close(); preparedStatement.close(); connection.close(); } }
示例二:进行特定名字的删除操作
com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import javax.sql.DataSource;
import java.sql.Connection; import java.sql.PreparedStatement; import
java.sql.SQLException; import java.util.Scanner; public class HelloServlet{
public static void main(String[] args)throws SQLException {
System.out.println("请输入你要求删除的学生姓名"); Scanner scanner=new Scanner(System.in);
String name=scanner.next(); //1创建DataSource对象 DataSource dataSource=new
MysqlDataSource(); ((MysqlDataSource)
dataSource).setURL("jdbc:mysql://127.0.0.1:3306/javaweb?characterEncoding=utf-8&userSSL=true");
((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource)
dataSource).setPassword("12503487"); //2与数据库建立连接 Connection
connection=dataSource.getConnection(); //3拼装SQL语句 String SQL="delete from
student where name = ?"; PreparedStatement
preparedStatement=connection.prepareStatement(SQL);
preparedStatement.setString(1,name); //4执行SQL int
ret=preparedStatement.executeUpdate(); if(ret==1) { System.out.println("删除成功");
}else{ System.out.println("删除失败"); } //5关闭并释放资源 preparedStatement.close();
connection.close(); } }
示例三:进行修改操作,我们要修改id为n的学生姓名
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import
javax.sql.DataSource; import java.sql.Connection; import
java.sql.PreparedStatement; import java.sql.SQLException; import
java.util.Scanner; public class HelloServlet { public static void main(String[]
args)throws SQLException { System.out.println("请输入你要修改的学生的id"); Scanner
scanner=new Scanner(System.in); int id=scanner.nextInt(); String
name=scanner.nextLine(); DataSource dataSource=new MysqlDataSource();
((MysqlDataSource)
dataSource).setURL("jdbc:mysql://127.0.0.1:3306/javaweb?characterEncoding=utf-8&userSSL=true");
((MysqlDataSource) dataSource).setUser("root"); ((MysqlDataSource)
dataSource).setPassword("12503487"); Connection
connection=dataSource.getConnection(); String SQL="update student set name = ?
where id = ?"; PreparedStatement
preparedStatement=connection.prepareStatement(SQL);
preparedStatement.setString(1,name); preparedStatement.setInt(2,id); int
ret=preparedStatement.executeUpdate(); if(ret==1) { System.out.println("修改成功");
}else{ System.out.println("修改失败"); } preparedStatement.close();
connection.close(); } }