1......
Driver接口:数据库驱动程序的接口,所有具体数据库厂商需要的驱动程序需要实现次接口。
Connection connect(String url,Properties info)用于获取数据库连接
2.....
|-Connection接口:与具体的数据库的连接对象。
Statement createStatement()创建一个静态sql语句对象
PreparedStatement prepareStatement(String sql)创建预编译的sql语句对象
(存在sql注入漏洞的bug)
3.....
|-Statement接口:用于执行静态SQL语句
int executeUpdate(String sql)执行更新操作的sql语句(create/alter/drop/insert/update/delete)
ResultSet executeQuery(String sql)执行查询操作的sql语句
(select)
(可以防止注入漏洞,对sql语句进行预编译)
|-PreparedStatement接口:用于执行预编译的SQL语句(是Statement的子接口)
int executeUpdate()执行更新操作的sql语句
ResultSet executeQuery()执行查询操作的sql语句
4......
|-ResultSet接口:结果集对象。存储所有数据库查询的结果,用该对象进行数据遍历。
booleannext():把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数据,返回false。
getXXX(列索引|列字段名称):获取字段的数据
i"=��)
第一种连接操作数据库的方法 存在sql注入的风险
第一步: 加载驱动
Class.forName("com.mysql.jdbc.Driver");
第二部:创建链接数据库
Connection conn=driverManger.getConnection(url,user,password);
第三部:创建Statement对象
Statement statement=conn.createStatement();
第四步:创建Sql语句
String sql="sql语句";
第五步:执行sql语句
如果上面的sql语句是DDL. DML语句 就使用如下代码:
statement.executeUpdate(sql); 可以用int类型去接受
如果上面的sql语句是DQL语句,,就是用如下代码:
statement.executeQuery(sql); 可以用int类型区接受
第六步: 关闭
调用close方法 conn statement
if(conn!=null){conn.close()} statement和conn 一样
第二种方法 是用Statement的子接口 PreparedStatement 不会存在sql注入风险
第一步: 加载驱动
Class.forName("com.mysql.jdbc.Driver");
第二步:创建链接数据库
Connection conn=driverManger.getConnection(url,user,password);
第三步:创建sql语句
第四步:创建Preparedstatement对象
Preparedstatement pstat=conn.preparedstatement(sql);
执行DDL,DML语句代码如下
ResultSet rs=pstat.executeupdate(); Result是个集合
执行DQL语句代码如下
ResultSet rs=pstat.executeQuery();
第五步:关闭
ResultSet也需要关闭
conn pstat rs 三个都要关闭
statement 和 Preparedstatement的区别:
1...语法不同
statement:执行的事静态sql语句
Preparedstatement:先执行预编译SQL语句: 可以用 ? 进行参数占位 后面给参数赋值
比如1: String sql="select * from user where uid=?;";
pstat.setInt(1,值);
int是根据sql语句 列字段(Uid)的类型, 1是第几个? 值是填?的
比如2: String sql ="INSERT INTO student(NAME,gender)
VALUES(?,?)";//预编译sql:使用?号代替参数值。一个?号代表一个参数值
2...原理不同
statement:不能进行缓存
Preparedstatement:可以进行缓存,执行效率比statement快
3...安全问题
statement:不能防止sql注入
Preparedstatement:可以防止sql注入
JDBC的批处理:
Statement批处理:
void addBatch(String sql)添加sql到缓存区(暂时不发送)
int[] executeBatch()执行批处理命令。发送所有缓存区的sql
void clearBatch()清空sql缓存区
PreparedStatement批处理:
void addBatch()添加参数到缓存区
int[] executeBatch()执行批处理命令。发送所有缓存区的sql
void clearBatch()清空sql缓存区