项目结构如下:lib是放第三方库的文件夹
jdbc连接数据的步骤:
1、
导入第三方jar包;
2、
右键编译jar包;
3、
注册驱动类;
4、
建立连接;
5、
写SQL语句;
6、
创建Statement对象;
7、
执行SQL语句,得到ResultSet结果集;
8、
关闭IO流,close();
以上的步骤缺一不可,并且除了第5、第6的顺序可以颠倒之外,其他的顺序不可颠倒,必须严格要求按照步骤执行,缺任一步骤都会导致连接不成功数据库。
直接进如主题,进行数据库的增删改查操作,(注意这里的数据是写死的,固定值来测试,如果有需要的伙伴可以自行优化,相信对你来说不是难事,so easy);
数据库表如下所示:
User.java
package demo01;
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
Utils .java
package demo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Utils {
public static String url = "jdbc:mysql://localhost:3306/db1";
public static String user = "root";
public static String password = "root";
//一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。
//比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection con=null;
try {
con = DriverManager.getConnection(Utils.url, Utils.user, Utils.password);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public static Statement getStatement(Connection con) throws Exception {
Statement statement=null;
if(con!=null) {
statement = con.createStatement();
}
return statement;
}
public void close(ResultSet ret, Statement st,Connection con) throws Exception {
if (ret != null) {
ret.close();
}
if (st != null) {
st.close();
}
if (con != null) {
con.close();
}
}
public static ResultSet getResultSet(String sql) throws Exception {
Connection con = Utils.getConnection();
Statement ste=Utils.getStatement(con);
ResultSet resultSet = ste.executeQuery(sql);
return resultSet;
}
//影响行数
public static int addLineOrdeleteLineOrModifyLine(String sql) throws Exception {
Connection con = Utils.getConnection();
Statement ste=Utils.getStatement(con);
int update = ste.executeUpdate(sql);
//return ste.executeUpdate(sql);
return update;
}
}
UserUtils.java
package demo01;
import java.util.List;
public interface UserUtils {
//查询所有用户信息
public abstract List<User> queryUserList() throws Exception;
//根据用户名和密码来查询用户信息
public abstract User queryUsernameAndPassword(String username,String password) throws Exception;
//根据id查询用户
public abstract User queryUserId(int id) throws Exception;
//模拟用户登录,可以返回boolean类型,也可以返回User对象,最好是使用User对象
public abstract User Login(String username,String password) throws Exception;
//单条删除
public abstract int deleteId(int id) throws Exception;
//批量删除,思路是循环删除单条记录,就可以达到批量删除
public abstract int deleteIds(int []arrs) throws Exception;
public abstract int Modify(User user) throws Exception;
//这种是最古老的最土的方式,要是属性很多呢,就不推荐使用,推荐使用面向对象的(封装思想思想)
//public abstract int Modify(String username,String password) throws Exception;
public abstract int add(User user) throws Exception;
//public abstract int add(String username,String password) throws Exception;
}
}
UserUtilsImpl.java
package demo01;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class UserUtilsImpl implements UserUtils{
@Override
public List<User> queryUserList() throws Exception {
// Connection con=Utils.getConnection();
// Statement sta=Utils.getStatement(con);
String sql="select * from login";
ResultSet resultSet = Utils.getResultSet(sql);
List<User> list=new ArrayList<User>();
while(resultSet.next()) {
User user=new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
list.add(user);
}
return list;
}
@Override
public User queryUsernameAndPassword(String username,String password) throws Exception {
Connection con=Utils.getConnection();
Statement sta=Utils.getStatement(con);
String sql="select * from login where username='"+username+"' and password='"+password+"'";
ResultSet resultSet = sta.executeQuery(sql);
User user=new User();
while(resultSet.next()) {
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
}
return user;
}
@Override
public User queryUserId(int id) throws Exception {
Connection con=Utils.getConnection();
Statement sta=Utils.getStatement(con);
String sql="select * from login where id="+id+"";
ResultSet resultSet = sta.executeQuery(sql);
User user=new User();
while(resultSet.next()) {
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
}
return user;
}
@Override
public User Login(String username, String password) throws Exception {
Connection con=Utils.getConnection();
Statement sta=Utils.getStatement(con);
//拼接字符串用 "+变量名+"
String sql="select * from login where username='"+username+"' and password='"+password+"'";
ResultSet resultSet = sta.executeQuery(sql);
User user=new User();
while(resultSet.next()) {
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
}
return user;
}
@Override
public int deleteId(int id) throws Exception {
String sql="delete from login where id='"+id+"'";
//return Utils.addLineOrdeleteLineOrModifyLine(sql);
int i = Utils.addLineOrdeleteLineOrModifyLine(sql);
return i;
}
@Override
public int deleteIds(int[] arrs) throws Exception {
//批量删除的思路就是 循环删除单条记录,(使用数组或集合都可以的)
int i=0;
for (int d : arrs) {
UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
userUtilsImpl.deleteId(d);
i++;
}
return i;
}
// @Override
// public int Modify(User user) throws Exception {
// String sql="update login set username=user.getUsername and password=user.getPassword where id=12";
// UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
// int i = Utils.addLineOrdeleteLineOrModifyLine(sql);
//
// return i;
// }
// @Override
// public int Modify(String username,String password) throws Exception {
// String sql="update login set username='"+username+"',password='"+password+"' where id=12;";
// //UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
// int i = Utils.addLineOrdeleteLineOrModifyLine(sql);
//
// return i;
// }
@Override
public int Modify(User user) throws Exception {
String sql="update login set username='"+user.getUsername()+"',password='"+user.getPassword()+"' where id=12;";
//UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
int i = Utils.addLineOrdeleteLineOrModifyLine(sql);
return i;
}
@Override
public int add(User user) throws Exception {
String sql="insert into login(username,password) values('"+user.getUsername()+"','"+user.getPassword()+"')";
int line = Utils.addLineOrdeleteLineOrModifyLine(sql);
return line;
}
// @Override
// public int add(String username,String password) throws Exception {
// String sql="insert into login(username,password) values('"+username+"','"+password+"')";
// int line = Utils.addLineOrdeleteLineOrModifyLine(sql);
// return line;
// }
}
demoTest01.java
package demo01;
import java.util.Date;
import java.util.List;
import org.junit.Test;
public class demoTest01 {
public static void main(String[] args) throws Exception {
demoTest01 test=new demoTest01();
// test.fun0();
// test.fun1();
// test.fun2();
// test.fun3();
// test.fun5();
// test.fun6();
test.fun7();
}
public void fun0() throws Exception {
// 根据封装好的方法来查询所有用户信息。selet * from login;当然也可以是写成是单元测试的方式,当然直接写成
// 在main主方法内,也是可以的,反正都是为了好测试。主要是为了测试封装思想。
UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
List<User> userList = userUtilsImpl.queryUserList();
// System.out.println(userList);
for (User user : userList) {
System.out.println(user);
}
}
@Test
// 根据用户名和密码查询用户信息 单元测试(加上单元测试是为了更好的测试,方便快捷)
public void fun1() throws Exception {
UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
User user = userUtilsImpl.queryUsernameAndPassword("123", "123");
// 这里传入的参数值是固定值,写死的,这里可以灵活传入用户输入的内容
System.out.println(user);
}
@Test
//根据id查询用户信息
public void fun2() throws Exception {
UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
User user = userUtilsImpl.queryUserId(2);
System.out.println(user);
}
@Test
// 登录单元测试
public void fun3() throws Exception {
UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
User user = userUtilsImpl.Login("121", "123");
if (user != null) {
if (user.getUsername() != null && user.getPassword() != null) {
Date date = new Date();
String localTime = date.toLocaleString();
// System.currentTimeMillis();
System.out.println("欢迎你" + user.getUsername() + "用户登录本最帅系统 " + "登录时间是:" + localTime);
} else {
System.out.println("登录失败");
}
}
}
@Test
//根据id删除用户信息,
public void fun4() throws Exception {
UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
int i = userUtilsImpl.deleteId(2);
if(i>0) {
System.out.println("删除成功"+i);
}
else {
System.out.println("删除失败");
}
}
@Test
//批量删除 循环删除单条记录,就是批量删除。 单元测试不能用static修饰
public void fun5() throws Exception{
UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
int arr[]= {1,2,3,4};
int i = userUtilsImpl.deleteIds(arr);
if(i>0) {
System.out.println("批量删除"+i+"条");
}
}
// 添加记录
@Test
public void fun6() throws Exception{
UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
User user=new User();
user.setUsername("123");
user.setPassword("1231");
int i = userUtilsImpl.add(user);
if(i>0) {
System.out.println("添加成功"+i);
}
else {
System.out.println("添加失败");
}
}
// 添加记录
//@Test
//属性比较少的时候可以用这种方法,但还是比较推荐使用面向对象的思想来完成,封装好,简洁方便维护
// public void fun6() throws Exception{
// UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
//
// int i = userUtilsImpl.add("123","123");
// if(i>0) {
// System.out.println("添加成功"+i);
// }
// else {
// System.out.println("添加失败");
// }
//}
//
// @Test
// public void fun7() throws Exception{
// UserUtilsImpl userUtilsImpl=new UserUtilsImpl();
// User user=new User();
// user.setId(12);
// user.setUsername("123");
// user.setPassword("张三");
// int i = userUtilsImpl.Modify(user);
// if(i>0) {
// System.out.println("修改成功"+i);
// }
// else {
// System.out.println("修改失败");
// }
//}
//修改数据库中的数据
@Test
public void fun7() throws Exception {
UserUtilsImpl userUtilsImpl = new UserUtilsImpl();
User user = new User();
user.setUsername("王五");
user.setPassword("王五");
int i = userUtilsImpl.Modify(user);
if (i > 0) {
System.out.println("修改成功" + i);
} else {
System.out.println("修改失败");
}
}
}