JDBC总结

1.什么是JDBC?

JDBC: Java Database Connectivity java数据库连接,即使用java代码发送sql语句的技术,为多种关系型数据库提供统一访问。

2.JDBC连接数据库

加载驱动 创建连接 执行sql并返回执行结果 处理结果 关闭资源

//1.加载驱动

Class.forName("com.mysql.jdbc.Driver");

//2.创建连接

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

//3.执行sql语句并返回执行结果

//准备sql

String sql = "SELECT * FROM student";

//创建Statement,用PreparedStatement更好

//PreparedStatement stmt = conn.prepareStatement(sql);

Statement stmt = conn.createStatement();

//执行sql

ResultSet rs = stmt.executeQuery(sql);

//4.处理结果

while(rs.next()){

int id = rs.getInt("id");

String name = rs.getString("name");

String gender = rs.getString("gender");

System.out.println(id+","+name+","+gender);

}

//5.关闭资源

stmt.close();

conn.close();

2.1接口

1.Connection接口

  • Connection接口代表着与数据库的链接

connection接口的常用方法

返回类型方法功能描述
StatementcreateStatment()创建一个Statment对象
StatementcreateStatment(int resultSetType,int resultSetConcurrency)创建一个statment对象,该对象将生成具有给定类型并发性,和可保存的ResultSet对象
PrepareStatementprepareStatement()创建预处理对象prepardStatement
CallableStatementprepareCall(String sql)创建一个CallableStatment对象来调用数据库存储过程
booleanisReadOnly()查看当前Collection对象是否为只读
booleansetReadOnly()设置当前对象的默认读写模式

2.Statment接口

statment接口

返回类型方法功能描述
booleanexecute(String sql)执行静态sql语句,该语句可能返回多个结果集,(改方法看似鸡肋,其实也很鸡肋,如果该语句可以返回一个ResultSet结果集,则为true,反之false,当然,当sql语句庞大的时候,可以用这个方法来检测是否能够执行从而节省资源)
ResultSetexecuteQuery(String sql)执行给定的sql语句,该语句返回单个ResultSet对象
voidclearBatch()清空这个Statement对象的sql命令列表
int[]executeButch()将一批sql命令交给数据库类执行,如果全部成功,则返回更新计数组成的数组,数组元素的排序和sql添加的顺序相同

3.PreparedStatment接口,继承自Statment接口,因为PreparedStatment是安全的,Statment接口是不安全的

PrepareStatment接口的常用方法

方法参数方法功能描述
voidsetXXX(int index,[指定给的类型] k)将制定位置的参数设置成XXX值
ResultSetexecuteQuery()执行Sql查询,并返回对应的ResultSet结果集
voidsetNull(int index ,int sqlType)设置指定的位置为SQL NUll值
intexecuteUpdate()执行前面包含的参数的动态 [INSERT
voidclearParameters()清楚当前所有参数值

4.CallableStatement接口

CallableStatemnt接口继承并且扩展了PrepareStatemnt接口,用来执行对数据库的存储过程操作;

方法功能描述
set+数据类型将指定参数设置为java中指定的数据类型值
get+数据类型以java中指定类型值的形式获取指定的JDBC中相应参数的类型值

3.ResultSet结果集

所有静态字段

intCLOSE_CURSORS_AT_COMMIT该常量指示提交当前事务时,具有此可保存性的打开的 ResultSet 对象将被关闭
intCONCUR_READ_ONLY该常量指示不可以更新的 ResultSet 对象的并发模式
intCONCUR_UPDATABLE该常量指示可以更新的 ResultSet 对象的并发模式
intFETCH_FORWARD该常量指示将按正向(即从第一个到最后一个)处理结果集中的行。
intFETCH_REVERSE该常量指示将按逆向(即从最后一个到第一个)处理结果集中的行处理。
intFETCH_UNKNOWN该常量指示结果集中的行的处理顺序未知。
intFETCH_UNKNOWN该常量指示提交当前事务时,具有此可保存性的打开的 ResultSet 对象将保持开放
intTYPE_FORWARD_ONLY该常量指示光标只能向前移动的 ResultSet 对象的类型。
intTYPE_SCROLL_INSENSITIVE该常量指示可滚动,再固定条件下可以修改表内容;
intTYPE_SCROLL_SENSITIVE该常量指示可滚动并且,不可修改表内容;

常用方法

返回类型方法功能描述
booleannext()将光标从当前位置向下移动一行,也就是读取下一行
booleanprevious()将光标从当前位置向上移动一行,也就是读取上一行
voidclose()关闭ResultSet对象
intgetInt(int)以int的形式获取结果集,以当前行指定序号的值,以列的编号或者列的名字
intgetInt(String)以下跟以上一样以此类推
floatgetFloat(int)
floatgetFloat(String)
StringgetString(int)
StringgetString(String)
intgetRow()得到光标当前所指定的行号
booleanabsolute(int row)光标移动到row指定的行
booleanrelative(int rows)光标移动到相对于当前行的指定行,上下使用+和-表示

4.JDBC增删改查

增操作(create):

Statement st = conn.createStatement();
String sql = "insert into user(….) values(…..) ";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println("插入成功!!!");

更新操作(update):

Statement st = conn.createStatement();
String sql = “update user set name= ' ' where name= ' ' ";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“修改成功!!!");

删除操作(delete):

Statement st = conn.createStatement();
String sql = “delete from user where id=1”;
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“删除成功!!!");

查操作(read):

Statement st = conn.createStatement();
String sql = “select * from user where id=1;
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
//根据获取列的数据类型,分别调用rs的相应方法映射到java对象中

5.PreparedStatement与Statement

PreparedStatement的优点

1)PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql

2)PreparedStatement可以使用sql缓存区,效率比Statment高

3)PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入。

preparedStatement与Statement区别

PreperedStatement是Statement的子类 ;

它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象 而言:PreperedStatement可以避免SQL注入的问题

Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对 SQL进行预编译,从而提高数据库的执行效率

PreperedStatement对于sql中的参数, 允许使用占位符的形式进行替换;

PreparedStatement 的占位符使用代码实例:

public static void main(String[] args) {
int _id=1;
String _name="张三";
String _gender="男";
Connection con=null;
PreparedStatement ps=null;

try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//使用驱动创建连接
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","123456");
//定义sql语句
String sql="insert into hehe values(?,?,?)";
//创建执行命令对象
ps= con.prepareStatement(sql);
//设置参数
ps.setInt(1, 1);
ps.setString(2,_name);
ps.setString(3, _gender);

//执行命令并接受结果
int result=ps.executeUpdate();
System.out.println(result);

} catch (ClassNotFoundException e) {

e.printStackTrace();
} catch (SQLException e) {

e.printStackTrace();
}finally{
try {
if(null!=ps)
ps.close();
if(null!=con)
con.close();
} catch (SQLException e) {

e.printStackTrace();
}
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值