jdbc笔记

数据库驱动:

数据库厂商为了方便开发人员从程序中操作数据库而提供的一套jar包,通过导入这个jar包就可以调用其中的方法操作数据库,这样的jar包就叫做数据库驱动


六个步骤实现JDBC: 
//1.注册数据库驱动 
DriverManager.registerDriver(new Driver()); 
l在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:
一、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
二、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦

•推荐方式:Class.forName(“com.mysql.jdbc.Driver”);
•采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。

//2.获取数据库连接 
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/day10”, “root”, “root”); 
jdbc: mysql:[] //localhost:3306/ test 
协议 子协议 主机:端口 数据库
l常用数据库URL地址的写法:
Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
SqlServer—jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
MySql—jdbc:mysql://localhost:3306/sid

connection对象常用方法
•createStatement():创建向数据库发送sql的statement对象。
•prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
•prepareCall(sql):创建执行存储过程的callableStatement对象。
•setAutoCommit(boolean autoCommit):设置事务是否自动提交。
•commit() :在链接上提交事务。
•rollback() :在此链接上回滚事务


//3.获取传输器对象 
Statement stat = conn.createStatement(); 

lStatement对象常用方法:
•executeQuery(String sql) :用于向数据发送查询语句。
•executeUpdate(String sql):用于向数据库发送insert、update或delete语句
•execute(String sql):用于向数据库发送任意sql语句
•addBatch(String sql) :把多条sql语句放到一个批处理中。
•executeBatch():向数据库发送一批sql语句执行。


//4.利用传输器传输sql语句到数据库中执行,获取结果集对象 
ResultSet rs = stat.executeQuery(“select * from user”); 

lJdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的 游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
lResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
•获取任意类型的数据
•getObject(int index)
•getObject(string columnName)
•获取指定类型的数据,例如:
•getString(int index)
•getString(String columnName)


//5.遍历结果集获取查询结果 
while(rs.next()){ 
String name = rs.getString(“name”); 
System.out.println(name); 
ResultSet还提供了对结果集进行滚动的方法:
•next():移动到下一行
•Previous():移动到前一行
•absolute(int row):移动到指定行
•beforeFirst():移动resultSet的最前面。
•afterLast() :移动到resultSet的最后面。

//6.关闭资源 
rs.close(); 
stat.close(); 
conn.close();

SQL注入攻击:
由于dao中执行的SQL语句是拼接出来的,其中有一部分内容是由用户从客户端传入,所以当用户传入的数据中包含sql关键字时,就有可能通过这些关键字改变sql语句的语义,从而执行一些特殊的操作,这样的攻击方式就叫做sql注入攻击
PreparedStatement利用预编译的机制将sql语句的主干和参数分别传输给数据库服务器,从而使数据库分辨的出哪些是sql语句的主干哪些是参数,这样一来即使参数中带了sql的关键字,数据库服务器也仅仅将他当作参数值使用,关键字不会起作用,从而从原理上防止了sql注入的问题
PreparedStatement主要有如下的三个优点:
~1.可以防止sql注入
~2.由于使用了预编译机制,执行的效率要高于Statement
~3.sql语句使用?形式替代参数,然后再用方法设置?的值,比起拼接字符串,代码更加优雅.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值