Java的JDBC(与数据库的交互)
一、什么是JDBC
jdbc(java database connectivity)是一个独立于特定数据库管理系统、通用的sql数据库存取和操作的公共接口。jdbc为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。目标是让java程序员使用jdbc可以连接任何提供了jdbc驱动程序的数据库系统。
二、JDBC的体系结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEhzBYUh-1596855679048)(./img/JDBC体系结构.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cCmBlw8r-1596855679050)(./img/结构.png)]
三、具体的接口
1、Driver接口
每一个接口必须实现的接口,能从其中获取数据库的连接。数据库厂商去实现,我们不用去实现。
2、如何获取连接
(通过Driver)
第一步:加载数据库驱动
第二部:创建Driver实现类的对象 --> 调用Driver接口的connect(url,info) 获取数据库连接(需要的信息有:数据库地址(jdbc:mysql://ip:端口/数据库名称)、用户名、密码);
上诉步骤一般写在一个方法中,并把连接需要的信息放在配置文件中
代码:
try {
driver = (Driver) Class.forName(driverClass).newInstance();//通过反射获取的Driver实例
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//读取配置文件
Properties properties1 = new Properties();
properties1.put("user",user);
properties1.put("password",password);
//获取连接
Connection connect = null;
try {
connect = driver.connect(jdbcurl,properties1);//获取连接
} catch (SQLException e) {
e.printStackTrace();
}
(通过DriverManager:常用)
第一步:加载数据库驱动(可以加载多个不同数据库)
Class.forName(String str);//这里的str为数据库驱动所在类的全类名
第二步:获取数据数据连接
通过DriverManager的静态方法实现
Connection DriverManager.getConnection();//此方法有多个重载的方法,根据参数不同来区分,一般有如下几个参数:数据库的地址、用户名、密码
代码:
try {
Class.forName(driverClass);//加载驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//获取连接
Connection connection = null;
try {
connection = DriverManager.getConnection(jdbcurl+"characterEncoding=utf8&useSSL=true",user,password);
} catch (SQLException e) {
e.printStackTrace();
}
通过Properties来读取配置文件
第一步:创建Properties对象
Properites p = new Properites();
第二步:获取配置文件对应的输入流
InputStream in = this.getClass().getClassLoader().getResourceAsStream("文件名(包括路径)");
第三步:加载对应的输入流
p.load(in);
第四步:获取对应的key的value
p.getProperity("键名");//键名就是配置文件里面‘=’左边的
注意点:不同数据库的配置文件的不同点
/**
连接mysql时配置文件的内容如下:后面不需要写分号,并且等号两边不能够有空格
*/
- user=
- password=
- jdbcUrl=jdbc:mysql:// + ip地址 +/数据库名称
- driverClass=com.mysql.jdbc.Driver 或者 com.mysql.cj.jdbc.Driver
/**
连接orc时配置文件的内容如下:后面不需要写分号,并且等号两边不能够有空格
*/
-
user=
-
password=
-
jdbcUrl=jdbc:oracle:thin: @ip地址:orcl
注意:ip地址的后面需要加上应用程序的端口号,mysql默认3306,orcle默认1521
四、通过Statement执行更新、删除、插入操作
第一步:准备sql语句
第二步:获取Statement对象
调用Connection的
public Statement createStatement();
获取Statement的对象;
第三步:Statement 的executeUpdate(sql)执行sql语句
executeUpdate(String sql);
第四步:关闭Staement对象
close();
第五步:关闭连接(Connection)
close();
注意:
- 关于executeUpdata(String sql);可以是:insert、update 、delete,不能够是select
- Connection 、Statement 都是应用程序与数据库的服务器的连接资源,都必须要关闭(必须关闭)
- 关闭的顺序是,先关闭后获取的资源,即:先关Statement,再关闭Connection
五、数据库的数据类型与Java数据类型的对应转换表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Znv0SW0-1596855679051)(./img/dataConvert.png)]
六、通过Statement执行查询操作
1、ResultSet
结果集。封装了使用JDBC进行查询的结果。
通过Statement对象的
public ResultSet executeQuery(String sql)
可以得到ResultSet结果集。
2、什么是结果集
结果集就是一张数据表,初始时指向表的第一行的上面一行(但是没有指向第一行),调用next()返回true,指向下一行,相当于Iterator的hasNext()和next()。然后通过getXxx(int index)的方法获取一行的每列的列值,其中是基本数据类型,index为字段在数据表中从左到右,从1到结尾的索引位置。ResultSet维护了一个指向当前行的游标,一开始指向第一行的前一行
3、具体步骤
第一步:通过Statement获取ResultSet对象。
第二步:通过ResultSet对象调用next()方法指向第一行,然后通过getXxx(index)获取第一行index列的Xxx类型的值。
第三步:关闭ResultSet资源
代码:
Connection connection = jdbcTest.getConnection();//获取数据库连接
System.out.println(connection);
Statement statement = connection.createStatement();//获取Statement
ResultSet resultSet = statement.executeQuery("SELECT stu,name,sex FROM studentinfo");//sql查询语句
boolean next = resultSet.next();//指向下一行
if (next) {
System.out.println(resultSet.getString(1) + "\t" + resultSet.getString(2));//获取具体列的信息
}
try {
//关闭资源
resultSet.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace()