当前位置:   article > 正文

用户登录界面(java+swing+mysql)(二)_swing跟jdbc实现注册功能

swing跟jdbc实现注册功能

1.封装代码(java连接mysql)

1.完整代码,返回Connection

import java.sql.*;

public class JDBC {
    private static final String driver="com.mysql.cj.jdbc.Driver";
    private static final String url="jdbc:mysql://localhost:3306/data?useUnicode=true&useSSL=false&serverTimezone=UTC&characterEncoding=utf-8";
    private static final String username="root";
    private static final String password="aass2580";
    //获得连接对象的方法
    public static Connection getConnection(){
        try {
            //加载数据库驱动
            Class.forName(driver);
            System.out.println("驱动加载成功");
            //连接数据库获得连接对象
            System.out.println("数据库连接成功");
            return DriverManager.getConnection(url,username,password);
        } catch (SQLException | ClassNotFoundException throwables) {
            System.out.println("数据库连接失败");
            throwables.printStackTrace();
        }
        return null;
    }
    //释放资源的方法
    public static void close(Connection conn, Statement statement, ResultSet result){
        try {
            if (result != null) {
                result.close();
                result=null;
            }
            if (statement != null) {
                statement.close();
                statement=null;
            }
            if (conn != null) {
                conn.close();
                conn=null;
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

2.对代码进行解析

private static final String driver="com.mysql.cj.jdbc.Driver";
Class.forName(driver);
  • 1
  • 2

这一句为加载驱动,我们首先要下载jar包,然后调用jar中的驱动

private static final String url="jdbc:mysql://localhost:3306/data?useUnicode=true&useSSL=false&serverTimezone=UTC&characterEncoding=utf-8";
private static final String username="root";
private static final String password="aass2580";
DriverManager.getConnection(url,username,password);
  • 1
  • 2
  • 3
  • 4

username为用户名
passwoed为密码
url构造:jdbc(方式):(方式)mysql:(数据库)//localhost:3306(端口号)/data(要连接的数据库名)

3.了解url

用于标识数据库的位置
jdbc为连接方法, java开发的时候,数据库连接方式除了jdbc,,jndi,,还有JDBC-ODBC桥的方式、、JDBC+厂商Database Connection Server+DataBase的形式和纯JDBC+DATABASE的连接方式。
2)mysql为需要连接的数据库, 数据库的类型有许多,Oracle数据库, SQLServer数据库,DB2数据库
3)localhost:3306 IP地址+端口号,localhost为本地主机。也可以写127.0.0.1(回送地址)
4)data 为需要连接的数据库的名称

4.了解JDBC

JDBC(Java Data Base Connectivity)(java 数据库连接),官方解释它是java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,从根本上来说是一种规范,它提供的接口可以便携式访问底层数据库。
我们需要导入jar包,其他的开发者可以将自己编写的代码打包为jar包,我们只需要导入这个jar包作为依赖,即可直接使用别人的代码,就向我们直接使用jdk提供的类一样。

5.了解DriverManager

获得数据库的连接
管理和注册我们的数据库驱动
DriverManager.getConnection(url,name,password)静态方法,用于连接对应的数据库
加载成功之后会返回connect对象。

2.对MySQL语句的操作

1.statement与preparedStatement概念

1.概念

PreparedStatement是用来执行SQL查询语句的API之一
Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句

  1. Statement 用于通用查询,
  2. PreparedStatement 用于执行参数化查询,
  3. CallableStatement则是用于存储过程。

2.了解statement

使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。

3.了解preparedStatement

PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。
数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。

2.对statement与preparedStatement进行分析

1.使用statement

使用范围:当执行相似SQL(结构相同,具体值不同)语句的次数比较少
优点:语法简单
缺点:采用硬编码效率低,安全性较差。
原理:硬编码,每次执行时相似SQL都会进行编译

2.使用preparedStatement

使用范围:当执行相似sql语句的次数比较多(例如用户登陆,对表频繁操作…)语句一样,只是具体的值不一样,被称为动态SQL
优点:语句只编译一次,减少编译次数。提高了安全性(阻止了SQL注入)
缺点: 执行非相似SQL语句时,速度较慢。
原理:相似SQL只编译一次,减少编译次数

4.拿到结果集result , 了解ResultSet

1)调用Statement 对象的executeQuery(sql) 可以得到结果集.
2)调用preparedStatementStatement 对象的executeQuery() 可以得到结果集
ResultSet 返回的实际上就是一张数据表 . 有一个指针指向数据表的第一行的前面. 可以调用next()方法检测下一行是否有效,若有效该方法放回true,且指针下移。
当指针对位到一行时,可以通过调用getXxx(index)或getXxx(columnName)获取每一列的值. 例如:getInt(1),getString(“name”)
ResultSet 也需要关闭.
我们需要循环对表进行遍历

例如

while (result.next()){
    int type=result.getInt("type");
}
  • 1
  • 2
  • 3

4.对数据库进行操作

1.sql语句的预处理

private static final String SQL_USER_INSERT = "INSERT INTO stu_information VALUES(?,?,?,?)";
    private static final String SQL_USER_DELETE = "DELETE FROM stu_information WHERE id=? AND name=?";
    private static final String SQL_USER_SELECT = "SELECT * FROM stu_information WHERE id=? AND name=?";
    private static final String SQL_USER_UPDATE = "UPDATE stu_information SET age=? , class=? WHERE id=? AND name=?";
  • 1
  • 2
  • 3
  • 4
  1. INSERT INTO stu_information VALUES(?,?,?,?) 向stu_information表中添加元素
  2. DELETE FROM stu_information WHERE id=? AND name=? 通过id和name进行查找并进行删除
  3. SELECT * FROM stu_information WHERE id=? AND name=? 通过id和name进行查找
  4. UPDATE stu_information SET age=? , class=? WHERE id=? AND name=? 通过id和name进行查找并对age和class进行修改。

2.增加

public boolean insert(int id, String name, int age, String classes) {
   //连接数据库,创建连接对象conn
    PreparedStatement preparedStatement=null;
    ResultSet result=null;
    Connection conn= JDBC.getConnection();
    try{
        //创建预编译环境
        preparedStatement=conn.prepareStatement(SQL_USER_INSERT);
        //设置sql语句中的参数    1是第一个问号,2是第二个问号
        preparedStatement.setInt(1,id);
        preparedStatement.setString(2,name);
        preparedStatement.setInt(3,age);
        preparedStatement.setString(4,classes);
        //执行sql语句
        int line=preparedStatement.executeUpdate();
        if(line>0){
            return true;
        }
    }catch (SQLException e){
        e.printStackTrace();
    }finally {
        JDBC.close(conn,preparedStatement,result);
    }
    return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

3.删除

public boolean delete(int id, String name) {
   //连接数据库,创建连接对象conn
    PreparedStatement preparedStatement=null;
    ResultSet result=null;
    Connection conn= JDBC.getConnection();
    try{
        //创建预编译环境
        preparedStatement=conn.prepareStatement(SQL_USER_DELETE);
        //设置sql语句中的参数    1是第一个问号,2是第二个问号
        preparedStatement.setInt(1,id);
        preparedStatement.setString(2,name);
        //执行sql语句
        int line=preparedStatement.executeUpdate();
        if(line>0){
            return true;
        }
    }catch (SQLException e){
        e.printStackTrace();
    }finally {
        JDBC.close(conn,preparedStatement,result);
    }
    return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

4.查找

public boolean select(int id, String name) {
    //连接数据库,创建连接对象conn
    PreparedStatement preparedStatement=null;
    ResultSet result=null;
    Connection conn= JDBC.getConnection();
    try{
        //创建预编译环境
        preparedStatement=conn.prepareStatement(SQL_USER_SELECT);
        //设置sql语句中的参数    1是第一个问号,2是第二个问号
        preparedStatement.setInt(1,id);
        preparedStatement.setString(2,name);
        //执行sql语句 Query ,得到结果集对象result
        result=preparedStatement.executeQuery();
        while (result.next()){
            return true;
        }
    }catch (SQLException e){
        e.printStackTrace();
    }finally {
        JDBC.close(conn,preparedStatement,result);
    }
    return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

5.修改

public boolean update(int id, String name, int age, String classes) {
    //连接数据库,创建连接对象conn
    PreparedStatement preparedStatement=null;
    ResultSet result=null;
    Connection conn=null;
    conn= JDBC.getConnection();
    try{
        preparedStatement=conn.prepareStatement(SQL_USER_UPDATE);
        //设置sql语句中的参数    1是第一个问号,2是第二个问号
        preparedStatement.setInt(1,age);
        preparedStatement.setString(2,classes);
        preparedStatement.setInt(3,id);
        preparedStatement.setString(4,name);
        //执行sql语句
        int line=preparedStatement.executeUpdate();
        if(line>0){
            return true;
        }
    }catch (SQLException e){
        e.printStackTrace();
    }finally {
        JDBC.close(conn,preparedStatement,result);
    }
    return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

3.MySQL主要语句

1.查看整表   user为表名
SELECT * FROM user
2.根据条件进行查找     where后面为条件   返回的是整行
SELECT * FROM `user` WHERE uname='admin' AND upass='admin'
3.返回一行中一个属性的值     type为一个属性
SELECT type FROM user WHERE uname='admin' AND upass='admin'
4.向表中添加一个学生  VALUES后跟的是添加的内容
INSERT INTO user VALUES(id,"zs","zs",2)
5.从表中删除一个学生信息
DELETE FROM user WHERE uname='zs'
6.修改表中的属性 没有from直接表名 set后面为修改内容
UPDATE user SET upass='mc' WHERE uname='mc'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/175270
推荐阅读
相关标签
  

闽ICP备14008679号