文章目录
一、JDBC简介
学习完JavaSE的内容后,紧接着就需要使用到JDBC,
该内容可以建立java与数据库之间的联系并通过java
对数据库进行操作。具体如下图
二、JDBC核心API接口和类
在初期学习jdbc时需要掌握下面几个接口的使用
1、Connection : 接口 连接对象
2、Statement: 接口 发送SQL,通知数据库服务器执行
3、ResultSet: 接口 对应查询的结果集
4、DriverManager: 类驱动管理器,管理项目中所有的数据库驱动
补充:驱动就是指存放多个.class文件
三个接口之间的关系如下图:
首先需要创建一个仓库,创建一个路连接工厂和仓库,
然后准备需要运输到仓库中的产品,再准备一辆车负责将产品运输到仓库。
三、搭建JDBC环境
第一步:在idea中导入第三方jar包(使用初期由自己手动导入,后续使用到maven就不需要自己手动导入了
)
-
在项目中创建一个目录为lib(自定义命名)
-
拷贝第三方jar包到lib目录中(复制粘贴)
-
设置lib目录为一个库目录(File=>Project Structure…=>Libraries=>+=>java=>选择lib所在的位置=>apply=>ok)
以后还需要在lib中添加jar包直接拷贝进来即可不需要再进行上述的设置
-
新导入的jar包可能会出现无法展开的现象,需要手动进行下设置(类似刷新)
如果打勾了还是没有展开则将勾去掉后再使用apply然后ok
四、第一个jdbc程序
整体思路
1、加载驱动类(仓库)
2、获取连接(路)
3、编写SQL语句(产品)
4、创建Statement对象(车)
5、发送SQL,通知数据库执行,接收结果(增删改)
6、如果是查询,返回的是结果集,类型为ResultSet,循环解析并输出
7、关闭资源
第一步:加载驱动类Driver
位置:Mysql.jar=>com=>jdbc=>Driver=>右键复制 copy reference
代码:Class.forName("com.mysql.jdbc.Driver");
第二步:获取连接
步骤:
1、创建Connection对象 Connection conn;
2、使用DriverManager类的getConnection方法(三个参数)
3、第一个参数 url:访问数据库服务器的网址
jdbc:协议名
mysql:连接哪个数据库
localhost:服务器ip地址
3306:mysql默认的端口
mydb:数据库的名称
?key=value
完整代码:jdbc:mysql://localhost:3306/fisi?useUnicode=true&characterEncoding=utf8&useSSL=false
4、第二个参数 user:用户名
5、第三个参数:password 密码
代码:
Connection conn=null;
String url = "jdbc:mysql://localhost:3306/fisi?useUnicode=true&characterEncoding=utf8&useSSL=false";
conn = DriverManager.getConnection(url,"root","123456");
第三步:编写SQL语句
代码:
String sql = "insert into test3 values(4,'测试')";
描述:
编写的SQL语句用String类型的变量接收,语句与mysql中学习的一致没有差别
第四步:创建Statement对象
步骤:
1、创建全局的Statement对象
2、通过Connection对象创建Statement对象
代码:
Statement smt=null;
smt = conn.createStatement();
第五步:发送SQL,通知数据库执行,接收结果(增删改)
步骤:
1、增删改使用executeUpdate方法通过Statement对象将其发送给数据库并得到数值型的返回结果
2、对返回的数值型结果进行判断,如果值>0则代表操作成功,否则失败
代码:
int row = smt.executeUpdate(sql);
if (row>0){
System.out.println("操作成功");
}else{
System.out.println("操作失败");
}
第六步:查询的代码
步骤:
1、查询使用executeQuery方法通过Statement对象将其发送给数据库并得到ResultSet类型的返回结果
2、使用while循环遍历得到的结果集
3、该结果集的有一个next()方法,该方法可以移动指针,一行一行的移动
4、通过结果集调用getXxx(int index)方法可以返回index所在类的那一个数据
5、通过结果集调用getXxx(String name)方法可以返回指定列名的数据
6、getXxx中的Xxx是指的数据类型
代码:
ResultSet rs=null;
rs = smt.executeQuery(sql);
while(rs.next()){
int id = rs.getInt("id");
String department = rs.getString("department");
System.out.println(id+"---->"+department);
}
第七步:关闭资源
牢记:先开的后关,后开的先关
代码:
try {
if (rs!=null){
rs.close();}
if (smt!=null){
smt.close();}
if (conn!=null){
conn.close();}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
整体代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCdemo1 {
public static void main(String[] args) {
// todo 增删改
Connection conn=null;
Statement smt=null;
try {
//todo 1、加载驱动 jar包com目录下jdbc目录Driver类 复制
Class.forName("com.mysql.jdbc.Driver");
//todo 2、获取连接
// jdbc:mysql://localhost:3306
// jdbc 协议名 mysql 连接哪个数据库 localhost mysql服务器的ip地址远程的mysql使用真实IP 3306 mysql默认的端口
String url = "jdbc:mysql://localhost:3306/fisi?useUnicode=true&characterEncoding=utf8&useSSL=false";
conn = DriverManager.getConnection(url,"root","123456");
//todo 3、编写SQL
// 增
String sql = "insert into test3 values(4,'测试')";
// todo 4、创建statement
smt = conn.createStatement();
// todo 5、发送sql
int row = smt.executeUpdate(sql);
// 判断
if (row>0){
System.out.println("操作成功");
}else{
System.out.println("操作失败");
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
// todo 6、关闭资源 先开后关
try {
if (smt!=null){
smt.close();}
if (conn!=null){
conn.close();}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
五、mysql数据类型对应java数据类型
mysql数据类型 | java数据类型 |
---|---|
char | String |
varchar | String |
text | String |
int | int |
double | double |
decimal | double/BigDecimal |
date | java.sql.Date |
time | java.sql.Time |
datetime | java.sql.Date |
六、核心API(三个接口一个类)
1、DriverManager类
获取连接,静态方法getConnection() 注册驱动
2、Connection接口
作用1:创建Statement对象
作用2:创建PreparedStatement对象:执行sql
作用3:创建CallableStatement对象:执行数据库存储过程(java的方法)
作用4:关于事务的相关方法
3、Statement接口
作用:发送sql,通知数据库执行
两个子接口:
①、PreparedStatement :
不需要拼接SQL,以后基本上使用的就是这个接口
②、CallableStatement:
调用存储过程
执行SQL语句的方法增删改和查两者有不同的方法,使用时不明确,所以Statement提供了另外一个方法Boolean execute(sql)
返回值为true 代表 语句是查询语句 有结果集
获取结果集ResultSet getResultSet()
返回值为false 代表 语句时增删改 没有结果集
得到受影响行数int getUpdateCount()
4、ResultSet接口
类型:
1、默认类型是TYPE_FORWARD_ONLY 只能往前移动的结果集: next() 有效
2、调用previous()抛出异常SQLException
获取结果集元数据:
得到元数据 rs.getMetaData()返回值为ResultSetMetaData
ResultSetMetaData类的方法
1、获取结果集的列数:int getColumnCount()
2、获取指定列的列名:String getColumnName(int colindex)