杜绝熬夜

导航

JDBC:(java database Connection) java数据库连接。

JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。

JDBC连接步骤:

  1.先导入jar包,把jar放入到工程下并 add Libar ay
  2.加载驱动 Class.forName("com.mysql.jdbc.Driver");
  3.获取连接对象 Connection connection=DriverManger.getConnection(url,user,password);
  4.获取执行sql语句的对象: Statement

1. 如何防止被sql注入

  1.什么是sql注入 ---> sql拼接安全问题

  statement存在sql注入问题 : 因为它的sql字符串拼接

  解决方案 : 使用PrepareStatement来进行sql的预编译

2.常见的JDBC组件

JDBC 的 API 提供了以下接口和类:

DriverManager :这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。

Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。

Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,即,所有与数据库的通信仅通过这个连接对象进行。

Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。

ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。

SQLException : 这个类处理发生在数据库应用程序的任何错误。

 

3.代码演示

下面是我的代码举例:

1.首先要创建一个后缀为 properties 的文件,(注意必须要写在src路径下) 写入硬编码,目的是为了程序日后有变动的话直接在这个文件中更改,源代码保持不动。

url=jdbc:mysql://localhost:3306/abc?  
serverTimezone=Asia/Shanghai
user=root
password=123@qwe
drivername=com.mysql.cj.jdbc.Driver

//都是以键值对的形式,(注意:这里面不需要在每段代码结尾加 ; )
//url = jdbc:mysql://路径(端口)/库名?serverTimezone(时区)=Asia(亚洲)/Shanghai
//user=(mysql账号)
//password=(mysql密码)
//drivername(这个可以自行定义)=com.mysql.cj.jdbc.Driver(这个路径是导入jar包的路径)

 

2.创建实体类  包名命名为 entiy(实体)

 1 public class User3 {
 2     private Integer id;
 3     private String name;
 4     private String password;
 5 
 6     public Integer getId() {
 7         return id;
 8     }
 9 
10     public void setId(Integer id) {
11         this.id = id;
12     }
13 
14     public String getName() {
15         return name;
16     }
17 
18     public void setName(String name) {
19         this.name = name;
20     }
21 
22     public String getPassword() {
23         return password;
24     }
25 
26     public void setPassword(String password) {
27         this.password = password;
28     }
29 
30     @Override
31     public String toString() {
32         return "User3{" +
33                 "id=" + id +
34                 ", name='" + name + '\'' +
35                 ", password='" + password + '\'' +
36                 '}';
37     }
38 }

3.建立util包,里面建立BaseDao类

-类作用主要用于将UserDao3类中的重复代码进行提取,提高效率;实现代码简洁。

 1  public Connection connection;
 2     public PreparedStatement ps;
 3     public ResultSet resultSet;
 4 
 5     private static String url;
 6     private static String user;
 7     private static String password;
 8     private static String drivername;
 9 
10     static{
11         try {
12         //先建立输入流 创建properrties对象 加载资源流
13         InputStream  resourceAsStream = BaseDao3.class.getResourceAsStream("/db2.properties");
14         Properties properties = new Properties();
15             properties.load(resourceAsStream);
16             //导入数据
17             url = properties.get("url").toString();
18             user = properties.get("user").toString();
19             password = properties.get("password").toString();
20             drivername=properties.get("drivername").toString();
21             //加载驱动(驱动只需要加载一次就可以了)
22             Class.forName(drivername);
23 
24         } catch (Exception e) {
25             e.printStackTrace();
26         }
27 
28     }
29 
30     public void getconnection(){ //建立连接方法
31         try {
32             connection = DriverManager.getConnection(url,user,password);
33         } catch (Exception throwables) {
34             throwables.printStackTrace();
35         }
36     }
37 
38     public int  change(String sql,Object... arg){ //增删改方法
39         try {
40             getconnection();
41             ps=connection.prepareStatement(sql);//预编译
42             for(int index=0;index<arg.length;index++){
43                 ps.setObject(index+1,arg[index]);
44             }
45             int row =ps.executeUpdate(); //执行更新
46             return row;
47         } catch (Exception throwables) {
48             throwables.printStackTrace();
49         }finally{
50             closeAll();
51         }
52         return 0;
53     }
54 
55 
56     public void closeAll() { //关闭连接, 从内往外关闭
57         try {
58             if (resultSet != null) { resultSet.close(); }
59             if (ps != null) { ps.close(); }
60             if (connection != null) { connection.close(); }
61         }catch(Exception e){
62             e.printStackTrace();
63         }
64     }

 

 

4.创建实体类后紧跟要创建实体类Dao, 上面我的实体类名为 user3  那么Dao类名就可以为 user3Dao

  Dao方法用来建立连接mysql数据库,实现程序连接数据库功能。

  里面写入方法,需求(增删改查)

public class UserDao3 extends BaseDao3 { //继承刚才写好的BaseDao父类
    //添加数据
    public int insert(User3 user3){
        String a="insert into user (id,name,password) values (?,?,?)";
        return change(a,user3.getId(),user3.getName(),user3.getPassword());
    }

    //使用list遍历表中数据
    public List<User3> select(){
        List<User3> list =new ArrayList<>();

        try {
            getconnection();
            String a ="select * from user";
            ps=connection.prepareStatement(a);
            resultSet = ps.executeQuery();
            while(resultSet.next()){
                User3 user3 =new User3();
                user3.setId(resultSet.getInt(1));
                user3.setName(resultSet.getString(2));
                user3.setPassword(resultSet.getString(3));
                list.add(user3);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return list;
    }

    public int update(User3 user3){ //修改数据库表中数据
        String a ="update user set password=? where id=?";
        return change(a,user3.getPassword(),user3.getId());
    }

    public int delete(User3 user3){ //删除表中数据
        String a = "delete from user where id=?";
        return change(a,user3.getId());
    }
}

 

 

posted on 2021-10-25 11:39  咸鱼乔  阅读(113)  评论(0编辑  收藏  举报