关于idea连接数据库

1.链接数据库步骤代码
/1.数据库连接的4个基本要素:
String url = "jdbc:mysql://localhost:3306/xinzhishop";
String user = "root";
String password = "Root123456";
String driverName = "com.mysql.jdbc.Driver";

//2.加载驱动 (①实例化Driver ②注册驱动)
//初次forname依旧使用了反射机制
Class<?> aClazz = Class.forName(driverName);
Driver driver = (Driver) aClazz.newInstance();

//3注册驱动  能再java上跑起来,并且能够帮助我们连接数据库的程序语句
DriverManager.registerDriver(driver);

//4.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
	
2.通过classLoader连接
//1.数据库连接的4个基本要素:
//通过获取一个properties流找到所建文件地址
InputStream in = TestUser.class.getClassLoader().getResourceAsStream("jdbc.config");
//新建Properties
Properties properties = new Properties();
//将所建地址数据写入
properties.load(in);

//拿到数据
String url = properties.get("url").toString();
String user = properties.get("user").toString();
String password = properties.get("password").toString();
String driverName = properties.get("driverName").toString();

//2.加载驱动 (①实例化Driver ②注册驱动)
Class.forName(driverName);
//4.获取连接
Connection conn = DriverManager.getConnection(url, user, password);
3.sql增加一个用户
@Override
public void saveUser(User user) {
    try {


        InputStream in = UserDaoImpl.class.getClassLoader().getResourceAsStream("config/jdbc.config");
        Properties properties = new Properties();
        properties.load(in);

        //拿到数据
        String url = properties.getProperty("url");
        String username = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driverName = properties.getProperty("driverName");

        //2.加载驱动 (①实例化Driver ②注册驱动)
        Class.forName(driverName);
        //4.获取连接
        Connection conn = DriverManager.getConnection(url, username, password);
        Statement statement = conn.createStatement();//创建一个申明
        boolean execute = statement.execute("insert  into user values (2,'lzp','123')");//执行一条sql语句
        System.out.println(execute);
    }catch (Exception e){
        e.printStackTrace();
    }
}



***********************************************
在TestUser进行一个调用方法
 @Test
    public void testUserDao(){
        IUserDao iUserDao = new UserDaoImpl();
        iUserDao.saveUser(new User());
    }
4.修改一条数据
//更新
@Override
public void updateUser(User user) {
    String sql = "update user set username = '" + user.getUsername() + "',password =' " +
            user.getPassword() + "'where id = " + user.getId();
    try {
        InputStream in = UserDaoImpl.class.getClassLoader().getResourceAsStream("config/jdbc.config");
        Properties properties = new Properties();
        properties.load(in);

        //拿到数据
        String url = properties.getProperty("url");
        String username = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driverName = properties.getProperty("driverName");

        //2.加载驱动 (①实例化Driver ②注册驱动)
        Class.forName(driverName);
        //4.获取连接
        Connection conn = DriverManager.getConnection(url, username, password);
        Statement statement = conn.createStatement();//创建一个申明
        statement.execute(sql);//执行一条sql语句
    } catch (Exception e) {
        e.printStackTrace();
    }
}
=====================================================================
    //测试修改
    @Test
    public void testUserDaoUpdate(){
        IUserDao iUserDao = new UserDaoImpl();
        iUserDao.updateUser(new User(6,"lili2","456"));
    }
5查询所有用户
//查询所有用户
@Override
public List<User> findAllUsers() {
    List<User> users = new ArrayList<>();
    String sql = "select id ,username,password from user ";
    try {
        InputStream in = UserDaoImpl.class.getClassLoader().getResourceAsStream("config/jdbc.config");
        Properties properties = new Properties();
        properties.load(in);

        //拿到数据
        String url = properties.getProperty("url");
        String username = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driverName = properties.getProperty("driverName");

        //2.加载驱动 (①实例化Driver ②注册驱动)
        Class.forName(driverName);
        //4.获取连接
        Connection conn = DriverManager.getConnection(url, username, password);
        Statement statement = conn.createStatement();//创建一个申明
        ResultSet resultSet = statement.executeQuery(sql);//执行一条sql语句
        while (resultSet.next()) {
            resultSet.next();
            int id = resultSet.getInt("id");
            String username2 = resultSet.getString("username");
            String password1 = resultSet.getString("password");
            User user = new User(id, username2, password1);
            users.add(user);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return users;
}
==============================================================
    //测试查询
    @Test
    public void testUserfindAll(){
        IUserDao iUserDao = new UserDaoImpl();
        List<User> allUsers = iUserDao.findAllUsers();
        for (User allUser : allUsers) {
            System.out.println(allUser);
        }
    }

6按用户民查询
//按用户名查询
@Override
public User findUserByName(String username) {
    String sql = "select id ,username,password from user where username = '" + username + "'";
    Connection conn = null;
    Statement statement = null;
    ResultSet resultSet = null;
    try {
        //4.获取连接
        conn = DBUtil.getConnection();
        statement = conn.createStatement();//创建一个申明
        resultSet = statement.executeQuery(sql);//执行一条sql语句
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String username2 = resultSet.getString("username");
            String password1 = resultSet.getString("password");
            return new User(id, username2, password1);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.closeAll(conn, statement, resultSet); }
    return null;
}
===============================================================================
    //测试根据用户名查询
    @Test
    public void testUserfindByName(){
        IUserDao iUserDao = new UserDaoImpl();
        User lzp = iUserDao.findUserByName("lzp");
        System.out.println(lzp);
    }

7.关于登录
package com.xinzhi.service.impl;

import com.xinzhi.dao.IUserDao;
import com.xinzhi.dao.UserDaoImpl;
import com.xinzhi.entity.User;
import com.xinzhi.service.IUserService;

import java.util.List;
import java.util.Scanner;

/**
 * @author LZP
 * @create 2020/4/4
 */
public class UserviceImpl  implements IUserService {
    private IUserDao userDao = new UserDaoImpl();
    @Override
    public boolean regist() {
        return false;
    }

    @Override
    public boolean login() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名:");
        String username = scanner.next();
        System.out.print("请输入密码:");
        String password = scanner.next();
        User user = userDao.findUserByName(username);
        if ( password.equals(user.getPassword())) {
            System.out.println("登录成功");
            return true;
        }else {
            System.out.println("登录失败");
        }


        return false;
    }

    @Override
    public List<User> showAllUser() {
        return null;
    }
}


==============================================================================
package com.xinzhi;

import com.xinzhi.service.impl.UserviceImpl;

/**
 * @author LZP
 * @create 2020/4/4
 */
public class Application {
    public static void main(String[] args) {
        UserviceImpl uservice = new UserviceImpl();
        uservice.login();
    }
}

总结分析

【#代表注意点】

1.JDBC

2.关于数据库的连接

在这里插入图片描述

#:Connection(连接)
#本机地址表示:localhost或者127.0.0.1 端口一般默认3306.
基本步骤
1.首先写好基本的连接数据库步骤.

​ #此处额user与password为你自己SQL数据库设置的密码

​ 我的密码为Root123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ZWqfaG1-1586172578544)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1585991899442.png)]

=======================================================================

节省步骤也可以拿到,是相同的效果

在这里插入图片描述

2.然后进行项目构建的操作

在这里插入图片描述

或者使用快捷键【Ctrl + Alt + Shift + S】

3.设置Libraries

在这里插入图片描述
我的地址在【D:\Personal\Desktop\20200404】
在这里插入图片描述

4.当你基本操作链接成功后

在这里插入图片描述

#数据库自我总结极简过程

1.url统一资源定位符,定位数据库

2.通过String字符串形式验证数据库的用户名和密码。

3.通过String字符串形式获取驱动。(之所以把这一步提领出来是因为我认为这是一个注意点和重要连接纽带)

4.加载驱动。

5.获取连接

到此处即链接成功

【5.获取连接。查看方式】

Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);

显示:com.mysql.jdbc.JDBC4Connection@地址

3.通过classLoader来进行连接

1.在类中新建一个FIle文件,将连接数据库的步骤写入。(更改为一下格式)

在这里插入图片描述
在这里插入图片描述

【注意点】

拿到变量名不仅可以使用tostring 还可以使用getProperty
在这里插入图片描述

4.关于连接数据库后的增删改查

#在连接好数据库之后的操作

1.增
Statement statement = conn.createStatement();//创建一个申明
statement.execute();//执行一条sql语句
statement.executeQuery();//执行一条查询语句

在这里插入图片描述

1.在statement.execute();输入一条需要执行的sql语句。

2.打印输出

3.在TestUser测试类方法中进行测试,使用类的调用

#注意:控制台输出的false表示是一条更新数据库的语句没有结果集。

true如果有结果就会返回true

定义sql语句为字符串
在这里插入图片描述

===========================================================

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppJN2N0g-1586172578575)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586002136573.png)]

然后直接将字符串传入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxxeMort-1586172578575)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586002157543.png)]

sql为拼接的字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1O9A8Hw-1586172578577)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586002214584.png)]

2修改
1.在增加的sql语句中换成修改语句即可

在这里插入图片描述

2.在测试文件中进行调用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLZ3CZag-1586172578578)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1586003117251.png)]

3.查询!!!
A查询所有
1.在原来更新功能代码的基础上创建一个list集合,写出sql语句.

在这里插入图片描述

2.用while循环出数据库每个人的数据

B通过名字拿到用户
1.在寻找所有用户的基础上将sql语句添加where条件
2.在while循环中直接返回id,username,以及password

在这里插入图片描述

3.测试

在这里插入图片描述

*结果

在这里插入图片描述

5.sql注入

#【注意点】
代码段中画红线的必须对应的是一组数据数据库中的数据,否则返回为null;

6关于登录

#【注意点】

使用IUserDao接口

接口中有findUserByName,通过输入的username找到,

然后进行比较,

阿里规约:拿数据库中有的来equals,这样写可以防止空指针异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值