jdbc

发布时间 2023-06-28 19:20:12作者: liuxin6de1b

1.jdbc的定义:java连接数据库进行数据的传递和交互

2.为什么需要jdbc:利用jdbc才可以使服务器端和数据库进行数据的传递和交互

jdbc场景1:客户端==>(本机+应用服务器) jdbc==》数据库

jdbc场景2:本机==》访问==》应用程序==》jdbc==》数据库《==jdbc
3.jdbc的工作原理

java连接数据库的步骤

java应用程序编写代码

调用jbdc api 接口或是类,加载jdbc的驱动(jar包)

调用数据库并测试

jdbc api接口的种类

Drivermanger 类

connerction接口

staterment接口

Resultset接口

4.jdbc api

jdbc api的核心作用:连接数据库,执行sql语句,保存结果

jdbc api执行顺序:

Drivermanager管理驱动

创建连接对象connection

使用statement对象执行sql语句

调用resultset对象保存查询结果(查询才会使用得到resultset)

5.jdbc编程模板

Class. forName("com.mysql.cj.jdbc.Driver")加载驱动。

Connection conn= DriverManager . getConnection("jdbc:mysql://localhost:3306/数据库名","root","123456")与数据库加载连接

PrepareStatement ps= con . prepareStatement("定义sql语句,增删改查")

{增:insert into 表名 (要增加的属性名) value(?[有几个属性就有就几个问号])                      删:delete from 表名 where id=?

改:update 表名set 属性名=?where 属性名=?     }

ps.setObject(1,2)代表第一个?是2

ResultSet rs=ps.executeQuery(在查询中使用)

ps.executeUpdate(在增删改中使用,使用后释放资源即完成)

查询对象则需进行定义对象,先循环遍历,

while(rs.next()){

User user =new User();(这里定义对象放在循环内还是循环外都可以。但是集合不行)

user.setId(rs.getInt("id"));

......}

遍历结束后既可以进行输出了

sout(user.getId){这是查询对象}

下面是查询集合

查询集合首先创建一个集合ArrayList<类名>list=new ArrayList<>();

后面到rs=ps.executeQuery();都一样。

进入循环

while(rs.next()){

User user=new User();(集合的定义对象只能在循环中进行)

user.setId(rs.getInt("id"));循环遍历集合中的值

list.add(user);

}

释放资源

先开的后关,后开的先关

用增强for循环进行输出

for(User u:list){

sout(u.getId())

}

模糊查询与集合查询基本一致。模糊查询的sql语法是(select *from 表名 where 属性名 like concat (‘%‘,?,‘%’))意思是,查询数据库中属性名的属性值中出现?(?占位符)的一行

我们可以用测试用例代替main函数

输入@Test

然后直接写方法。方法中再写上面的增删改语句、

jdbc的编程步骤

1.注册JDBC驱动

2.管理连接

3.创建PreparedStatement对象-预编译对象

为什么不用statement对象?因为statement对象有sql注入的问题,sql注入是sql中的安全性问题

4.发送SQL语句,并得到返回结果

5.处理返回结果

6.释放资源

多表查询

当有两个表时。我们可以通过给a表添加能关联b表的属性名。让两个表在逻辑上关联

先将两个表中有的属性名进行封装

在a的封装中添加b的属性名并封装。a的属性名不得与b的属性名重复

package Demo1.Text;
import Demo1.User.User1;
import org.junit.Test;
import java.sql.*;
import java.util.ArrayList;
public class Demo {
@Test测试用例
public void show(){
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
ArrayList<User1> list = new ArrayList<>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_jdbc", "root", "123456");
ps = conn.prepareStatement("select users.*,book.id as bookid,book.name as bookname,book.author from users,book where users.bookid=book.id ");
(users.*代表所有的属性和属性值)更改属性名。id和name a和b都有。这里要用a的封装最后进行输出,就要把b的属性名改成bookid或者bookname a在封装时用被改过的属性名封装
            rs = ps.executeQuery();
while(rs.next()){
User1 user1=new User1();
user1.setId(rs.getInt("id"));
user1.setName(rs.getString("name"));
user1.setPassword(rs.getString("password"));
user1.setAge(rs.getInt("age"));
user1.setSex(rs.getString("sex"));
user1.setNickname(rs.getString("nickname"));
user1.setUsertype(rs.getString("usertype"));
user1.setBookid(rs.getInt("bookid"));
user1.setBookname(rs.getString("bookname"));
user1.setAuthor(rs.getString("author"));
list.add(user1);
}(循环遍历输入到集合中)
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
for (User1 u:list){
System.out.println(u.getId());
System.out.println(u.getName());
System.out.println(u.getNickname());
System.out.println(u.getAge());
System.out.println(u.getPassword());
System.out.println(u.getSex());
System.out.println(u.getUsertype());
System.out.println(u.getBookid());
System.out.println(u.getBookname());
System.out.println(u.getAuthor());
}(循环遍历集合,一个个从集合中拿出来)
}
}