JBDC简介
JDBC(java Database Connectivity)从物理结构上说,就是java语言访问数据库的一套API应用程序编程接口。从本质上说,就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API使得开发人员可以使用纯java的方式来连接数据库,并进行操作。
JDBC常用接口、类介绍
JDBC提供对独立于数据库统一的API,用以执行SQL命令。API常用的类、接口如下:
1、DriverManager
管理JDBC驱动的服务类,主要通过它获取Connection数据库链接,常用方法如下:
public static synchronized Connection getConnection(String url, String user, String password) throws Exception;
该方法获得url对应的数据库的连接。
2、Connection常用数据库操作方法:
Statement createStatement throws SQLException: 该方法返回一个Statement对象。
PreparedStatement prepareStatement(String sql) throws SQLException;该方法返回预编译的Statement对象,
即将SQL语句提交到数据库进行预编译。
CallableStatement prepareCall(String sql) throws SQLException:该方法返回CallableStatement对象,
该对象用于存储过程的调用。
上面的三个方法都是返回执行SQL语句的Statement对象,PreparedStatement、CallableStatement的对象是Statement的子类,
只有获得Statement之后才可以执行SQL语句。
关于Connection控制事务的方法:
Savepoint setSavepoint(): 创建一个保存点
Savepoint setSavepoint(String name):创建一个带有名称的保存点
void setTransactionIsolation(int level):设置事务隔离级别
void rollback():回滚事务
void rollback(Savepoint savepoint):回滚到指定保存点
void setAutoCommit(boolean autoCommit): 关闭自动提交,打开事务
void commit():提交事务
3、Statement
用于执行SQL语句的API接口,该对象可以执行DDL、DCL语句,也可以执行DML语句,
还可以执行SQL查询语句,当执行查询语句是返回结果集,常用方法如下:
ResultSet executeQuery(String sql) throws SQLException:该方法用于执行查询语句,并返回查询结果对应的ResultSet对象,
该方法只用于查询语句。
int executeUpdate(String sql) throws SQLException:该方法用于执行DML语句,并返回受影响的行数;
该方法也可以执行DDL,执行DDL返回0;
boolean execute(String sql) throws SQLException:该方法可以执行任何SQL语句,如果执行后第一个结果是ResultSet对象,
则返回true;如果执行后第一个结果为受影响的行数或没有任何结果,则返回false;
4、PreparedStatement
预编译的statement对象,PreparedStatement是Statement的子接口,它允许数据库预编译SQL(通常指带参数SQL)语句,
以后每次只改变SQL命令参数,避免数据库每次都编译SQL语句,这样性能就比较好。而相对于Statement而言,
使用PreparedStatement执行SQL语句时,无需重新传入SQL语句,因为它已经预编译了SQL语句。
但是PreparedStatement需要为编译的SQL语句传入参数值,所以它比了如下方法:
void setXxx(int index, value)根据该方法传入的参数值的类型不同,需要使用不同的方法。
传入的值的类型根据传入的SQL语句参数而定。
5、ResultSet
void close() throws SQLException:释放、关闭ResultSet对象
boolean absolute(int row):将结果集移动到第几行,如果row是负数,则移动到倒数第几行。
如果移动到的记录指针指向一条有效记录,则该方法返回true;
void beforeFisrt(): 将ResultSet的记录指针定位到首行之前,这是ResultSet结果集记录指针的
初始状态:记录指针的起始位置位于第一行之前。
boolean first():将ResultSet的记录指针定位到首行。如果移动后的记录指针指向一条有效记录,则该方法返回true。
boolean previous():将ResultSet的记录指针定位到上一行,如果移动后的记录指针指向一条有效记录,则该方法返回true。
boolean next():将ResultSet的记录指针定位到下一行。如果移动后的记录指针指向一条有效记录,则返回true。
boolean last():将ResultSet的记录指针定位到最后一行。如果移动后的记录指针指向一条有效记录,则返回true。
void afterLast():将ResultSet的记录指针定位到最后一行之后。
注意:在JDK1.4以前只支持next移动,且每次移动一个位置。到JDK1.5就可以随意定位。
jdbc的编程步骤
进行jdbc编程步骤大致如下:
1、加载数据库驱动
Class.forName(driverClass)
上面的dirverClass就是数据库驱动类所对应的类路径字符串,根据不同数据库厂商提供的驱动也不同。
进行jdbc编程步骤大致如下:
1、加载数据库驱动
Class.forName(driverClass)
上面的dirverClass就是数据库驱动类所对应的类路径字符串,根据不同数据库厂商提供的驱动也不同。
2、通过DriverManager获取数据库的链接
DriverManager.getConnection(String url, Stirng user, String pass)
当使用DriverManager来获取链接,需要传入三个参数:分别是数据量的url、用户名、密码。
3、通过Connection对象创建Statement对象,Connection创建Statement的方法如下三个:
createStatement()创建基本的Statement对象。
prepareStatement(String sql):根据传入的sql语句创建预编译的Statement对象。
prepareCall(String sql):根据传入的sql语句创建CallableStatement对象
4、Statement执行SQL语句,Statement有三大方法来执行SQL语句:
execute:可以执行任何SQL语句,单比较麻烦
executeUpdate:可以执行DML、DDL语句。执行DML返回受影响的SQL语句行数,执行DDL返回0;
executeQuery:只能执行查询语句,执行后返回代表查询结果的ResultSet对象。
5、操作结果集,针对ResultSet
主要移动指针和获得值
next、previous、first、last、beforeFrist、afterLast、absolute等移动指针的方法。
getXxx获得移动指针指向行,特定列、索引的值。使用列名作为获取值的参数可读性好、使用索引作为获取参数性能好。
package jdbc;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestStatement {
public static void main(String[] args) {
//1 加载驱动
Connection conn = null;
Statement stm = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
//2 获取连接
String url = "jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf-8";
String user = "root";
String password = "root123";
//ctrl + 2
conn = DriverManager.getConnection(url, user, password);
//3 创建statement的对象
stm = conn.createStatement();
//4 执行sql语句
String sql = "select * from test";
rs = stm.executeQuery(sql);
/*操作数据库 statement.executeUpdate(增删改sql)*/
//String sql = "insert into test (ename,job,deptno) values('小d弟','clerk',20)";
//String sql = "delete from test where ename='大哥'";
// String sql = "update test set job ='dagege' where ename='小d弟'";
//
// int lines = stm.executeUpdate(sql);
// System.out.println("影响行数"+lines);
//5 处理结果集
while(rs.next()){
int empno = rs.getInt(1);
String ename = rs.getString(2);
String job = rs.getString(3);
int mgr = rs.getInt(4);
Date hiredate = rs.getDate(5);
double sal = rs.getDouble(6);
double comm = rs.getDouble(7);
int deptno = rs.getInt(8);
System.out.println(empno + " " + ename+" "+job+" "+mgr+" "+hiredate+" "+sal+" "+comm+" "+deptno);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//6. 关闭连接
try {
rs.close();
stm.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114785.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...