jdbc的概念
java database connection(就是java和数据库连接)
完成这个需要用到的工具(idea(编写代码)和SQLyog(mysql)),所以需要安装idea,mysql数据库和SQLyog
一般完成jdbc需要七个步骤
1.加载驱动
2.创建连接
3.编写sql语句
4.执行sql语句
5.得到结果集
6.处理结果
7.关闭连接
下面进行具体的实例
项目完成前需要兴建一个数据库
进入SQLyog
Ctrl+D(快捷键)创建数据库
字符和排列是顺序按照我的这个
创建完数据库之后新建表格
红框的地方注意一下
这边同理
两表创建完成之后吧user表外部键设置一下(应为user表中的tid是type表中的主键)
这边最后输入数据
这样数据库就设置完成了,
下面就是idea中代码的实现
创建一个项目
这边先显示全部查询的代码
public static void PrintAllUser(){
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true&characterEncoding=utf8","root","root");
//3.编写sql语句
String sql = "select * from tb_user";
//4.选中语句并执行
PreparedStatement pstm = conn.prepareStatement(sql);
//5.产生结果
/**结果分为三种
* 1.聚合函数:产生的结果为1行一列
* 2.增删改,几行受影响
* 3.查询结果,产生一个结果集
*/
ResultSet rs = pstm.executeQuery();
//6.处理结果
while (rs.next()){
System.out.println("用户编号:"+rs.getInt(1)+",用户名称:"+rs.getString(2)+",用户密码:"+rs.getString(3)+",用户类型:"+rs.getInt(4));
}
//7.关闭连接
rs.close();
pstm.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这边是增加的代码(有个bug,用户名一致不会报错,要加个判断语句)
public static void addUser(){
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true&characterEncoding=utf8","root","root");
//3.编写sql语句
String sql = "insert into tb_user values(null,?,?,?)"; //?代表占位符,占的是一个空位置,为了放数据
//4.选中语句并执行
PreparedStatement pstm = conn.prepareStatement(sql);
System.out.println("请输入用户名:");
String username = in.next();
pstm.setString(1,username);
System.out.println("请输入密码:");
pstm.setString(2,in.next());
System.out.println("请输入tid:");
pstm.setInt(3,in.nextInt());
//5.产生结果
int num = pstm.executeUpdate();
//6.处理结果
System.out.println("新增成功<"+num+">行受影响");
//7.关闭连接
pstm.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这边是删除的代码
public static void delUser(){
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true&characterEncoding=utf8","root","root");
//3.编写sql语句
String sql = "delete from tb_user where uid =?"; //?代表占位符,占的是一个空位置,为了放数据
//4.选中语句并执行
PreparedStatement pstm = conn.prepareStatement(sql);
System.out.println("请输入需要删除的uid");
pstm.setInt(1, in.nextInt());
//5.产生结果
int num = pstm.executeUpdate();
//6.处理结果
if (num>0){
System.out.println("删除成功<"+num+">行受影响");
}else {
System.out.println("删除失败");
}
//7.关闭连接
pstm.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这边是修改的代码
public static void updateUser(){
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true&characterEncoding=utf8","root","root");
//3.编写sql语句
String sql = "update tb_user set username = ?,password=?,tid=? where uid =?"; //?代表占位符,占的是一个空位置,为了放数据
//4.选中语句并执行
PreparedStatement pstm = conn.prepareStatement(sql);
System.out.println("输入需要修改的uid");
pstm.setInt(4,in.nextInt());
System.out.println("请输入需要修改成的用户名");
pstm.setString(1,in.next());
System.out.println("请输入需要修改完的密码");
pstm.setString(2,in.next());
System.out.println("输入需要修改的tid");
pstm.setInt(3, in.nextInt());
//5.产生结果
int num = pstm.executeUpdate();
//6.处理结果
if (num >0){
System.out.println("新增成功<"+num+">行受影响");
}else {
System.out.println("失败");
}
//7.关闭连接
pstm.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
下面是登录的代码(登录我这边的逻辑:先输入用户名,去查看数据库中是否存在此用户名,没有就返回登录失败,如果找到就给返回数据库中的密码,在与自己输入的密码进行比较)
public String selectUid(String username){
String pass="";
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true&characterEncoding=utf8","root","root");
//3.编写sql语句
String sql = "select password from tb_user where username=?";
//4.选中语句并执行
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setString(1,username);
//5.产生结果
ResultSet rs = pstm.executeQuery();
//6.处理结果
while (rs.next()){
pass=rs.getString(1);
}
//7.关闭连接
rs.close();
pstm.close();
conn.close();
return pass;
} catch (Exception e) {
return null;
}
}
public void Login(){
Scanner in = new Scanner(System.in);
System.out.println("欢迎登录");
System.out.println("请输入用户名:");
String username = in.next();
System.out.println("请输入密码:");
String password = in.next();
//查找出数据库中的用户名和密码
if (password.equals(selectUid(username))){
System.out.println("登陆成功!");
Menu();
}else {
System.out.println("账号或密码错误!请重新登录");
Login();
}
}
下面是模糊查询
public static void vagueSelect(){
//1.查询tb_user这张表的数据
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_ssm?useSSL=true&characterEncoding=utf8","root","root");
//3.编写sql语句
String sql = "select * from tb_user where username like ?";
//4.选中语句并执行
PreparedStatement pstm = conn.prepareStatement(sql);
System.out.println("请输入需要模糊查询的用户名");
String name=in.next();
pstm.setString(1,"%"+name+"%");
//5.产生结果
ResultSet rs = pstm.executeQuery();
//6.处理结果
while (rs.next()){
System.out.println("用户名:"+rs.getString(2));
}
//7.关闭连接
rs.close();
pstm.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
下面是菜单的实现
public void Menu(){
System.out.println("1.增加\t2.删除\t3.修改\t4.查找全部数据\t5.模糊查询\t6.退出");
int choice = in.nextInt();
switch (choice){
case 1:
addUser();
Menu();
break;
case 2:
delUser();
Menu();
break;
case 3:
updateUser();
Menu();
break;
case 4:
PrintAllUser();
Menu();
break;
case 5:
vagueSelect();
Menu();
break;
case 6:
System.exit(0);
}
}
最后调此方法‘
public static void main(String[] args) {
new TestDemo01().Login();
}
最后展现一下我的实现结果
完成了jdbc的简单的增删改查,登录和模糊查询的功能