标签:
1.JDBC简介
JDBC ( Java DataBase Connectivity)
JDBC 是由 Java 语言编写 , 使得 JDBC 代码可以在所有 Java 平台运行 , 确保了可植性 .
JDBC是为Java提供的一个平台无关的数据库标准 API,它提供了一个通用的 SQL 数据库存取机制,该机制为多数关系型DBMS提供统一接口。
对数据库厂商透明, 不同的数据库制造商提供各自的驱动程序.
其中包含了访问数据库所必须的类、接口和各种访问数据库异常类。
2.JDBC基础
Sun提供的JDBC可以完成的基本工作:
与数据库建立连接
执行SQL语句
获得SQL语句的执行结果
通过JDBC的这三个功能,应用程序就可以使用JDBC来操作数据库系统了
3.JDBC API
接口名 说明
Driver 由它注册一个数据库驱动
DriverManager 此类用于加载和卸载各种驱动 并 建立与 数据库的 连接
Connection 数据的连接接口
ResultSet 此接口存放数据检索的结果集
PreparedStatement 此接口用于执行 预编译的 SQL 语句 , 用于执行 CRUD
Statement 此接口用于执行 SQL 语句并将数据检索到 ResultSet 中
CallableStatement 为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法
4.DriverManager提供的方法:
static Connection getConnection(String url, String user, String password)试图建立到url对应数据库的连接 ,并获得到url对应数据库的连接。
5.程序详解—DriverManager
Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:
DriverManager.registerDriver(new Driver()) //注册驱动,不建议使用
DriverManager.getConnection(url, user, password) //创建连接
注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:
一、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
二、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
推荐方式:Class.forName(“com.mysql.jdbc.Driver”);
采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的connection对象。
6.数据库URL
7.Connection提供的方法:
方法 功能
Statement createStatement() 返回Statement对象
PreparedStatement prepareStatement(String sql) 返回PreparedStatement对象. sql中允许使用问号占位符参数,这个占位符参数必须获得值后才可以执行
CallableStatement prepareCall(String sql) 返回CallableStatement 对象sql格式为{call 过程名(?,?,?...)}
void rollback() 回滚事务
void setAutoCommit(boolean autoCommit) 设置是否关闭自动提交,即开启事务
void commit() 提交事务
8.Statement提供的方法:
ResultSet executeQuery(String sql)
用于执行查询语句,并返回查询结果对应的ResultSet对象.该方法只能用于执行查询语句.注意该sql中不允许使用问号占位符参数
int executeUpdate(String sql)
该方法用于执行DML语句,并返回受影响的行数.注意sql语句中不允许使用问号占位符参数,该方法也可以执行DDL语句
boolean execute(String sql)
执行给定的 SQL 语句,该sql可以是查询语句,也可以是DML语句 或DDL语句
9.程序详解—Statement
Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:
executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql):用于向数据库发送任意sql语句
addBatch(String sql) :把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。
10.PreparedStatement提供的方法:
ResultSet executeQuery() 用于执行查询语句,并返回查询结果对应的ResultSet对象
int executeUpdate() 该方法用于执行DML语句,并返回受影响的行数,该方法也可以执行DDL语句
boolean execute() 用于执行SQL语句
void setObject(int parameterIndex, Object x) 使用给定对象设置指定参数的值.传入的值根据索引传给SQL语句中指定位置的参数,第一个参数parameterIndex为1
11.ResultSet提供的方法
void close() 释放ResultSet对象
boolean next() 将ResultSet的记录指针定位到下一行,如果移动后的记录指针指向一条有效记录,则该方法返回true
Object getObject(int columnIndex) 根据索引获取当前行、指定列的值
Object getObject(String columnLabel) 根据列名获取当前行、指定列的值
12.程序详解—ResultSet
Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
获取任意类型的数据
getObject(int index)
getObject(string columnName)
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
提问:数据库中列的类型是varchar,获取该列的数据调用什么方法?Int类型呢?bigInt类型呢?Boolean类型?
ResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
13.释放资源
Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。
14.JDBC编程--preparedStatement
使用PreparedStatement执行SQL语句步骤
1 加载数据库驱动.通常使用Class类的forName()静态方法来加载驱动.代码如下
//加载驱动
Class.forName(driverClass)
driverClass就是数据库驱动类所对应的字符串
//加载MySQL的驱动
Class.forName(“com.mysql.jdbc.Driver”)
2 通过DriverManager获取数据库连接.代码如下
//获取数据库连接
DriverManager.getConnection(url,user,pass)
当使用DriverManager获取数据库连接时,通常需要传入3个参数:数据库
URL、登录数据库的用户名和密码.MySQL数据库的URL写法如下
jdbc:mysql://hostname:port/databasename
使用PreparedStatement执行SQL语句步骤
3 通过Connection对象创建PreparedStatement对象,创建PreparedStatement对象时传入sql语句
通过调用Connection对象的prepareStatement方法完成
4 为传入的sql语句中的占位符参数赋值
5 使用PreparedStatement执行SQL语句
通过PrepareStatement对象的executeQuery、executeUpdate或execute方法
完成
6 操作结果集.如果执行的SQL语句是查询语句,则执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果
.程序可以通过操作该ResultSet对象来取出查询结果.如果执行的SQL语句不是查询语句,则无操作结果集这一步骤
7 回收数据库资源,包括关闭ResultSet、 PreparedStatement和Connection等资源
通过调用ResultSet、PreparedStatement和Connection提供的close方法完成
PreparedStatement优势:
使用PreparedStatement执行带占位符参数的SQL语句
注意事项
使用PreparedStatement执行带占位符参数的SQL语句时, SQL语
句中的占位符参数只能代替普通值,不要使用占位符参数代替表
名、列名等数据库对象,更不要使用占位符参数代替SQL语句中
的insert、select等关键字
PreparedStatement的优势
1 PreparedStatement的执行效率比Statement的执行效率高
2 PreparedStatement无须”拼接”SQL”语句,编程更简单
推荐
通常推荐避免使用Statement来执行SQL语句,改为使用
PreparedStatement执行SQL语句
标签:
原文地址:http://www.cnblogs.com/mariahcat/p/4836749.html