第八节 Java JDBC

1. JDBC 概念

由来:用来增强数据库的移植性,如果不用JDBC我们直接和底层的数据进行连接,当我们换数据库的时候就需要去更改相关代码。因为底层的驱动不同,对应的接口也不同。 比如MySQL数据库和Oracle数据库,它们厂商提供的接口就不一样。因此如果我们的程序直接和他们连接,在我们进行数据库更换的时候就必须去更改接口的内容以及相关的API。而JDBC对他们的底层进行了封装,数据库厂商如果要用JDBC就必须根据相关的接口去编写对应的驱动程序来提供接口。我们的程序是直接的和JDBC进行相连,我们只需要用JDBC中的东西进行数据库的一些相关操作。而不用管是什么数据库,这样就将操作进行了一些统一,在我们进行更改数据库的时候我们不需要更改太多的内容,我们只需要将驱动Jar包更换一下就行了。

2. JDBC 常用API

2.1 Driver 接口

Driver 接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用,在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath 中(就是数据库驱动程序的JAR包)。

2.2 DriverManager 类

用来加载JDBC驱动并创建与数据库的连接。
DriverManager类的重要方法:

方法声明功能描述
static synchronized void registerDriver(Driver driver)该方法用于向DriverManager中注册给定的JDBC驱动程序
static Connection getConnection(String url,String user,String pwd)用于建立数据库连接,并返回表示连接的Connection对象

但在实际开发中一般不用registerDriver()这个方法来注册驱动,因为要选择注册的驱动类中有一段代码块执行过了。通常用Class类的静态方法forName()来实现注册驱动

2.3 Connection 接口

只有获得了Connection对象才能对数据库进行一些操作,它代表Java程序和数据库的连接对象。

Connection接口中的常用方法:

方法声明功能描述
Statement createStatement()返回一个向数据库发送语句的Statement对象
PreparedStatement prepareStatement(String sql)该方法用于返回一个PreparedStatement对象,这个对象用于向数据库发送参数化SQL语句
CallableStatement prepareCall(String sql)返回一个CallableStatement对象,该对象用于调用数据库中的存储过程

2.4 Statement 接口

用来执行数据库操作的接口,它会把静态的SQL语句发送到数据库中编译执行,然后返回数据库处理结果,它可以通过Connection实例的createStatement()方法获得。
Statement接口中的常用方法:

方法声明功能描述
boolean execute(String sql)用于执行各种SQL语句,返回为true表示执行的SQL语句有查询结果,可通过Statement的getResultSet()方法查询
int executeUpdate(String sql)用于执行SQL中的insert、update、和delete语句,该方法返回受影响数据的条数
ResultSet executeQuery(String sql)用于执行SQL中的select语句,返回一个结果集对象,ResultSet对象

2.5 PreparedStatement 接口

解决问题就是在Statement中我们的SQL语句里面如果有变量不好实现,PreparedStatement是Statement的子接口,但是它实现了SQL语句可以带参数,同时比较安全。我们的SQL语句中可以用占位符" ? "来代替参数,然后我们在通过setXxx()方法为SQL语句中的变量赋值。
PreparedStatement接口中的常用方法:

方法声明功能描述
int executeUpdate()在此PreparedStatement对象中执行的SQL语句必须是DML语句或无返回内容的SQL语句(如DDL语句)
ResultSet executeQuery()在此PreparedStatement对象中执行SQL查询,该方法返回的是ResultSet对象
void setInt(int parameterIndex,int x)将指定参数设置为给定的int值
void setFloat(int parameterIndex,float x)
void setString(int parameterIndex,String x)将指定参数设置为给定的String值
void setDate(int parameterIndex,Date x)将指定参数设置为给定的Date值
void addBatch()将一组参数添加到此PreparedStatement对象的批处理命令中
void setCharacterStream(int parameterIndex,java.io.Reader reader,int length)将指定的输入流写入数据库的文本字段
void setBinaryStream(int parameterIndex,java.io.InputStream x,int length)将二进制的输入流数据写入到二进制字段中

注意:在setDate()方法中参数Date类型必须shiijava.sql.Date而不是java.util.Date。
也可通过setObject()方法去设置。

2.6 ResultSet 接口

这个类是用来保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。内部有一个指向 数据行的游标,ResultSet对象初始化时,游标在表格的第一行之前,调用next()方法将游标向下移动一行,如果下行没有数据返回false。
ResultSet 接口中的常用方法:

方法声明功能描述
String getString(int columnIndex)用于获取指定字段的String类型的值,columnIndex用来代表字段的索引
String getString(String columnName)用于获取指定字段的String类型的值,参数columnName代表字段名称
int getInt(int columnIndex)用于获取指定字段的int 类型的值,参数columnIndex代表字段索引
int getInt(StringcolumnName)用于获取指定字段的int 类型的值,参数 columnName代表字段名称
Date getDate(int columnIndex)用于获取指定字段的Date类型的值,参数columnIndex代表字段的索引
Date getDate(String columnName)用于获取指定字段的Date类型的值,参数columnName代表字段的名称
boolean next()将游标从当前位置向下移动一行
boolean absolute(int row)将游标移动到此ResultSet对象的指定行
void afterLast()将游标移动到此ResultSet对象的末尾,最后一行之后
void beforeFirst()将游标移动到此ResultSet对象的开头,第一行之前
boolean previous()将游标移动到此ResultSet对象的上一行
boolena last()将游标移动到此ResultSet对象的最后一行

这里面的索引是从1开始的。

3. JDBC 编程步骤

第一步下载数据库驱动:
(1) SQL Server驱动包下载地址:
https://www.microsoft.com/zh-CN/download/details.aspx?id=11774
使用示例:https://docs.microsoft.com/en-us/sql/connect/jdbc/using-the-jdbc-driver?view=sql-server-ver15#making-a-simple-connection-to-a-database
(2) Mysql驱动包下载下载地址:
MySQL驱动包(.jar)下载及官方使用说明:
https://dev.mysql.com/doc/connector-j/8.0/en/conne
ctor-j-usagenotes-connect-drivermanager.html

MySQL 下载地址:https://dev.mysql.com/download
s/mysql/

MySQL workbench下载地址:https://dev.mysql.com/
downloads/workbench/

jar包下载地址:https://dev.mysql.com/downloads/co
nnector/j/

选择“platform Independent”与平台无关
然后选择下载mysql-connector-java-8.0.20.zip,通常
是第二个
不注册登录账号,直接选择下方“No thanks, just start
my download",也可以直接打开下方连接下载:
https://dev.mysql.com/get/Downloads/Connector-J/
mysql-connector-java-8.0.20.zip

(3) Oracle驱动下载:
https://www.oracle.com/database/technologies/app
dev/jdbc-ucp-19-6-c-downloads.html

说明文档:
https://docs.oracle.com/en/database/oracle/oracle-d
atabase/20/jjdbc/JDBC-getting-started.html#GUID-A7
809785-56AF-4BD1-A04D-E69CA03489C5

(1)加载数据库驱动
通常利用Class类的静态方法forName(String qudongName)来实现
Class.forName(“DriverName”)
①MY SQL Server:
com.microsoft.sqlserver.jdbc.SQLServerDriver
②Oracle:
oracle.jdbc.driver.OracleDriver
③MySQL:MySQL8.0以前版本:
com.mysql.jdbc.Driver
MySQL8.0以后版本:
com.mysql.cj.jdbc.Driver

(2)通过DriverManager获取数据库连接
Connection conn=DriverManager.getConnection(String url,String user,String pwd);
注意:连接数据库的url,要按照一定规则去写,比如MySQL中是这样写的:
jdbc:mysql://databasesip:port/databasename(默认端口3306)

MySQL8.0以前版本
Connection conn =
DriverManager.getConnection(“jdbc:mysql://l
ocalhost:3306/数据库名”,“数据库服务器登录名”,“登
录密码”);
MySQL8.0以后版本
“jdbc:mysql://localhost:3306/数据库名?
useSSL=false&serverTimezone=UTC”

//解决时区问题也可以直接设置,当然也可以在MySQL查询
中执行set global time_zone=’+8:00’;
//serverTimezone=GMT%2B8

(3)通过Connection获取Statement对象
根据前面的Connection接口的常用方法我们有三种方法去获得Statement对象。
(4)使用Statement接口的方法来执行SQL语句
(5)操作ResultSet结果集
(6)关闭连接释放资源,通常资源的关闭和顺序和打开顺序相反,顺序是ResultSet、Statement、Connection。

4. 编写第一个JDBC程序

第一步:搭建数据库环境
下载好数据库,并配置好环境变量,并创建好数据库和对应表
这里我以前弄过了,就直接使用了,直接进入下一步
第二步:给IDEA导入数据库驱动JAR包
打开 IDEA 在创建好项目中用快捷键ctrl+Alt+shift+s或File->project structure
在这里插入图片描述
在这里插入图片描述
找到JAR包对应的位置,点击ok即可搞定
如果使用Eclipse 按如下方法去导入Jar包:
第一步:先在项目中创建一个文件包,然后将下载好的jar包复制进来
在这里插入图片描述
右键找到build path–>
在这里插入图片描述
开始编写第一个JDBC程序:
使用Mysql:

public class FirstJDBCDemo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/student_info?useSSL=false&serverTimezone=UTC";
       Connection con= DriverManager.getConnection(url,"root","pwd");
        PreparedStatement ps=con.prepareStatement("select *from course");
        ResultSet result=ps.executeQuery();
        //输出结果集
        System.out.println("课程号     "+"       课程名称     "+"     课程简介      "+"    课时   "+
                "    学分   "+"  开课学期  ");
        while(result.next()){
            String id=result.getString("课程号");
            String name=result.getString("课程名称");
            String jieshao=result.getString("课程简介");
            int keshi=result.getInt("课时");
            int xuefen=result.getInt("学分");
            String kaikexueqi=result.getString("开课学期");
            System.out.println(id+"   |"+name+"   |     "+jieshao+"   |   "+keshi+"   |  "+xuefen+"   |  "+kaikexueqi);
        }
        result.close();
        ps.close();
        con.close();
    }
}

效果如下图:
在这里插入图片描述
使用SQL Server

public class JdbcDemo {
public static void main(String[] args)
throws ClassNotFoundException, SQLException
{
//注册驱动
Class.forName("com.microsoft.sqlserver.jdbc
.SQLServerDriver");
//创建连接客串
String connectionUrl =
"jdbc:sqlserver://localhost:1433;"
+
"databaseName=student;user=sa;password=1234
56;";
//建立连接
Connection con =
DriverManager.getConnection(connectionUrl);
// Connection con =
DriverManager.getConnection("jdbc:sqlserver
://localhost:1433;databaseName=student","sa
","123456");
//显示连接数据库名
//
System.out.println(con.getCatalog());
//预处理
PreparedStatement ps =
con.prepareStatement("select * from
student");四、案例—使用JDBC实现QQ登
录
由同学们独立完成,并交作业。
数据库可选择ACCESS,或者MySQL。
"com.hxtt.sql.access.AccessDriver"
//delete from student where sid= ?"
//update student set sname = ?
where sid = ?"
//执行并生成结果集
ResultSet result =
ps.executeQuery();
//遍历结果集
while (result.next()) {
System.out.println(result.getInt("sid")+res
ult.getString("sname"));
}
//关闭连接等
con.close();
ps.close();
result.close();
}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值