• MySQL数据库JDBC编程


    目录

    前言:

    项目中导入驱动包

    插入记录

    创建数据源

    连接数据库

    构造sql语句

    执行sql语句

    释放资源

    整体代码展示

    查看数据

    代码展示

    小结:


    前言:

        MySQL为Java提供了驱动包。通过Java程序实现的客户端,可以通过这个驱动包,把客户端和MySQL服务器进行网络通信

    项目中导入驱动包

        将驱动包下载好之后,直接复制到项目中的包中(我这里是lib包下)。然后点击下面的Add as Library导入到库中,之后就可以发现可以解析这个驱动包了,也就成功了。

    插入记录

    创建数据源

        首先需要创建数据源,它是描述数据库服务器在哪里,然后才可以经过客户端进行连接服务器。

    DataSource dataSource = new MysqlDataSource();

        这里是构造了一个datasource对象。采取向上转型的方式。这样的好处是,如果使用不同的数据库,它所提供的驱动包也会不一致,那么我们只需要改动这一处代码就可以。

        JDBC支持两种方式的风格。DriverManager和DataSource。DriverManager会利用反射的机制,并且它不支持重复连接,它会直接关闭物理连接。DataSource内置了数据库连接池,其中可以创建一定数量的数据库连接,并且支持重复连接,它只是回收了对象。这里介绍DataSource方式的风格。

    jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false

    • jdbc:mysql这个是jdbc下的MySQL。
    • 127.0.0.1特殊的ip地址,用来指向本电脑的ip,称为环回ip。只要服务器和客户端在同一个主机上就可以使用这个ip。
    • 3306MySQL程序的端口号,默认是3306。
    • test9数据库名。
    • characterEncoding=utf8描述了请求的编码字符集,这里是utf8。
    • useSSL=false关闭加密方式。

    设置URL,用户名及密码

    1. DataSource dataSource = new MysqlDataSource();
    2. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
    3. ((MysqlDataSource)dataSource).setUser("用户名");
    4. ((MysqlDataSource)dataSource).setPassword("密码");

        注意:这里需要向下转型。创建数据源需要确定数据库的具体位置,及一些信息。

    连接数据库

    Connection connection = dataSource.getConnection();

        注意:连接数据库是把这个客户端和服务器进行连接。这里要使用java.sql下的Connection。这里会抛异常,需要对异常进行处理。

    构造sql语句

    1. String sql = "insert into student values(1, 'aaa')";
    2. String sql = "insert into student values(?,?)";//设置通配符
    3. PreparedStatement statement = connection.prepareStatement(sql);//预处理
    4. //替换通配符
    5. statement.setInt(1, id);
    6. statement.setString(2, name);

    注意:

       有两种方式构造sql语句。第一种是直接写出来。第二种是设置通配符,通过接下来对sql进行预处理,返回的对象来设置通配符里面的值。第一个?位置是1,第二个?位置是2以此类推。

        这里使用PreparedStatement,优点是可以执行带或者不带参数的sql,sql语句会预编译在数据库系统,执行速度快于Statment对象。

    执行sql语句

    1. //执行sql语句,返回所影响的行数
    2. int ret = statement.executeUpdate();

        注意:执行插入,修改,删除时使用executeUpdate,查看记录使用executeQuery。插入时会返回所影响的行数。

    释放资源

    1. //释放资源,断开连接
    2. statement.close();
    3. connection.close();

        注意:当进行资源的利用,就需要去释放相应的资源。不然就很有可能造成内存泄漏。释放资源时,需要释放其他资源最终断开连接。即释放资源和连接资源顺序是相反的。

    整体代码展示

    1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    2. import javax.sql.DataSource;
    3. import java.sql.Connection;
    4. import java.sql.PreparedStatement;
    5. import java.sql.SQLException;
    6. import java.util.Scanner;
    7. public class JDBCInsertDemo {
    8. public static void main(String[] args) throws SQLException {
    9. //先创建DateSource数据源,描述数据库服务器在哪
    10. DataSource dataSource = new MysqlDataSource();
    11. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
    12. ((MysqlDataSource)dataSource).setUser("用户名");
    13. ((MysqlDataSource)dataSource).setPassword("密码");
    14. Scanner scanner = new Scanner(System.in);
    15. System.out.println("请输入学号:");
    16. int id = scanner.nextInt();
    17. System.out.println("请输入姓名:");
    18. String name = scanner.next();
    19. //建立连接
    20. Connection connection = dataSource.getConnection();
    21. //构造sql语句
    22. //String sql = "insert into student values(" + id + " , '" + name + "')";
    23. String sql = "insert into student values(?,?)";//设置通配符
    24. //对sql语句进行预处理,jdbc 中还需要搭配一个特定的对象, 来描述这里的 sql 的情况
    25. PreparedStatement statement = connection.prepareStatement(sql);
    26. //替换通配符
    27. statement.setInt(1, id);
    28. statement.setString(2, name);
    29. //执行sql语句,返回所影响的行数
    30. int ret = statement.executeUpdate();
    31. System.out.println(ret);
    32. //释放资源,断开连接
    33. statement.close();
    34. connection.close();
    35. }
    36. }

    查看数据

        这里和插入记录的差别是在执行sql时使用的方法不同,返回的结果不同。插入记录使用的是executeUpdate返回的结果是所影响的行数,查看记录使用的是executeQuery返回查看结果集合。然后只需要遍历这个集合就可以看见所查询的记录。

        注意:集合遍历时,是以行为单位进行遍历的。其中的参数填对应列的列名,方法就使用相对应的类型。

    代码展示

    1. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
    2. import javax.sql.DataSource;
    3. import java.sql.Connection;
    4. import java.sql.PreparedStatement;
    5. import java.sql.ResultSet;
    6. import java.sql.SQLException;
    7. public class JDBCSelectDemo {
    8. public static void main(String[] args) throws SQLException {
    9. //创建数据源,描述数据库服务器位置
    10. DataSource dataSource = new MysqlDataSource();
    11. ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test9?characterEncoding=utf8&useSSL=false");
    12. ((MysqlDataSource)dataSource).setUser("用户名");
    13. ((MysqlDataSource)dataSource).setPassword("密码");
    14. //建立连接
    15. Connection connection = dataSource.getConnection();
    16. //构造sql,预处理
    17. String sql = "select * from student";
    18. PreparedStatement statement = connection.prepareStatement(sql);
    19. //执行sql,返回结果集合
    20. ResultSet resultSet = statement.executeQuery();
    21. //遍历集合,打印数据
    22. while(resultSet.next()) {
    23. int id = resultSet.getInt("id");
    24. String name = resultSet.getString("name");
    25. System.out.println(id + " " + name);
    26. }
    27. //释放资源
    28. resultSet.close();
    29. statement.close();
    30. connection.close();
    31. }
    32. }

    小结:

        JDBC编程为我们操作数据库带来了很大的遍历,需要我们掌握和使用它。

  • 相关阅读:
    window通过vscode的ssh访问linux服务器-详细部署教程
    纯手写http服务器
    基于接口的动态代理: JDK动态代理
    python--数据容器--set(集合)
    OKR 锦囊妙计
    DevEco Studio如何在真机设备上运行HarmonyOS应用之必备的签名文件怎么做
    Qt QML学习资料链接
    sqoop导出到mysql出错
    PowerQuery 多级目录数据合并,并将目录转化为字段
    Spring AOP案例:测试业务层接口万次执行效率
  • 原文地址:https://blog.csdn.net/weixin_62353436/article/details/127952730