JDBC (十二)

目录

JDBC基本概念

 JDBC配置:

JDBC开发步骤:

 1.在数据库中创建要关联的表(Mysql、SQL Server都可以)

2.例子

(1).在student表中查询在IDEA中进行显示

(2).对student进行条件查询

(3).(补充)将 connection , statement , resultSet进行关闭

JDBC接口核心的API

PreparedStatement(预编译)   vs    Statement:


JDBC基本概念

 在JDBC里面,Java这个公司只是提供了一套接口Connection、Statement、ResultSet,每个数据库厂商实现了这套接口,例如MySql公司实现了:MySql驱动程序里面实现了这套接口,Java程序员只要调用实现了这些方法就可以实现对 MySql数据库的增删改查。

 JDBC配置:

如图: 配置进去!!!

JDBC开发步骤:

1、加载驱动Class.forName("");  

2、获得连接对象Connection

3、写sql语句

4、创建Statement(一艘船)

5、执行sql语句

     (1) 更新类(更改了表里面数据):delete/update/insert     executeUpdate()

           返回值:int,表示你影响的行数

      (2)查询(没有改变表里面数据):  select                              executeQuery()

           返回值:结果集ResultSet

6、关闭连接

 1.在数据库中创建要关联的表(Mysql、SQL Server都可以)

CREATE  TABLE  users(
     id  INT  PRIMARY  KEY  AUTO_INCREMENT,
     ` name VARCHAR (10),
     ` password VARCHAR (10)
);
INSERT  INTO  users(` name `, ` password `)  VALUES ( 'lisi' ,123);
SELECT  FROM  users  WHERE  1=1;   -- 1=1   true
SELECT  FROM  users  WHERE  ` name `= 'lisi'  AND  ` password `= '123' ;
--  zhangsan' OR 1=1 -- y 
SELECT  FROM  users  WHERE  ` name `='zhangsan ' OR 1=1 -- y'  AND  ` password `= '343' ;

2.例子

(1).在student表中查询在IDEA中进行显示

@Test
public void test1() {
try {
// 1、加载驱动Class.forName("");
Class.forName("com.mysql.jdbc.Driver");
// 2、获得连接对象Connection
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/java?useUnicode=true&characterEncoding=UTF-8", "root", "1234");
// 3、写sql语句
String sql = "SELECT id,`name`,age,gender FROM student";
// 4、创建Statement(一艘船)
Statement statement = connection.createStatement();
// 5、执行sql语句
// (1) 更新类(更改了表里面数据):delete/update/insert executeUpdate()
// 返回值:int,表示你影响的行数
// (2)查询(没有改变表里面数据): select executeQuery()
// 返回值:结果集ResultSet
ResultSet resultSet = statement.executeQuery(sql);
ArrayList<Student> list = new ArrayList<>();
// next()方法判断下一行有没有,如果有指向下一行
while (resultSet.next()) {
// 每遍历一次循环,就拿出数据库查询结果里面的一行记录,就是一个学生的信息,
// 就可以封装成一个Student对象
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String gender = resultSet.getString("gender");
Student student = new Student(id, name, age, gender);
list.add(student);
}
for (Student student : list) {
System.out.println(student);
}
// 6、关闭连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}

(2).对student进行条件查询

@Test
public void test2() {
int selectId =15;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/java?useUnicode=true&characterEncoding=UTF-8", "root", "1234");
String sql = "SELECT id,`name`,age,gender FROM student WHERE id >= ?";
// PreparedStatement 使用预编译的sql
PreparedStatement statement = connection.prepareStatement(sql);
// 填上?占位符的值
statement.setInt(1, selectId);
System.out.println(statement);
ResultSet resultSet = statement.executeQuery();
ArrayList<Student> list = new ArrayList<>();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String gender = resultSet.getString("gender");
Student student = new Student(id, name, age, gender);
list.add(student);
}
for (Student student : list) {
System.out.println(student);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}

(3).(补充)将 connection , statement , resultSet进行关闭

@Test
public void test2() {
int selectId =15;
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/java?useUnicode=true&characterEncoding=UTF-8", "root", "1234");
String sql = "SELECT id,`name`,age,gender FROM student WHERE id >= ?";
// PreparedStatement 使用预编译的sql
statement = connection.prepareStatement(sql);
// 填上?占位符的值
statement.setInt(1, selectId);
System.out.println(statement);
resultSet = statement.executeQuery();
ArrayList<Student> list = new ArrayList<>();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
String gender = resultSet.getString("gender");
Student student = new Student(id, name, age, gender);
list.add(student);
}
for (Student student : list) {
System.out.println(student);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
// 先打开的后关闭
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}

JDBC接口核心的API

|- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序

            |-registerDriver(driver) : 注册驱动类对象

            |-Connection getConnection(url,user,password); 获取连接对象

|- Connection接口: 表示java程序和数据库的连接对象。

            |- Statement createStatement() : 创建Statement对象

            |- PreparedStatement prepareStatement(String sql) 创建PreparedStatement对象

            |- CallableStatement prepareCall(String sql) 创建CallableStatement对象(调用写好的存储过程)

|- Statement接口: 用于执行静态的sql语句

              |- int executeUpdate(String sql) : 执行静态的更新sql语句

              |- ResultSet executeQuery(String sql) :执行的静态的查询sql语句

       |-PreparedStatement接口:用于执行预编译sql语句

              |- int executeUpdate() : 执行预编译的更新sql语句

              |-ResultSet executeQuery() : 执行预编译的查询sql语句

|- ResultSet接口:用于封装查询出来的数据

         |- boolean next() : 将光标移动到下一行

         |-getXX() : 获取列的值

PreparedStatement(预编译)   vs    Statement:

1、语法不同:

PreparedStatement可以使用预编译的sql,只需要发送一次sql语句,后面只要发送参数即可,公用一个sql语句。

Statement只能使用静态的sql。 

delete from student where id=1;

2、效率不同:PreparedStatement使用了sql缓冲区,效率要比Statement高。

3、安全性不同:PreparedStatement可以有效的防止sql注入,而Statement不能防止sql注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值