java基础练习--操作MYSQL数据库

0.开发环境

  1. windows10
  2. Mysql 8.0.11 官网下载地址:https://dev.mysql.com/downloads/mysql/
  3. IDea 2017.2.6 官方下载地址:https://www.jetbrains.com/idea/
  4. java 1.8.0_171 官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

1.java练习,编写一个JAVA程序从MYSQL数据库中读取出一张表并且显示在命令窗口中。

1.1 检查MYSQL数据库是否安装成功

在命令行输入 mysql -uroot -p 检查电脑中mysql是否安装成功。
在这里插入图片描述

1.2 检查java是否已经配置成功

在命令行输入java -version 以检查java环境是否配置成功:
在这里插入图片描述

1.3 创建Idea项目

1.3.1 下载对应版本的mysql数据库连接的jdbc

\qquad 相信大家和我一样,肯定会有这么一个疑问:java连接数据库为什么还需要单独加载jdbc?那我们就不得不讲述一下jdbc所要执行的功能:
\qquad JDBC是一种执行sql语句的java API,可以为多种关系数据库提供统一访问,它由一组用Java编写的类和接口组成,是java访问数据库的标准规范;另外JDBC还提供了一种基准,用户可以根据 这个构建更高级的类和接口,使数据库开发人员可以编写数据库应用程序。
\qquad JDBC需要连接驱动,驱动是两个设备进行通信,满足一定数据通信格式,数据格式由设备供应商规定,设备供应商为设备提供驱动软件,通过软件可以和该设备进行通信。
好了现在我们正式开始下载我们的jdbc,在这之前,一定要查看一下自己电脑mysql的版本,例如我的版本使8.0.11,所以我们就进入网站 https://mvnrepository.com/search?q=connector其界面如下所示:
在这里插入图片描述
\qquad 在搜索框输入 connector然后点击
search
,可以看到第一个返回的结果就是我们需要的jdbc了,不多我们需要下载和我们mysql对应的版本。点击第一个即可进入选择版本的网页,如下所示:
在这里插入图片描述
选择好版本下载即可。

1.3.2 创建项目并且加载jdbc

创建项目
打开Idea 依次点击Filenew-----Project-----java-----Project SDK-----Next

加载jdbc
依次点击File-----Project Structure-----选择右侧的Dependence-----点击右侧加号-----选择JARs or directories-----选择自己的jdbc jar包即可。
添加完成之后,则会出现如下界面:
在这里插入图片描述
然后在我们刚刚添加的jar包前边的复选框选中即可。

1.4代码书写

\qquad 由于要对于数据库进行操作,于是我对于数据库的操作单独封装了一个java类,这样我在对于数据库操作的时候,我就不用重写很多代码了,以下就是我封装的增删查改的数据库操作类DBoper。

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: kingback
 * Author:king@王延凯
 * Date: 2019/6/15
 * Time: 13:51
 * Description: No Description
 */
public class DBoper {
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    //打开连接
    public Connection getConn(String server,String dbname,String dbuser,String dbpwd){
        String DRIVER = "com.mysql.cj.jdbc.Driver";
        String URL = "jdbc:mysql://"+server+":3306/"+dbname+"?user="+dbuser+"&password="+dbpwd+"&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false";
        try{
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL);
            System.out.println("connect success!!!");
        }catch(Exception e){
            e.printStackTrace();
        }
        return conn;
    }
    //关闭连接
    public void closeAll(){
        try{
            if(rs != null){
                rs.close();
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try{
                if(ps != null){
                    ps.close();
                }
            }catch(SQLException e){
                e.printStackTrace();
            }finally{
                try{
                    if(conn != null){
                        conn.close();
                    }
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }

    }
    //执行sql语句,可以进行查询
    public ResultSet executeQuery(String preparedSql,String []param){
        try{
            ps = conn.prepareStatement(preparedSql);
            if(param != null){
                for (int i = 0; i < param.length; i++) {
                    ps.setString(i + 1, param[i]);
                }
            }
            rs = ps.executeQuery();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return rs;
    }
    //执行sql语句,增加,修改,删除
    public int executeUpdate(String preparedSql,String[]param){
        int num = 0;
        try{
            ps = conn.prepareStatement(preparedSql);
            if(ps != null){
                for (int i = 0; i < param.length; i++) {
                    ps.setString(i + 1, param[i]);
                }
            }
            num = ps.executeUpdate();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return num;
    }
    //执行sql语句,进行删除 delete
    public void Delete(String sql){

    }
    //执行sql语句,进行插入 insert
    public void Insert(String sql){

        try{
            Statement statement=conn.createStatement();
            statement.execute(sql);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    //执行sql语句。进行修改 update
    public void Update(String sql){


    }

    /**
     * 执行查询
     *
     * @param sql    传入的预设的 sql语句
     * @param params 问号参数列表
     * @return 查询后的结果
     */
    public List<Map<String, Object>> execQuery(String sql, Object[] params) {

        try {


            PreparedStatement pstmt = conn.prepareStatement(sql);// 获得预设语句对象

            if (params != null) {
                // 设置参数列表
                for (int i = 0; i < params.length; i++) {
                    // 因为问号参数的索引是从1开始,所以是i+1,将所有值都转为字符串形式,好让setObject成功运行
                    pstmt.setObject(i + 1, params[i] + "");
                }
            }

            // 执行查询
            ResultSet rs = pstmt.executeQuery();

            List<Map<String, Object>> al = new ArrayList<Map<String, Object>>();

            // 获得结果集元数据(元数据就是描述数据的数据,比如把表的列类型列名等作为数据)
            ResultSetMetaData rsmd = rs.getMetaData();

            // 获得列的总数
            int columnCount = rsmd.getColumnCount();

            // 遍历结果集
            while (rs.next()) {
                Map<String, Object> hm = new HashMap<String, Object>();
                for (int i = 0; i < columnCount; i++) {
                    // 根据列索引取得每一列的列名,索引从1开始
                    String columnName = rsmd.getColumnName(i + 1);
                    // 根据列名获得列值
                    Object columnValue = rs.getObject(columnName);
                    // 将列名作为key,列值作为值,放入 hm中,每个 hm相当于一条记录
                    hm.put(columnName, columnValue);
                }
                // 将每个 hm添加到al中, al相当于是整个表,每个 hm是里面的一条记录
                al.add(hm);
            }

            return al;

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //this.close(this.rs,pstmt, conn);
            //closeAll();
        }
        return null;
    }

}

\qquad 接下来我将我的主函数那部分的代码展示一下,在该函数内我调用了上边封装好的DBoper类来对数据库进行操作,这样也使这部分代码变得整洁,易读。

import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created with IntelliJ IDEA.
 * User: kingback
 * Author:king@王延凯
 * Date: 2019/6/28
 * Time: 16:03
 * Description: No Description
 */
public class test {
    public static void main(String[] args) {
        //初始化连接变量,用来存储数据
        String server="localhost";
        String dbname="words";
        String dbuser="root";
        String dbpwd="123456";
        //实例化一个数据库连接类
        DBoper dBoper=new DBoper();
        //链接数据库
        dBoper.getConn(server,dbname,dbuser,dbpwd);
        //初始化数据库结果参数
        ResultSet rs = null;
        ResultSet resultSet=null;
        //执行查询操作:
        String sql_test="select * from cet";
        resultSet=dBoper.executeQuery(sql_test,null);
        try {
            while (resultSet.next()){
                String id=resultSet.getString(1);
                String word=resultSet.getString(2);
                String chinese=resultSet.getString(3);
                String sent=resultSet.getString(4);
                System.out.println(id+"   "+word+"   "+chinese+"   "+sent);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //调用数据库连接类的方法,关闭数据库连接
        dBoper.closeAll();
    }
}

1.5 运行结果截图:

在这里插入图片描述

1.6 总结

\qquad 这次练习让我明白了jdbc工作原理、如何在java项目中如何添加数据库连接的jdbc以及对于数据库的简单操作。我相信在不断的练习中,我会一步一步成长的。加油!!!

发布了44 篇原创文章 · 获赞 37 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38468077/article/details/100169607