一、JDBC(java database connectivity)

1、介绍

JDBC(Java Database Connectivity)是基于JAVA语言访问数据库的一种技术。

Jdbc

Java访问控制数据库里面数据的一套标准接口

java面向对象编程

面向接口编程

▪ JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

▪ JDBC的设计思想:由SUN公司(JCP)提供访问数据库的接口,由数据库厂商提供对这些接口的实现,程序员编程时都是针对接口进行编程的。

▪ JDBC包括一套JDBC的API和一套程序员和数据库厂商都必须去遵守的规范。

java.sql包:提供访问数据库基本的功能
javax.sql包:提供扩展的功能

▪ 数据库中间件

▪ JDBC可以做些什么?

连接到数据库
在Java app中执行SQL命令
处理结果。

2、职责

1、java:客户端:接收数据、拼接sql、发送sql、分析结果、返回结果browser
2、db:服务器:接收sql,分析处理,返回结果给java

3、操作

image.png
image.png

3.1 面向接口编程java.sql.*

1、java.sql.Driver:-->驱动
2、java.sql.Connection:-->连接
3、java.sql.Statement:-->静态处理块

java.sql.PreparedStatement:-->预处理块

4、java.sql.ResultSet:-->结果集
5、java.sql.ResultSetMetaData:-->结果集元数据

3.2 常用数据库连接方式

mysql:

--String Driver="com.mysql.jdbc.Driver"//驱动程序

--String URL="jdbc:mysql://localhost:3306/db_name";//连接的URL,db_name为数据库名称

--String Username="username";//用户名

----String Password="password";//密码

Class.forName(Driver);

--Connection conn = DriverManager.getConnection(URL,Username,Password);

Oracle:

--String Driver="oracle.jdbc.driver.OracleDriver";//连接数据库的方法

--String URL="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID

String Username="username"; //用户名

String Password="password"; //密码

Class.forName(Driver) ; //加载数据库驱动

Connection con=DriverManager.getConnection(URL,Username,Password);

PostgreSQL:

--String Driver="org.postgresql.Driver";//连接数据库的方法

--String URL="jdbc:postgresql://localhost/db_name"; //db_name为数据库名

--String Username="username"; //用户名

--String Password="password"; //密码

--Class.forName(Driver) ;

--Connection con=DriverManager.getConnection(URL,Username,Password);

DB2:

--String Driver="com.ibm.dbjdbc.app.DBDriver"; //连接具有DB2客户端的Provider实例

--//String Driver="com.ibm.dbjdbc.net.DBDriver"; //连接不具有DB2客户端的Provider实例

--String URL="jdbc:db2://localhost:5000/db_name"; //db_name为数据库名

--String Username="username"; //用户名

--String Password="password"; //密码

--Class.forName(Driver) ;

Microsoft SQL Server :

--String Driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; //连接SQL数据库的方法

--String URL="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"; //db_name为数据库名

--String Username="username"; //用户名

--String Password="password"; //密码

--Class.forName(Driver).new Instance(); //加载数据可驱动

3.3 与数据库的连接

建立连接
◼ 指定数据库连接的url,数据源的位置
◼ 使用DriverManager.getConnection(url);
◼ 例如:
String url=“jdbc:oracle:thin:@127.0.0.1:1521:orcl”;
Connection conn=DriverManager.getConnection(url);
或者:
Connection conn=DriverManager.getConnection(String
url , String user , String password)

3.4 获取数据库信息

image.png

3.5 静态处理块 Statement

▪ 一、静态处理块 Statement
▪ 1、特点: 静态sql语句
▪ 2、创建: 连接.createStatement()
▪ 3、操作
▪ ddl --> execute(String sql)
▪ dml --> executeUpdate(String sql)
▪ select -->executeQuery(String sql)

3.6 查询数据库 (Statement)
  1. 创建Statement

◼ 用户执行sql语句,
◼ Statement stmt=conn.createStatement();

  1. 执行查询语句

◼ String sql=“select * from emp”
◼ ResultSet rs=stmt.executeQuery(sql);
◼ executeQuery()一般用于执行一个sql语句,返回一个结果集。

  1. 关闭Statement
  2. stmt.close()
3.7 检索结果集
前面讲了如何执行sql语句,返回了ResultSet类的对象,这里讲如何对ResultSet对
象进行处理

ResultSet的基本处理方法

ResultSet对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果,按照行和列进行处理.

ResultSet对象维持一个指向当前行的指针.最初,这个指针指向第一行之前.ResultSet类的next()方法使这个指针移向下一行.第一次,使用next()方法,将指针指向结果集的第一行.next方法的返回值是一个boolean值,若为true,则成功移向下一行.若返回false则没有下一行.getXXX方法可以从某一列中获得结果.其中XXX是jdbc中的java数据类型.如getInt();需要制定检索的列,或名称.

Statement stmt=conn.createStatement();
String sql=“select a,b,c from mytable”;
ResultSet rs=stmt.executeQuery(sql);
While (rs.next())
{
int i=rs.getInt(1);
String s=rs.getString(“a”);
}

3.8 查询数据库 (PreparedStatement)

Statement对象在每次执行sql语句时都将语句传给数据库,在多次执行同一个语句时,效率比较低.

Statement对象Sql注入引起安全问题可以使用PreparedStatement,使用数据库的预编译功能,速度可以提高很多.避免sql注入引起的安全问题

PreparedStatement对象的sql语句可以接受参数,每次执行时可以传递不同的参数.

3.8 预处理块 PreparedStatement

1、特点: 动态sql语句 凡是Statement 能够处理的 PreparedStatement都能处理 ,反之不一定
2、创建: 连接.prepareStatement(String sql)
3、操作

1)存在参数,必须填充setXxx(int parameterIndex, Xxx x)
2)、ddl --> execute()
dml -->executeUpdate()
select -->executeQuery()
ps: 参数 指 值,不是用于关键字 和字段上面
select -->where sal=?
insert --> values(?)
update --> set sal=? where deptno=?
delete --> where sal=?
3.9 PreparedStatement
  1. 创建

– String sql=“select * from emp where ename=?”
– PreparedStatement ps=conn.prepareStatement(sql);

  1. 执行

◼ ps.setInt(1,”SMITH”);
◼ ResultSet rs=pstmt.executeQuery();

  1. 关闭

◼ ps.close();

3.10 获取结果集的信息

ResultsetMetaData:
▪ 可以获取结果集中 的列的名称,数据类型等.
▪ ResultsetMetaData rsmd=rs.getMetaData();
▪ getColumnCount();
▪ getColumnName(int column);
▪ getColumnType(int column); 返回int值
▪ getColumnTypeName(int column); 返回字符串
▪ isReadOnly(int column)
▪ isNullable(int column)

3.11 更新数据库

▪ 包括修改,更新和删除记录,创建和删除表,以及增加和删除列.对应于数据库insert,update,delete等.
▪ 对数据库的更新操作也是通过PreparedStatement对象完成的.
▪ 不使用executeQuery()方法,使用executeUpdate()方法.
▪ executeUpdate的返回值是它影响的记录的行数.
例如
String sql=“update Customer set address =‘Peking’ where lastname=‘Li’”
int i=Stmt.executeUpdate(sql)
返回更新的行数

3.12 操作jdbc步骤

1、选择快递公司 -->选择数据库 加载驱动
2、与快递公司建立联系(电话号码...) -->建立连接 (连接信息 user password url)
3、准备包裹 快递员收包裹 -->准备sql语句 选择处理块 (Statement PreparedStatement )
4、打包 投递 -->填充参数 执行(ddl -->execute(sql) dml-->executeUpdate(sql) select-->executeQuery() )
5、签字 验收 -->分析结果(ddl-->没有异常 dml-->记录数>0 select -->分析结果集)
6、打发走人 -->释放资源

3.13 批处理

多次执行数据更新操作时,可以使用批处理减少连接数据库次数,提高效率.
Statement批处理方式:
Statement st = conn.createStatement();
st.addBatch(更新语句1);
st.addBatch(更新语句2);
…..
st.executeBatch();
st.close();
建议采用PreparedStatement

3.14 PreparedStatement批处理

PreparedStatement批处理方式:
PreparedStatement ps = conn.preparedStatement(sql);
ps.setXXX(索引,参数值);
… …
ps.addbatch();
ps.executeBatch();
ps.close();


萌妹子_liu
28 声望43 粉丝

萌萌哒,程序猿