目录
JDBC的概念
JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的java API,他是java中数据库连接规范。这个API由java.sql.*,javax.sql.*包中的一些类和接口组成,它为java开发人员作为数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
API(Application Programming Interface)提供一些函数/方法/类,可以让程序员直接调用一些功能。被定义为应用程序可用以与计算机操作系统交换信息和命令的标准集。
JDBC本质上就是JAVA对于各种数据库差异性的封装,目的就是为了简化使用成本。
JDBC的使用
一:准备数据库驱动包,并添加到项目的依赖中
驱动包主要去第三方软件库里面找,这里给大家一个第三方库https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.31
下载完以后,打开IEDA,然后随便建一个包,然后把.jar包复制进包中,选中Add as Library,最后点击OK
在src目录中创建类
二:建立数据库连接
这里数据库的连接采取的是有连接的方式,优点:能够在通行之前,先看看通讯的连路是否通畅;缺点:不用连接的时候要释放。
1:使用DataSource描述Mysql服务器的位置
public class JDBC {
public static void main(String[] args) {
//第一种写法
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("wanglei@1997");
//第二种写法
MysqlDataSource dataSource1 = new MysqlDataSource();
dataSource1.setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
dataSource1.setUser("root");
dataSource1.setPassword("wanglei@1997");
}
}
上面两种写法的区别:
第一种写法,数据源是DataSource,DataSource是通用的类型,可以代指任何数据库。未来一旦需要更换数据库,代码的改动非常小,只需要把实例化这一小块代码改了即可,其他代码不用变。推荐使用这一种方式。
第二种写法,数据源是MysqlDataSource,后续其他代码、方法/类,如果用到数据源,持有的类型也就是MysqlDataSource。MysqlDataSource只针对Mysql的类型的数据库,未来一旦更换数据库,可能就需要把散落在代码各个地方的MysalDataSource类型进行修改。
关于
"jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false"
的解读:
2:创建数据库连接
public class JDBC {
public static void main(String[] args) throws SQLException {
//1.使用DataSource描述MySQL服务器的位置
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/student?characterEncoding=utf8&&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("wanglei@1997");
//2.和数据库建立连接
//第一种连接方式
Connection connection = dataSource.getConnection();
}
}
还有另外一种建立数据库连接的方式:
public class JDBC {
public static void main(String[] args) throws SQLException {
//1.使用DataSource描述MySQL服务器的位置;2.和数据库建立连接
//第二种连接方式
Connection connection1 = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?user=root&password" +
"=wanglei@1997&useUnicode=true&characterEncoding=UTF-8");
}
}
上面两种连接方式的区别:
DriveManger每次getConnection都会重新和数据库服务器建立连接,DataSource则可能会复用之前的连接(DataSource内置了数据库连接池)
三:构造sql语句
在构造sql语句之前,先来看一下student里面都有那些表,然后选择那个表来执行操作
//3.构造sql语句
//用户自己输入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号:");
int id = scanner.nextInt();
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入语文成绩:");
int chinese = scanner.nextInt();
System.out.println("请输入数学成绩:");
int math = scanner.nextInt();
System.out.println("请输入英语成绩:");
int english = scanner.nextInt();
String sql = "insert into exam_result (id,name,chinese,math,english) values (?,?,?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
statement.setInt(3,chinese);
statement.setInt(4,math);
statement.setInt(5,english);
System.out.println(statement);
PreparedStatement表示一个对象要执行的sql语句,这个对象的sql也是来自于一个字符串;
connection.prepareStatement(sql)这个操作就是告诉 PreparedStatement对象:要执行的sql是...;
sql要交给...数据库服务器来执行。
四:执行sql语句
执行前看一下表:
//4.执行sql语句
int n = statement.executeUpdate();
System.out.println(n);
执行SQL语句,insert、updata、delete都是通过executeUpdata来执行的,select则是通过executeQuery来执行的。executeUpdata的返回值是一个整数表示这个操作影响到第几行,executeQuery返回的是一个ResultSet对象,可以把这个对象视为一个"临时表"。
五:关闭资源
statement.close();
connection.close();
释放资源时,先创建的后释放
总结JDBC使用步骤
准备数据库驱动包,并添加到项目的依赖中、创建数据库连接、构建sql语句、执行sql语句、关闭资源
JDBC中的关键概念
1.DataSource描述了数据源(数据在哪里,服务器在哪里)
2.Connection表示一个连接,需要先建立连接才能进行通信,一个数据库服务器可以同时处理多个SQL语句
3.PreparedStatement描述了一个SQL语句
JDBA的优势
- java语言访问数据库操作完全面向抽象接口编程
- 开发数据库应用不用限定在特定数据库厂商的API
- 程序的可移植性大大增强