<MySQL><JDBC>Java连接MySQL数据库并执行sql语句

目录

MySQL驱动包下载

连接MySQL数据库

1.载入MySQL驱动包至项目依赖

2.建立数据库连接

SQL语句的执行

1.执行SQL语句首先要和数据库建立连接

2.构建SQL语句字符串,末尾不带分号,例:

3.将SQL语句字符串,转为SQL语句对象

4.执行语句

5.回收资源


JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范,根据各个数据库提供的驱动包,使得sql能在Java中执行。(驱动包是为了将mysql的api转为符合JDBC规范的api,不符合JDBC的数据库api不能再Java中使用)

MySQL驱动包下载

1在Maven中央仓库搜索mysql,点击下图所示位置

2找到自己mysql对应版本的驱动包,点进去

3点击自动下载驱动包

连接MySQL数据库
1.载入MySQL驱动包至项目依赖

1.1新建目录,命名为lib

1.2将MySQL驱动包载入,复制进lib

1.3将lib添加为库

2.建立数据库连接

2.1创建数据源

        //1.创建数据源DataSource对象,数据源描述了要操作的数据库服务器来自哪里
        DataSource dataSource = new MysqlDataSource();
        //url
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://数据库服务器ip:端口号/数据库名?characterEncoding=utf8&useSSL=false");
        //用户名
        ((MysqlDataSource)dataSource).setUser("账户");
        //密码
        ((MysqlDataSource)dataSource).setPassword("密码");

例:

        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1234");

2.2建立连接

Connection connection = dataSourse.getConnection();

SQL语句的执行
1.执行SQL语句首先要和数据库建立连接

如上

2.构建SQL语句字符串,末尾不带分号,例:
String sql = "select * from student";
3.将SQL语句字符串,转为SQL语句对象
PreparedStatement statement = connection.prepareStatement(sql);
4.执行语句

执行查询语句,返回结果集ResultSet对象,结果集是一行一行的数据,每一行包含查询到的各个列,可通过next()方法访问下一行,通过get方法获取对应列数据

        //查询sql语句
        ResultSet resultSet = statement.executeQuery();

        while(resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id:" + id + "  name:" + name);
        }

执行其他语句,返回受影响行数

        String sql = "delete from student where id = 1";

        PreparedStatement statement = connection.prepareStatement(sql);

        //查询sql语句
        int n = statement.executeUpdate();
        System.out.println(n);

5.回收资源
        resultSet.close();
        statement.close();
        connection.close();

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
假设你已经有了一个Java类`T`,它对应着MySQL中的一张表,其中有一个名为`type`的字段。可以按照如下步骤实现传入`List<T>`批量统计`type`字段包含指定值的个数,并返回`List<Map>`的功能: 1. 引入MySQLJDBC驱动程序,连接MySQL数据库。 ```java Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); ``` 2. 构造SQL语句,使用`IN`关键字实现批量查询。 ```java StringBuilder sql = new StringBuilder("SELECT type, COUNT(*) AS count FROM mytable WHERE type IN ("); for (int i = 0; i < types.size(); i++) { sql.append("?"); if (i < types.size() - 1) { sql.append(","); } } sql.append(") GROUP BY type"); ``` 其中,`types`是包含指定值的`List`,`mytable`是MySQL中对应的表名。 3. 使用`PreparedStatement`对象执行SQL语句,替换占位符参数,得到结果集。 ```java PreparedStatement ps = conn.prepareStatement(sql.toString()); for (int i = 0; i < types.size(); i++) { ps.setString(i + 1, types.get(i)); } ResultSet rs = ps.executeQuery(); ``` 4. 将结果集转换为`List<Map>`的格式。 ```java List<Map<String, Object>> result = new ArrayList<>(); while (rs.next()) { Map<String, Object> map = new HashMap<>(); map.put("type", rs.getString("type")); map.put("count", rs.getInt("count")); result.add(map); } ``` 5. 关闭数据库连接,返回结果集。 ```java rs.close(); ps.close(); conn.close(); return result; ``` 完整的Java代码如下: ```java public List<Map<String, Object>> countTypes(List<T> list, List<String> types) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); StringBuilder sql = new StringBuilder("SELECT type, COUNT(*) AS count FROM mytable WHERE type IN ("); for (int i = 0; i < types.size(); i++) { sql.append("?"); if (i < types.size() - 1) { sql.append(","); } } sql.append(") GROUP BY type"); PreparedStatement ps = conn.prepareStatement(sql.toString()); for (int i = 0; i < types.size(); i++) { ps.setString(i + 1, types.get(i)); } ResultSet rs = ps.executeQuery(); List<Map<String, Object>> result = new ArrayList<>(); while (rs.next()) { Map<String, Object> map = new HashMap<>(); map.put("type", rs.getString("type")); map.put("count", rs.getInt("count")); result.add(map); } rs.close(); ps.close(); conn.close(); return result; } ``` 需要注意的是,这里使用了`PreparedStatement`对象来执行SQL语句,可以防止SQL注入攻击,并且提高了SQL语句执行效率。同时,为了简化示例,这里使用了`Map`来保存每个`type`和对应的个数,实际开发中可以根据需要修改返回结果的格式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值