jdbc

Posted on 2023-06-28 19:14  liuxin6de1b  阅读(24)  评论(0编辑  收藏  举报

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());
}(循环遍历集合,一个个从集合中拿出来)
}
}

 

利用jdbc进行登录

package Demo4.demo2;
import Demo4.Demo1.User;
import java.sql.*;
public class Text {
    public User show(User u){     类型为封装类 参数列表是new 一个封装类
        User uuuu =null;   

        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
          conn = DriverManager.getConnection("jdbc:mysql://localhost/db_29", "root", "123456");
          ps = conn.prepareStatement("SELECT * from user where name=? and pwd=?");在数据库里查找名字和密码
          ps.setObject(1,u.getName());这个名字和密码是参数列表里的new User赋予的
          ps.setObject(2,u.getPwd());
          rs = ps.executeQuery();
          while(rs.next()){
              uuuu=new User();
              uuuu.setId(rs.getInt("id"));
              uuuu.setName(rs.getString("name"));
              uuuu.setNickname(rs.getString("nickname"));
              uuuu.setPwd(rs.getString("pwd"));
          }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return uuuu; 返回User user =null
    }
}

package Demo4.demo2;

import Demo4.Demo1.User;
import org.junit.Test;

public class Text1 {
    @Test
            public void show1() {
        Text text = new Text();
        User user = new User();

        user.setName("zs");给封装类赋值
        user.setPwd("1234");
       user=text.show(user);赋的值在传给参数列表
if (user!=null){
    System.out.println("登录成功");
}else{
    System.out.println("登陆失败");
}
    }
}

jdbc实现注册

public Integer show3(User u){ 目前增删改返回值类型均为Integer
        Integer flag=0;
        Connection conn=null;
        PreparedStatement ps=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost/db_29", "root", "123456");
            ps = conn.prepareStatement("insert into user(name,pwd,nickname)value (?,?,?)");
            ps.setObject(1,u.getName());
            ps.setObject(2,u.getPwd());
            ps.setObject(3,u.getNickname());
            flag =ps.executeUpdate();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                ps.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return flag;
    }

}

public void show2() {
    Text text = new Text();
    User user = new User();

user.setName("zs");
    user.setPwd("1234");
    user.setNickname("8888");
    Integer flag=text.show3(user);
    if (flag>0){
        System.out.println("注册成功");
    }else{
        System.out.println("注册失败");
    }
}
}

 

Copyright © 2024 liuxin6de1b
Powered by .NET 9.0 on Kubernetes