Java学习--初学JDBC

一、JDBC

1.基础知识

JDBC全称为:Java Database Connectivity, 即Java数据库连接
它是java语言操作数据库的 api (应用程序编程接口)
java.sql.*

接口

Connection 连接 代表了java和数据之间的通道,桥梁
Statement 语句 可以用来执行 insert, update, delete , select …
ResultSet 结果集 代表的是查询的结果

DriverManager 工具类,获取连接对象
SQLException 异常对象 是 Exception的子类型,属于检查异常

2.操作步骤顺序

1) 加载驱动 (Driver)

jdbc的驱动就是一个连接工厂,生成的产品是连接对象
com.mysql.jdbc.Driver 是Driver的mysql实现类
oracle.jdbc.Driver 是Driver的oracle实现类

   Class.forName("驱动类名");
   例如:
   Class.forName("com.mysql.jdbc.Driver");

jdbc 3.0 以上版本都可以省略加载驱动这一步

2) 获取连接对象

   DriverManager.getConnection(url, 用户名, 密码); // 内部调用了  Driver 对象获取数据库连接

url 的格式 :

jdbc:mysql://ip地址:端口号/数据库名?参数

例如:mysql数据库

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

3) 创建语句

Statement stmt = conn.createStatement();

4) 执行sql

int rows = stmt.executeUpdate(); // 用来执行 insert , update, delete , DDL , 返回值代表影响行数
// delete from student where sid = 1008;  返回影响行数是0;

ResultSet rs = stmt.executeQuery(); // 用来执行 select
boolean moreRows = rs.next() 取得下一条记录, 
moreRows 是true ,表示有下一条记录, false 表示没有了
while(rs.next()) {

}
// 迭代器模式

5) 释放资源 ( 先打开的资源后关闭 )

rs.close();
stmt.close();
conn.close();

二、PreparedStatement 预编译语句对象

Statement stmt = conn.createStatement();
stmt.executeUpdate(String sql);

1. 需要预先提供sql语句

PreparedStatement psmt = conn.prepareStatement(String sql);

2. 可以在sql中用?占位某个值

insert into student(sid,sname,birthday,sex) values(null, ?, ?, ?)

3. 给?赋值

使用PreparedStatement中一系列以 set开头的方法
setString(?的位置,)
setInt(?的位置,)
setDate(?的位置,)

psmt.setString(1, "李四");
psmt.setString(2, "1999-9-7");

4. 执行sql

psmt.executeUpdate();

注意: ?能够占位的只有值, 不能是表名、列名、关键字

SQL注入攻击

create table user (
    username varchar(20) primary key,
    password varchar(20)
);
insert into user(username, password) values('zhangsan','123');

防范方法:

  1. 对参数内存做检查,内部不能有sql关键字例如:or
  2. PreparedStatement

获取自增的主键值

获取自增列的值 (只有在新增数据时execuUpdate才有返回值使用Statement.RETURN_GENERATED_KEYS)

Statement stmt = conn.createStatement();
String sql = "insert into student(sid,sname,birthday,sex) values (null,'张三','1999-1-1','男')";
stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
System.out.println(rs.getInt(1));

猜你喜欢

转载自blog.csdn.net/lyf_0922/article/details/86485629