JDBC的再学习

JDBC 简要架构

Java Application

JDBC(API)
|–>面向程序员(标准:java.sql.*)

|–>面向数据库厂商(标准的实现:驱动)

DBMS (MySQL,Oracle,…)

4.JDBC 应用构建(Java项目)

1)加载驱动(Driver):将驱动读到内存
a)驱动由谁提供(厂商)
b)已经写好的一些class(jar文件)====================================

java.sql.Driver 接口 * 用来连接数据库的方法:connect()
java.sql.DriverManager 类 * 连接数据库的辅助类
数据库连接:


加载、注册驱动:贾
Class.forName(“驱动类名”);”com.mysql.jdbc.Driver”
建立连接:
con = DriverManager.getConnection(url,username,password);
“jdbc:mysql://localhost:3306/hr”,”root”,””
在db.xml文件中写上面的配置参数,用tarena.util.DBUtil提取信息

java.sql.Conection 接口

  • 表示客户端与(服务器)数据库之间的一个抽象连接
    方法


    createStatement()在当前连接上,创建执行 Statement 对象
    prepareStatement(sql)准备一条带?占位符的 sql 语句
    close()

java.sql.Statement 接口

  • 专门执行 SQL 语句的工具
    方法


    executeQuery(sql)执行查询,返回查询结果 ResultSet《查》
    executeUpdate(sql)执行 insert,update,delete《增、删、改》,返回影响的行数
    setFetchSize(行数)
    执行的查询结果集,
    每次 rs.next()
    下载 100 条数据,
    * 减少网络通信次数
    addBatch(sql) 将 sql 语句加为一批
    executeBatch() 执行本地缓存的一批sql
    clearBatch() 清除
    * 减少网络通信次数
    close()

java.sql.PreparedStatement 接口
1) is a Statement (继承关系) 是 Statement 的子接口
2)增强Statement的应用(扩展)只能表示数据
3)允许使用占位符“?”
方法


set类型(问号序号, 值) 问号从1开始
1)如何构建对象?
调用Connection对象的prepareStatement(sql)
2)相关方法应用?
a)executeUpdate()
b)executeQuery()
addBatch()
3)资源释放?
a)close()
不接收参数,执行的是实现准备好的语句

借助PreparedStatement对象可以简化SQL中值的拼接
操作(使用占位符),提高程序的执行效率,
保证系统的安全(防止SQL注入)
PreparedStatement对象是一个特殊的Statement,它继承
了Statement,本身支持在SQL语句中使用占位符”?”

借助此PreparedStatement可以发送如下类似SQL语句:

String sql=”insert msg values (null,?,?,now())”;
String sql=”select * from msg where id=?”;
String sql=”update msg set title=? where id=?”;

“?”符号永远从左向右数,第一个问号下标为1,
后面的以此类推。

创建PreparedStatement时可以采用如下方式:

PreparedStatement pstmt=
conn.preparedStatement(sql);//编译SQL

给"?"赋值(例如对于第一个insert语句)

pstmt.setString(1,'TA');//给第一个"?"符号赋值
pstmt.setString(2,'CA');//给第二个"?"赋值

发送SQL
pstmt.executeUpdate();

说明:
1)使用PreparedStatement可以简化SQL语句中
值的拼接,同时可以防止SQL注入。

2)使用PreparedStatement对于动态SQL(SQL语句中的值是变化的),
可提高程序的执行效率。

java.sql.ResultSet 接口

  • 包装查询结果数据的对象
  • 内部指针, 初始状态指向“第一行之前”,
    向下移动时,可能移到“最后一行之后”
    方法

next()下移指针,并返回当前地址是否有数据(trueh/false)
在指针当前行取数据
get类型(字段名)
get类型(字段序号) 序号从1 开始

日期、时间类型

java.util.Date
|- java.sql.Date 年月日
|- java.sql.Time 时分秒
|- java.sql.Timestamp 年月日时分秒毫秒

创建实例:


Date d = new Date(毫秒);
Time d = new Time(毫秒);
Timestamp d = new Timestamp(毫秒);

JDBC—>”贾琏欲执事”

贾-->加载驱动
   Class.forName("com.mysql.jdbc.Driver");
琏-->连接数据库
   Connection conn = DriverManager.getConnection(url,username,password);
欲-->预处理(防止sql注入)
   String sql = "select * from tabname where name=?";
   PreparedStatement stmt = conn.prepareStatement(sql);
   stmt.setString(1, "zhangs");
执-->执行sql语句
   ResultSet rs = stmt.executeQuery();
事-->结果处理
   if(rs.next()){rs.getString("name");    }

JDBC连接数据库
•创建一个以JDBC连接数据库的程序,包含7个步骤:
加载JDBC驱动程序:
例如:现以连接mysql为例

a)将jar文件拷贝到java项目的某个文件夹(lib)中;
b)将jar文件添加到build path中
c)在程序中执行(例如main方法)
Class.forName(“com.mysql.jdbc.Driver”);
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),
这通过java.lang.Class类的静态方法forName(String className)实现。
例如:
try{
//加载MySql的驱动类
Class.forName(“com.mysql.jdbc.Driver”) ;
}catch(ClassNotFoundException e){
System.out.println(“找不到驱动程序类 ,加载驱动失败!”);
e.printStackTrace() ;
}
成功加载后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
•连接URL定义了连接数据库时的协议、子协议、数据源标识。
•书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:
(MySql的连接URL)
jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;
useUnicode=true:
表示使用Unicode字符集。如果characterEncoding设置为 gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。
连接数据库
2)建立连接

Connection conn=DriverManager.getConnection(url,user,pwd);

DriverManager主要用于管理驱动程序,
并通过驱动程序建立与数据库的连接
(Connection).

当我们借助DriverManager与其它数据库
建立连接时,我们要做哪些事情?

a)更换驱动程序
b)更换url(协议,端口)
c)用户名,密码
•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url , String username ,String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 密码来获得。
例如: //连接MySql数据库,用户名和密码都是root
String url = “jdbc:mysql://localhost:3306/test” ;
String username = “root” ;
String password = “root” ;
try{
connection con =
DriverManager.getConnection(url,username,password ) ;
}catch(SQLException se){
System.out.println(“数据库连接失败!”);
se.printStackTrace() ;
}
4、创建一个Statement 预处理
•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt =
con.prepareCall(“{CALL demoSp(? , ?)}”) ;
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:
executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。具体实现的代码:
ResultSet rs = stmt.executeQuery(“select * from …”) ;
int rows = stmt.executeUpdate(“insert into …”) ;
boolean flag = stmt.execute(String sql) ;
stmt.execute(sql);
其中”sql”可以为任意类型(DDL,DML,DCL)
6、处理结果 两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
•使用结果集(ResultSet)对象的访问方法获取数据:
while(rs.next()){
String name = rs.getString(“name”) ;
String pass = rs.getString(1) ; // 此方法比较高效
}
(列是从左到右编号的,并且从列1开始)
7、关闭JDBC对象 释放资源(关闭对象)
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象
if(rs != null){ // 关闭记录集
try{
rs.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(stmt != null){ // 关闭声明
try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 关闭连接对象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}

class Driver implements java.sql.Driver {
static int i=10;

static {
    //第一次加载 Driver 类时执行
    Driver d = new Driver();
    DriverManager.registDriver(d);
}

}

JDBC 实现CRUD操作?

操作:

1)insert
2)update
3)delete
4)select (结果集ResultSet的处理)

相关API:

1)DriverManager (getConnection(..))
2)Connection (createStatement())
3)Statment (execute(sql),executeUpdate(sql),executeQuery(sql))
4)ResultSet (next(),getXXX(..))
5)SQLException

6.JDBC 工具类(JDBCUtil)的抽取?

1)重复代码进行提取
2)简化代码编写,提高可维护性

JDBC元数据(MetaData)

1.何为元数据?

描述数据的数据。

例如:


wangdong
100000

id name salary 元数据
—- —— ——–
1 wangdong `100000 数据

2.使用元数据的目的?

1)描述数据
2)实现通用编程的一种手段。(高级编程)
3.常用的元数据对象?

1)DatabaseMetaData(自己了解)
通过Connection对象获得,此对象中
封装了一些连接数据库的信息,版本信息等。

2)ResultSetMetaData(重点掌握)
通过ResultSet对象获得,此对象中
封装了一些表的信息:例如表名,字段名,字段数

ResultSetMetaData rsmd=
rs.getMetaData();

JDBC 中的元数据?

所谓元数据一般指的是描述数据的数据。
例如: 如下的person,name都称之为元数据。


马宁

例如:下面有一张表

id name salary 元数据
– —– —–
1 A 100 数据
2 C 300

在JDBC中借助元数据可以实现通用编程。

在JDBC中元数据的代表类型为

1)DatabaseMetaData (了解):此对象需要借助Connection获得
2)ResultSetMetaData (掌握):此对象借助ResultSet对

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值