乐趣区

关于java:java基础之二十三jdbc

一、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、操作


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 获取数据库信息

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();

退出移动版