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
=======================================================================
节省步骤也可以拿到,是相同的效果
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语句为字符串
===========================================================
然后直接将字符串传入
sql为拼接的字符串
2修改
1.在增加的sql语句中换成修改语句即可
2.在测试文件中进行调用
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,这样写可以防止空指针异常。