JDBC1 MySQL驱动,连接数据库
JDBC一、JDBC
Java Database Connectivity:Java访问数据库的办理方案
JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。
JDBC渴望用相同的方式访问不同的数据库,让具体的数据库操作与数据库厂商实现无关,从而在不同数据库之间轻易的举行切换
1.JDBC相关类和接口
Driver 接口:加载驱动程序。
DriverManager 类:装人所需的 JDBC 驱动程序,编程时调用它的方法来创建连接。
Connection 接口:编程时利用该类对象创建 Statement 对象。
Statement 接口:编程时利用该类对象得到 ResultSet 对象。
ResultSet 类:负责生存 Statement 执行后所产生的查询结果。
1.1DriverManager
DriverManager:驱动管理对象
注册驱动(告诉程序该利用哪一个数据库驱动)
在com.mysql.jdbc.Driver类中存在静态代码块(通过检察源码发现)
//这是com.mysql.jdbc.Driver的静态代码块,只要使用这个类,就会执行这段代码
//而Class.forName("com.mysql.jdbc.Driver")就正好使用到了这个类
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
留意:我们不必要通过DriverManager调用静态方法registerDriver(),因为只要Driver类被利用,则会执行其静态代码块完成注册驱动
所以后边我们实在可以省略注册驱动的步调(可以注释掉上个案例的注册驱动的步调,也可以查询到数据)
mysql5之后可以省略注册驱动的步调。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.jdbc.Driver
获取数据库连接(获取到数据库的连接并返回连接对象)
static Connection getConnection(String url, String user, String password);
返回值:Connection数据库连接对象
参数
url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
user:用户名
password:密码
1.2Connection
Connection:数据库连接对象
获取执行者对象
获取普通执行者对象:Statement createStatement();
获取预编译执行者对象:PreparedStatement prepareStatement(String sql);
管理事件
开启事件:setAutoCommit(boolean autoCommit); 参数为false,则开启事件。
提交事件:commit();
回滚事件:rollback();
释放资源
立刻将数据库连接对象释放:void close();
1.3Statement
Statement:执行sql语句的对象
执行DML语句:int executeUpdate(String sql);
返回值int:返回影响的行数。
参数sql:可以执行insert、update、delete语句。
执行DQL语句:ResultSet executeQuery(String sql);
返回值ResultSet:封装查询的结果。
参数sql:可以执行select语句。
释放资源
立刻将执行者对象释放:void close();
https://i-blog.csdnimg.cn/direct/70498d84935a430881a999bc5d6cf40e.png
1.4ResultSet
ResultSet:结果集对象
判断结果集中是否还有数据:boolean next();
有数据返回true,并将索引向下移动一行
没有数据返回false
获取结果集中的数据:XXX getXxx(“列名”);
XXX代表数据类型(要获取某列数据,这一列的数据类型)
比方:String getString(“name”); int getInt(“age”);
释放资源
立刻将结果集对象释放:void close();
2.JDBC工作原理
https://i-blog.csdnimg.cn/direct/5506e5f469e04d0fbdc3e08f29f3fe62.png
二、连接mysql数据库
1.导入jar包
创建lib目录,然后导入mysql-connector-java-8.0.22.jar,右键Bulid Path
https://i-blog.csdnimg.cn/direct/55c552b6fbc44314aeb47ec2d8586479.png
https://i-blog.csdnimg.cn/direct/4b4c3b43c83e46d68aafcfb90aa19f25.png
https://i-blog.csdnimg.cn/direct/4f4944403d00496796a6c18981a5ee96.png
2. 利用DriverManager加载驱动类
加载驱动类
通过Class.forName( )方法(反射) 完成驱动类的注册
找到驱动类 右键复制全路径
https://i-blog.csdnimg.cn/direct/1400ab7aadfb40be9ca79ab9150c666a.png
3.Connection接口
根据URL连接参数找到与之匹配的Driver对象, 调用其方法获取连接
注:Connection只是接口!真正的实现是数据库厂商提供的驱动包完成的。
jdbc:mysql://localhost:3306/myhomework03?serverTimezone=GMT
https://i-blog.csdnimg.cn/direct/66fd032b37c4469fa6eaad6ba905ca14.png
https://i-blog.csdnimg.cn/direct/846d6ae54d4c405d9aa1fc1a0ed28e4e.png
4.Statement接口
Statement用于执行SQL语句
不同的SQL语句,要调用不同的方法来执行。
Statementstmt = conn.createstatement();
int count= stmt.executeUpdate(sql);
ResultSet rs=stmt.executeQuery(sql);
Statement执行DML
int count = stmt.executeUpdate(sq1);
Statement用于执行DQL
ResultSet rs =stmt.executeQuery(sql);
5.ResultSet
Statement用于执行DQL
ResultSet rs =stmt.executeQuery(sql);
执行查询SQL语句后返回的结果集,由 ResultSet接口接收。
常用处理方式:遍历/判断是否有用果
String sql="select *from emp";
ResultSet rsstmt.executeQuery(sql);
查询结果存放在ResultSet对象的一系列行中
[*]ResultSet对象的最初位置在行首
[*]ResultSet.next()方法用来在行间移动
[*]ResultSet.getXXX()方法用来取得字段的内容
遍历ResultSet
while(rs.next()){
int empno=rs.getInt("empno");
String ename=rs.getString("ename");
String job=rs.getString("job");
System.out.println(empno+","+ename+","+job);
}
https://i-blog.csdnimg.cn/direct/a369fedcdf144b4498fc4c21c4004f99.png
6.关闭并释放资源
数据库操作执行完毕后要释放相关资源
[*]Connection
[*]Statement
[*]ResultSet
rs.close();
statement.close();
connection.close();
三、测试
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]