IDEA下创建JAVA项目,使用JDBC连接数据库完成数据的增删改查

创建项目前的准备工作
1.软件IDEA
2.安装了数据库mysql
3.mysql数据库连接驱动jar包

一.现在我们开始在IDEA下创建Java项目
1.首先点击Create New Project
2.在点击Java,点击Next,再点击Next
3.最后给项目起个名字,点击Finish完成项目创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二:数据库连接Jar包导入并且加载到项目中:
1.右键点击项目名依次点击new–>Directory 创建文件夹lib
2.把mysql-connector-java-5.1.48-bin.jar包粘贴到lib目录中
3.把数据库连接jar包导入到项目中
在这里插入图片描述在这里插入图片描述注意的是未导入到项目前,点击mysql-connector-java-5.1.48-bin.jar是不会出现任何子文件夹。接下来完成第3步,我们要右键点击该jar包,再点击Add as Library,最后点击OK即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这时我们可以点击mysql-connector-java-5.1.48-bin.jar,并且可以看到内部的子文件,说明jar包导入项目成功。

三.书写Java代码,连接数据库且完成增删改查
1.在src文件夹下创建JDBCTEST文件夹,并且创建名为Test的类
2.运行数据库java代码放到该类中(对应代码做了注释)
3.点击运行查看结果
在这里插入图片描述
代码如下:

package JDBCTEST;

import java.sql.*;

public class Test {
    public static void main(String[] args) {
        //  加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接
            String url = "jdbc:mysql://localhost:3306/usejdbc?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            String user = "root";
            String password = "123456";

            try {
                //  连接对象输入三个参数
                Connection connection = DriverManager.getConnection(url, user, password);
                System.out.println(connection);
                //定义sql语句
                // 插入
                String sql = "insert into student(username,password) values ('王五','111111')";

//                Statement statement = connection.createStatement();
//                int count = statement.executeUpdate(sql);
//                System.out.println(count);
//------------------------------------------------------------
//                查询
                String sql1 = "select * from student";
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery(sql1);
                System.out.println(resultSet);

                while(resultSet.next()){
//                    下标或者字段
                    int id = resultSet.getInt("id");
                    String username = resultSet.getString("username");
                    String password1= resultSet.getString(3);
                    System.out.println(id+"-"+username+"-"+password1);
                }

//   ----------------------------------------------------------------

//                释放资源
                statement.close();
                connection.close();
                resultSet.close();

            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }



    }
}

点击运行按钮,控制台输出如下的结果:查询后台数据表内的数据:
在这里插入图片描述
在这里插入图片描述
4.JDBC使用步骤
1.加载数据库的驱动,它是java和数据库之间的桥梁
2.获取Connection,java和数据库的一次连接
3.创建Statement对象,由Connection产生,执行sql语句
4.如果要接收返回值,创建ResultSet对象,保存Statement执行后所查到的结果

  // 获取连接
            String url = "jdbc:mysql://localhost:3306/usejdbc?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            String user = "root";
            String password = "123456";

解释:
localhost :IP地址(本地)
3306:端口号
usejdbc 数据库名
useUnicode=true&characterEncoding=UTF-8 防止中文乱码
&useSSL=false 高版本mysql要添加(5.0以上)
String user = “root”; 数据库登录账号(默认root)
String password = “123456”;(数据库设置的密码)

5.数据库的增删改查
首先数据库的增删改查代码都大体相同,不同的仅仅是sql语句和statment执行对象有一些变化。
(1)增,删,改:
int count = statement.executeUpdate(sql);
(2)查:
ResultSet resultSet = statement.executeQuery(sql);
有人会问为啥增删改查不能调用一个方法呢。那是因为增删改会对数据产生影响·,查不会改变数据,因此用到两个不同方法。以后遇到增删改就用方法(1),查询就用方法(2)。
(3)我们首先从增删改开始(代码如下):

package cn.web.jdbc;

import java.sql.*;

public class executeUpdate {
    public static void main(String[] args) {
        //  加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接
            String url = "jdbc:mysql://localhost:3306/usejdbc?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            String user = "root";
            String password = "123456";
            try {
                //  连接对象输入三个参数
                Connection connection = DriverManager.getConnection(url, user, password);
                System.out.println(connection);
                //定义sql语句
                // 增
                String sql1 = "insert into student(username,password) values ('诸葛亮','111111')";
                // 删
                String sql2 = "delete from student where username ='诸葛亮'";
                // 改
                String sql3 = "update student set  username='老八' where id = 1 ";

                Statement statement = connection.createStatement();
//                修改这里的sql即可
                int count = statement.executeUpdate(sql1);
                System.out.println(count);
//   ----------------------------------------------------------------
//                释放资源
                statement.close();
                connection.close();
                resultSet.close();

            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }



    }
}

我们只需要替换上述代码第28行的.executeUpdate( )括号内部的sql语句就可完成数据库的增删改。
sql1:完成数据的插入;
sql2:完成数据的删除;
sql3:完成数据的修改;
在这里插入图片描述
(sql1,sql2,sql3)三步依次完成后数据表的结果是(用的是Navicat查看student表数据):
在这里插入图片描述
(4) 最后的查询就模拟用户登录来结束(代码如下):

package cn.web.jdbc;

import java.sql.*;

public class UserLogin {
    public static void main(String[] args) {
        //  加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接
            String url = "jdbc:mysql://localhost:3306/usejdbc?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            String user = "root";
            String mysqlPassword = "123456";
            //模拟前台传入的用户名和密码
            String InputUsername = "老八";
            String InputPassword = "123456";

            try {
                //  连接对象输入三个参数
                Connection connection = DriverManager.getConnection(url, user, mysqlPassword);
                System.out.println(connection);
                //定义sql语句
//                查询
                String sql1 = "select * from student where username='" + InputUsername + "' and password='" + InputPassword + "'";
                System.out.println(sql1);
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery(sql1);
                System.out.println(resultSet);
                if (resultSet.next()) {
                    System.out.println("登录成功");
                } else {
                    System.out.println("登录失败");
                }
//                释放资源
                statement.close();
                connection.close();
 				resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}



控制台输出结果:
在这里插入图片描述
6.最后来说说sql的注入问题

如果将上述登录代码的15行,16行修改为下图所示的样子:
在这里插入图片描述
会发现无论红线内的文字我们写什么,运行java代码都会显示查询成功。
修改后的java代码入下:

package cn.web.jdbc;
import java.sql.*;

public class UserLogin {
    public static void main(String[] args) {
        //  加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接
            String url = "jdbc:mysql://localhost:3306/usejdbc?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            String user = "root";
            String mysqlPassword = "123456";

//          String InputUsername = "老八";
//          String InputPassword = "123456";

            String InputUsername = "我不是用户";
            String InputPassword = "8888' or '1' ='1";

            try {
                //  连接对象输入三个参数
                Connection connection = DriverManager.getConnection(url, user, mysqlPassword);
                System.out.println(connection);
                //定义sql语句
//                查询
                String sql1 = "select * from student where username='" + InputUsername + "' and password='" + InputPassword + "'";
                System.out.println(sql1);
                Statement statement = connection.createStatement();
                ResultSet resultSet = statement.executeQuery(sql1);
                System.out.println(resultSet);
                if (resultSet.next()) {
                    System.out.println("登录成功");
                } else {
                    System.out.println("登录失败");
                }

//                释放资源
                statement.close();
                connection.close();
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

我们会发现原始的JDBC有两个缺点:
(1)复杂的sql字符串拼接;
在上面select 的sql语句:
仅仅两个参数就比较复杂,而且还要注意单引号,这会让我们很容易写错sql语句(如下图)在这里插入图片描述
(2)sql注入问题;
利用某些系统没有对用户输入的信息充分检测,在用户的数据中注入非法的SQL语句,从而利用系统的SQL引擎完成恶意的行为做法。说白了就是通过mysql语句本身的漏洞。在控制台输出sql语句发现无论前面你写什么,后面的 or ‘1’ =‘1’ 一定成立。这也是字符串不当的拼接导致的。
在这里插入图片描述
如何解决上述两个困扰:可以使用Statement 的一个子类PreparedStatement,提供SQL占位符功能。
代码如下:

package cn.web.jdbc;

import java.sql.*;

public class EscJdbc {
    public static void main(String[] args) {
        //  加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接
            String url = "jdbc:mysql://localhost:3306/usejdbc?useUnicode=true&characterEncoding=UTF-8&useSSL=false";
            String user = "root";
            String mysqlPassword = "123456";


            String InputUsername = "张三";
            String InputPassword = "8888' or '1' ='1";

            try {
                //  连接对象输入三个参数
                Connection connection = DriverManager.getConnection(url, user, mysqlPassword);
                System.out.println(connection);
                //定义sql语句
//                查询
               String sql = "select * from student where username=? and password=?";

               PreparedStatement preparedStatement = connection.prepareStatement(sql);
               preparedStatement.setString(1,InputUsername);
               preparedStatement.setString(2,InputPassword);

                ResultSet resultSet = preparedStatement.executeQuery();
                System.out.println(resultSet);
                if (resultSet.next()) {
                    System.out.println("登录成功");
                } else {
                    System.out.println("登录失败");
                }
                
//                释放资源
                preparedStatement.close();
                connection.close();
                resultSet.close();

            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}


解释(仅仅修改了4行代码):
在这里插入图片描述
① 把用户名和密码用问号代替,这就避免了字符串的拼接;
② 执行sql对象
③ 第一个问号填补字符串 : “张三”
④ 第二个问号填补字符串 : “8888’ or ‘1’ ='1”
有几个问号就添加几个数据,保持sql语句完整,同时也防止了sql的注入问题。那是因为该方法会把密码为:“8888’ or ‘1’ ='1” 和后台数据库密码那一栏的数据进行一一比对,如下图的 密码 123456 会和密码 “8888’ or ‘1’ ='1” 进行比对明显二者是不一致。
运行程序,控制台会输出登录失败在这里插入图片描述

最后,我会把这个小模块的源代码以及涉及的数据库连接jar包,数据库管理工具Navicat(破解)放在百度网盘大家可根据需求自行下载
点击:点击获取
提取码:4sn9

  • 13
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java Web连接数据库增删改查相关操作需要使用JDBC和ORM框架。JDBCJava访问关系型数据库的API接口,通过JDBC我们可以用Java代码连接关系型数据库服务器,执行SQL语句、获取查询结果等。ORM(Object-Relational Mapping)则是对象关系映射,通过ORM框架的映射绑定方式直接使用Java对象操作数据库,方便快捷。在使用的过程需要注意数据库事务控制和连接池等问题,避免数据库连接过度占用资源。 ### 回答2: Java Web IDE是一个强大的开发工具,它能够在Web平台上创建和管理Java应用程序。登录连接数据库增删改查Java Web应用程序最常用的一种功能,它使用户能够在应用程序操作数据数据Java Web应用程序可以使用多种技术来连接数据库,如Java Database Connectivity(JDBC)和Object-relational Mapping(ORM)框架。其JDBC是最基础的技术,ORM框架则提供更高层次的抽象和便利。 下面将从JDBC和ORM框架两个方面介绍如何在Java Web IDE实现登录连接数据库增删改查。 一、使用JDBC连接数据库实现增删改查 1. 导入JDBC驱动程序Java Web项目使用JDBC连接数据库需要导入对应的JDBC驱动程序,比如MySQL驱动、Oracle驱动等。导入驱动包后,需要将驱动注册到程序。 2. DatabaseUtils类 创建DatabaseUtils类来操作数据库,并定义静态方法getConnection()获取数据库连接。在getConnection()使用驱动程序的DriverManager类获取数据库连接。 3. 增删改查操作 在DatabaseUtils类定义各种增删改查操作的方法,比如insert()、delete()、update()和select()方法。在这些方法通过Connection对象创建PreparedStatement对象,设置SQL语句并执行,然后返回结果集。 二、使用ORM框架连接数据库实现增删改查 1. 导入ORM框架 在Java Web项目使用ORM框架连接数据库需要导入对应的ORM框架,比如Hibernate、MyBatis等。导入框架后,需要配置Hibernate.cfg.xml文件或MyBatis.xml文件。 2. 与数据库交互 在Java Web项目,可以通过Hibernate的Session对象或MyBatis的SqlSession对象来与数据库交互。在实现增删改查操作时,需要创建对应的POJO类和映射文件,比如User类和User.hbm.xml或User.xml文件。这些文件定义了Java对象与数据库表之间的映射关系。 3. 增删改查操作 在Java Web项目,通过操作Session对象或SqlSession对象来实现各种增删改查操作。比如通过Hibernate的Session对象的save()方法来实现插入操作;通过MyBatis的SqlSession对象的insert()方法来实现插入操作。 总之,无论是使用JDBC还是ORM框架,都需要对Java Web应用程序进行详细的设计和开发。增删改查功能只是应用程序的一部分,需要在整个应用程序进行适当的集成和开发。 ### 回答3: Java Web IDEA 是一款基于 Java Web 技术的集成开发环境,开发者可以利用该工具快速实现 Web 应用程序的开发和部署。在 Web 应用程序开发过程数据库是非常重要的一环,因为应用程序需要通过数据库存储和管理数据。因此,在 Java Web IDEA ,如何登录连接数据库、进行增删改查是非常重要的技能。 Java Web IDEA 的登录连接数据库有多种方式,其最常用的方式是使用 JDBC API 来连接数据库JDBC(Java DataBase Connectivity) 是 Java 数据库连接 API 的标准规范,开发者可以通过 JDBC API 来连接不同的数据库,并进行数据操作。使用 JDBC API 连接数据库的过程如下: 1. 加载数据库驱动程序Java Web 项目使用 JDBC API 前,需要先加载数据库驱动程序,常见的 JDBC 驱动程序MySQL、Oracle、MSSQL 等。加载驱动程序的方法如下: Class.forName("com.mysql.jdbc.Driver"); 2. 创建数据库连接 使用 DriverManager 类的 getConnection() 方法来创建数据库连接对象,并指定连接参数,例如 URL、用户名和密码等。示例代码如下: Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); 其,test 为数据库名称,root 为用户名,password 为密码。 3. 创建 SQL 语句 在 Java Web IDEA ,可以使用 SQL 语句来对数据库进行增删改查操作。例如,下面是一个查询用户信息的 SQL 语句: SELECT * FROM user WHERE username='admin'; 4. 执行 SQL 语句 使用 JDBC API 的 Statement 或 PreparedStatement 类可以执行 SQL 语句。例如,使用 Statement 类执行 SQL 查询语句的代码如下: Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE username='admin'"); 5. 处理查询结果 执行 SQL 查询语句后,可以使用 ResultSet 对象来处理查询结果。例如,使用 ResultSet 对象输出查询结果的代码如下: while(rs.next()){ System.out.println("username:" + rs.getString("username")); System.out.println("password:" + rs.getString("password")); } 除了查询操作,还可以使用 SQL 语句进行插入、更新和删除等操作。例如,下面是一个插入用户信息的 SQL 语句: INSERT INTO user(username,password) VALUES('admin','admin123'); 使用 JDBC API 执行插入操作的代码如下: Statement stmt = conn.createStatement(); int result = stmt.executeUpdate("INSERT INTO user(username,password) VALUES('admin','admin123')"); 总之,在 Java Web IDEA 启动数据库服务并进行增删改查操作需要以下几个步骤:加载数据库驱动程序创建数据库连接、创建 SQL 语句、执行 SQL 语句并处理查询结果。这些步骤需要融合 Java Web 和关系型数据库的知识,开发者需要具备扎实的 Java 和 SQL 技术功底,才能够掌握 Java Web IDEA数据库操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值