【JavaDay27】JDBC基础知识,安装,Java连接数据库,SQL语句的使用

将JDBC包加入到你的项目里

  • 先去官网下载JDBC,JDBC下载地址,选择如下:
    在这里插入图片描述
  • 安装完解压一下,得到一个文件,文件里面有一个tar包,在项目里建一个文件,把那个包放进去
  • 在这里插入图片描述
  • 此时应该是没有箭头的,你选中,右键,然后添加到库,应该是倒数第三个选项,你自己看一下吧,然后就ok了。

如何连接到数据库

第一种方式


public class SQLconnection01 {
    public static void main(String[] args) throws  Exception{
        //方式一,可以写在配置文件里面
        Class clazz=Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver) clazz.newInstance();
        String url="jdbc:mysql://localhost:3306";
        Properties properties = new Properties();
        properties.setProperty("user","root");
        properties.setProperty("password","123456");
        Connection connect = driver.connect(url, properties);
        System.out.println(connect);
        connect.close();
    }
}

第二种及第三种方式

public class SQLconnection002 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //第二种方式,这里他帮我们自动注册Driver
        Class.forName("com.mysql.cj.jdbc.Driver");
        //第三种方式,可以直接省略Class.forName("com.mysql.cj.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306";
        String user="root";
        String password="123456";
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
        connection.close();
    }
}

第四种方式,一定要会的!!

package com.sj.www;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
--------------通过配置文件的方法连接,有利于后续不用动代码就改相应数据--------------------
public class SQLconnection003 {
    public static void main(String[] args) throws Exception {
        //第四种,更加灵活的连接数据库,以后就用这个
        //第一步,把数据写在配置文件里sql.properties

        //第二步,创建properties对象
        Properties properties = new Properties();
        //获取配置文件地址,下面方法是获取src下的文件绝对路径,并且直接创建一个流对象
        // 此方法更加通用,然后加载配置文件。------------------重点------------
        InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
        properties.load(inputStream);
        //第三步,使用get方法获取
        String driver = properties.getProperty("driver");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        //然后就正常写连接的语句了
        //1、获取类文件夹/这一步可以省略但是为了清晰建议加上
        Class.forName(driver);
        //2、调用DriverManager的connection(连接)方法-----------重点-----------
        Connection connection = DriverManager.getConnection(url, user, password);
        //3、下面就可以根据这个连接对象进行sql语句操作了
        System.out.println(connection);
        //4、关闭连接
        connection.close();
    }
}

properties文件的内容

url=jdbc:mysql://localhost:3306/bjpowernode
user=root
password=123456
driver=com.mysql.cj.jdbc.Driver

JAVA中执行增删改查

  • Insert语句
    ------------前面的是一样的,我是在获取connection之后写的--------------
String sql="insert into dept(deptno,dname,loc) values(50,'Booker','DALLAS')";
        //createStatement(创建语句)
        Statement statement =connection.createStatement();
        //executeUpdate更新到数据库中
        int rows = statement.executeUpdate(sql);
        System.out.println("影响行数:"+rows);
        //4、关闭连接,语句以及数据库
        statement.close();
        connection.close();
  • update语句
String updatesql="update dept set dname='图书管理员' where deptno=50;";
        Statement updatestatement = connection.createStatement();
        int updaterows = updatestatement.executeUpdate(updatesql);
        System.out.println("影响行数:"+updaterows);
        //4、关闭连接,语句以及数据库
        updatestatement.close();
        connection.close();
  • delete语句
//删除语句
        String deletesql="delete from dept where deptno=50;";
        Statement deletestatement = connection.createStatement();
        int updaterows = deletestatement.executeUpdate(deletesql);
        System.out.println("影响行数:"+updaterows);
        //4、关闭连接,语句以及数据库
        deletestatement.close();
        connection.close();
  • select语句
        //查询语句
        String selecetsql="select * from emp where SAL>1000";
        Statement selectstatement = connection.createStatement();
        //该方法返回的是一个结果集对象
        ResultSet resultSet = selectstatement.executeQuery(selecetsql);
        //处理结果集,现在我们没啥好处理的,就直接遍历输出吧
        //next判断当前光标的位置是否有值,它不会自动下移,除非你在调用一次
        if(resultSet.next()){
            //条件成立表示光标指示的地方有值
            //获取当前行的第i个值
            //注意JDBC所有地方都是以下标1开始
            //不管你是什么值,返回的类型都以string类型取出,当然你可以指定类型
            String s1=resultSet.getString(1);
            String s2=resultSet.getString(2);
            String s3=resultSet.getString(3);
            String s4=resultSet.getString(4);
            String s5=resultSet.getString(5);
            String s6=resultSet.getString(6);
            String s7=resultSet.getString(7);
            String s8=resultSet.getString(8);
            System.out.println(s1+" "+s2+" "+s3+" "+s4+" "+s5+" "+s6+" "+s7+" "+s8);
        }
        //4、关闭连接,语句以及数据库
        resultSet.close();
        selectstatement.close();
        connection.close();

改进版本,

       //查询语句
        String selecetsql="select * from emp where SAL>1000";
        Statement selectstatement = connection.createStatement();
        //该方法返回的是一个结果集对象
        ResultSet resultSet = selectstatement.executeQuery(selecetsql);
        //处理结果集,现在我们没啥好处理的,就直接遍历输出吧
        //next判断当前光标的位置是否有值,它不会自动下移,所以我用while让它一直执行,直到它变为false
        while (resultSet.next()){
            //条件成立表示光标指示的地方有值
            //获取当前行的第i个值
            //注意JDBC所有地方都是以下标1开始
            //不管你是什么值,返回的类型都以string类型取出,当然你可以指定类型

            for (int i = 1; i < 9; i++) {
                System.out.print(resultSet.getString(i)+" ");
            }
            System.out.println();
        }
        //4、关闭连接,语句以及数据库
        resultSet.close();
        selectstatement.close();
        connection.close();

select查询注意事项

  • 上面result.tostring()里面可以是列的名字。以后我们常用的是直接放列名而不是数字,不健壮。
  • 注意里面的名字是result结果集中列的名字,不一定是数据库中的列名,因为你可能查的时候,给一个列起了别名,那么你括号里就应该是别名。
注意释放时先释放result,在释放statement,最后释放connection。

巩固练习

声明:我太懒了,就把代码全部粘贴进来,各位见谅!

package com.sj.www;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class SQLconnectiontest02 {
    public static void main(String[] args) throws Exception {
        //Java中使用jdbc练习1
        //--以下皆是读取配置文件信息--
        Properties properties = new Properties();
        InputStream path = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
        properties.load(path);
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");
        //--配置文件读取,到此结束--

        //--Class.forName(driver);可以不写--
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);
        String sql="select e1.ENAME as '员工姓名',e2.ENAME as '老板姓名' from emp e1 left join emp e2 on e1.MGR=e2.EMPNO";
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        System.out.println("员工名:"+"\t"+"老板名:");
        while (resultSet.next()){
            System.out.println(resultSet.getString("员工姓名")+"\t"+resultSet.getString("老板姓名"));
        }
        //关闭
        resultSet.close();
        statement.close();
        connection.close();
    }
}


package com.sj.www;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class SQLconnectiontest03  {
    public static void main(String[] args) throws Exception {
        //读取配置文件
        Properties properties = new Properties();
        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
        properties.load(resourceAsStream);
        //getProperty中文意思:获取属性
        String sqlurl = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");
        //--至此配置文件的作用完成--
        //此处可以省略,给Java装了一个mysql驱动
        Class.forName(driver);
        //dirvermanager
        Connection connection = DriverManager.getConnection(sqlurl,user,password);
        Statement statement = connection.createStatement();
        String sql="select DEPTNO, avg(SAL)\n" +
                "from emp\n" +
                "group by DEPTNO\n" +
                "having avg(SAL) > 2500;\n";
        System.out.println("找出每个部门的平均薪资,要求显示平均薪资高于2500的");
        ResultSet resultSet = statement.executeQuery(sql);
        System.out.println("部门号"+"\t"+"平均薪资");
        while (resultSet.next()){
            System.out.println(resultSet.getString("DEPTNO")+"\t"+resultSet.getString("avg(SAL)"));
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}


package com.sj.www;

import java.io.IOException;
import java.io.InputStream;
import java.lang.invoke.VarHandle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class SQLconnectiontest04 {
    public static void main(String[] args) throws Exception {
        //练习
        //--依旧是读取配置文件--
        Properties properties = new Properties();
        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
        properties.load(resourceAsStream);
        String sqlurl = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");
        //--以上每个字段都会用到

        Class.forName(driver);
        Connection connection = DriverManager.getConnection(sqlurl, user, password);
        Statement statement = connection.createStatement();
        String sql = "select e.ENAME as '员工', e.SAL '薪资',t.DEPTNO as'部门编号'\n" +
                "from emp e\n" +
                "         join (select e.DEPTNO, max(e.SAL) as 'maxsal' from emp e group by e.DEPTNO) t\n" +
                "              on e.DEPTNO = t.DEPTNO\n" +
                "where e.SAL = t.maxsal\n" +
                "order by e.SAL asc";
        ResultSet resultSet = statement.executeQuery(sql);
        System.out.println("员工" +
                "\t\t\t" +
                "薪资"+"\t\t"+"部门号");
        while (resultSet.next()) {
            System.out.println(resultSet.getString("员工") + "\t" + resultSet.getDouble("薪资")+"\t" +
                    resultSet.getInt("部门编号"));
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}


package com.sj.www;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class SQLconnectiontest005 {
    public static void main(String[] args) throws Exception {
        //继续练啊啊啊啊啊啊啊啊啊啊啊
        //-首先读取配置文件
        Properties properties = new Properties();
        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
        properties.load(resourceAsStream);
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");
        //--结束
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);
        Statement statement = connection.createStatement();
        String sql = "select e.ENAME as'员工姓名',e.SAL as'员工薪资',t.平均薪资 as '所在部门平均薪资'\n" +
                "from emp e join (select e2.DEPTNO as '部门编号', avg(e2.SAL) as '平均薪资' from emp e2 group by e2.DEPTNO)\n" +
                "t on e.DEPTNO=t.部门编号\n" +
                "where e.SAL>t.平均薪资";
        ResultSet resultSet = statement.executeQuery(sql);
        System.out.println("哪些人的薪水在部门的平均薪水之上?");
        while (resultSet.next()){
            System.out.println(resultSet.getString("员工姓名")+resultSet.getString("员工薪资")+" " +
                    " "+resultSet.getString("所在部门平均薪资"));
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}

package com.sj.www;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class SQLconnectiontest006 {
    public static void main(String[] args) throws Exception {
        //继续练
        //--读取配置文件--
        Properties properties = new Properties();
        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("sql.properties");
        properties.load(resourceAsStream);
        String url = properties.getProperty("url");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String driver = properties.getProperty("driver");
        //----end---
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);
        Statement statement = connection.createStatement();
        String sql="select e.DEPTNO as '部门号', avg(s.GRADE) as '平均薪水等级'\n" +
                "from emp e\n" +
                "         left join salgrade s on e.SAL between s.LOSAL and s.HISAL\n" +
                "group by e.DEPTNO;";
        ResultSet resultSet = statement.executeQuery(sql);
        System.out.println("#取得部门中所有人的平均的薪水等级");
        while (resultSet.next()){
            System.out.println("部门:"+resultSet.getString("部门号")+"\t"+"平均薪资等级:"+resultSet.getString("平均薪水等级"));
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}

至于增删改,我就不演示了,比较简单,记住语句结构就行了
update 表名 set 要修改的列名=值 where 具体到哪一行
insert into 表名(各个列名字) values(要插入的每个列的值)
delete from 表名 where 具体的哪一行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keyle777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值