用户登录界面(java+swing+mysql)(二)

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();
        }
    }
}

2.对代码进行解析

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

这一句为加载驱动,我们首先要下载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);

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");
}

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. 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;
}

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;
}

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;
}

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;
}

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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值