当前位置:   article > 正文

Java连接MySQL

java连接mysql

目录​​​​​​​

1 JDBC简介

2 使用 JDBC 连接数据库

2.1 使用流程

3 详细操作

3.1 导入 jar 包

4 通过 java 语言操作数据库

4.1 连接 Mysql 数据库

4.2 增、删、改、查操作

5 部分问题

5.1 数据库中文乱码问题

5.2 时区问题

5.3 数据库中存在空用户名情况

1 JDBC简介

JDBC:Java Database Connectivity 是一个独立于特定数据库管理系统,通用的 SQL 数据库存取和操作的公共接口,定义了一组标准,为访问不同的数据库提供了统一的途径。

JDBC 支持多种数据库,连通 Java 程序和数据库

2 使用 JDBC 连接数据库

2.1 使用流程

1、加载驱动,也就是数据库厂商提供的 jar 包,Java 程序和数据库的桥梁

2、创建 Connection 对象,连接 Mysql 数据库

3、创建 Statement 对象,由 Connection 产生,执行 SQL 语句

4、创建 ResultSet 对象,用来保存 Statement 执行后所产生的结果,将数据库记录映射成 Java 对象

3 详细操作

3.1 导入 jar 包

在项目中创建文件夹 libs (文件夹名字可以随意,并且也不一定需要创建文件夹,只是习惯而且比较规范),将 jar 包复制到文件夹中

 然后右键 jar 包,选择 ”添加为库“。

 或者选择 ”文件“ -> ”项目结构“ 

 选择 ”库“,点击 ”+“ 号,选择 ”java“,然后导入刚刚复制到项目的 jar 包

 然后点击确定即可。

4 通过 java 语言操作数据库

4.1 连接 Mysql 数据库

具体代码如下:

其中:serverTimezone=GMT%2B8 是用来消除时差。characterEncoding=utf8 是用来修改 java 程序与数据库数据连接时候的编码格式。
  1. package com.mingfa.util;
  2. import java.sql.*;
  3. public class JDBCUtil {
  4. /**
  5. * 创建连接
  6. * return 连接实例
  7. */
  8. public static Connection getConnection(){
  9. //加载驱动
  10. Connection connection = null;
  11. Statement statement = null;
  12. ResultSet resultSet = null;
  13. try {
  14. Class.forName("com.mysql.cj.jdbc.Driver");
  15. //创建连接
  16. String url = "jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8&characterEncoding=utf8";
  17. String user = "root";
  18. String pwd = "000914";
  19. connection = DriverManager.getConnection(url, user, pwd);
  20. } catch (Exception e){
  21. e.printStackTrace();
  22. }
  23. return connection;
  24. }
  25. /**
  26. * 释放资源
  27. */
  28. public static void release(Connection connection,Statement statement,ResultSet resultSet){
  29. try {
  30. if(connection != null) connection.close();
  31. if(statement != null) statement.close();
  32. if(resultSet != null) resultSet.close();
  33. } catch (SQLException throwables) {
  34. throwables.printStackTrace();
  35. }
  36. }
  37. }

4.2 增、删、改、查操作

  1. package com.mingfa.test;
  2. import com.mingfa.entity.Account;
  3. import com.mingfa.util.JDBCUtil;
  4. import java.sql.*;
  5. public class Test {
  6. public static void main(String[] args) {
  7. delete(123);//删除
  8. update(123, "JDBC");//修改
  9. add("MySQL");//增加
  10. query();//查询
  11. }
  12. //删除
  13. public static void delete(Integer id){
  14. Connection connection = null;
  15. Statement statement = null;
  16. ResultSet resultSet = null;
  17. try {
  18. connection = JDBCUtil.getConnection();//得到数据库的连接
  19. //定义SQL语句
  20. String sql = "delete from account where id = "+id;
  21. //执行SQL
  22. statement = connection.createStatement();
  23. int i = statement.executeUpdate(sql);//受影响行数
  24. System.out.println(i);
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. } finally {
  28. //释放资源
  29. JDBCUtil.release(connection, statement, resultSet);
  30. }
  31. }
  32. //修改
  33. public static void update(Integer id,String name){
  34. Connection connection = null;
  35. Statement statement = null;
  36. ResultSet resultSet = null;
  37. try {
  38. connection = JDBCUtil.getConnection();//得到数据库的连接
  39. //定义SQL语句
  40. String sql = "update account set name = '"+ name +"' where id = "+id;
  41. //执行SQL
  42. statement = connection.createStatement();
  43. int i = statement.executeUpdate(sql);//受影响行数
  44. System.out.println(i);
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. } finally {
  48. //释放资源
  49. JDBCUtil.release(connection, statement, resultSet);
  50. }
  51. }
  52. //添加
  53. public static void add(String name){
  54. Connection connection = null;
  55. Statement statement = null;
  56. ResultSet resultSet = null;
  57. try {
  58. connection = JDBCUtil.getConnection();//得到数据库的连接
  59. //定义SQL语句
  60. String sql = "insert into account(name) values ('"+ name +"')";
  61. //执行SQL
  62. statement = connection.createStatement();
  63. int i = statement.executeUpdate(sql);//受影响行数
  64. System.out.println(i);
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. } finally {
  68. //释放资源
  69. JDBCUtil.release(connection, statement, resultSet);
  70. }
  71. }
  72. //查询
  73. public static void query(){
  74. Connection connection = null;
  75. Statement statement = null;
  76. ResultSet resultSet = null;
  77. try {
  78. connection = JDBCUtil.getConnection();//得到数据库的连接
  79. //定义SQL语句
  80. String sql = "select * from account;";
  81. //执行SQL
  82. statement = connection.createStatement();
  83. resultSet = statement.executeQuery(sql);
  84. //遍历集合
  85. while (resultSet.next()) {
  86. int anInt = resultSet.getInt("id");//这里的信息需要与数据库中对应列的信息一致,包括数据类型,列名。例如 int 类型,列名为 id。
  87. String string = resultSet.getString("name");//这里的信息需要与数据库中对应列的信息一致,包括数据类型,列名。例如 varchar 类型,列名为 name。
  88. Account account = new Account(anInt, string);
  89. System.out.println(account);
  90. }
  91. } catch (Exception e) {
  92. e.printStackTrace();
  93. } finally {
  94. //释放资源
  95. JDBCUtil.release(connection, statement, resultSet);
  96. }
  97. }
  98. }

利用 PreparedStatement 进行数据库语言的建立,可以提高程序与数据库交互时候的安全性,防止发生 sql 注入 

eq:数据库的查询操作,其他操作是类似的,读者可以自己模仿

  1. public static void login(String name,String pwd){
  2. Connection connection = null;
  3. PreparedStatement statement = null;
  4. ResultSet resultSet = null;
  5. try {
  6. connection = JDBCUtil.getConnection();
  7. //定义SQL语句
  8. String sql = "select * from user where name = ? and pwd = ?";
  9. //执行SQL
  10. statement = connection.prepareStatement(sql);
  11. //其中 1 代表 上述 sql 语句的第一个 ? ,同理,2代表第二个
  12. statement.setString(1, name);//name 为我们输入的参数,代表我们想要找到的数据
  13. statement.setString(2, pwd);//pwd 同上
  14. resultSet = statement.executeQuery();
  15. if (resultSet.next()) System.out.println("登录成功");
  16. else System.out.println("登录失败");
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. } finally {
  20. JDBCUtil.release(connection, statement, resultSet);
  21. }
  22. }

5 部分问题

5.1 数据库中文乱码问题

报错提示为:报错Incorrect string value: ‘\xE5\xAD\x99\xE4\xBD\xB3...‘ for column ‘name‘ at row 1

或者数据库中中文显示 ??

原因可能是:

1、java 连接数据库的时候连接方式的编码格式问题。

解决方法:在url中加入 characterEncoding=utf8 即可。

eq:"jdbc:mysql://localhost:3306/test1?characterEncoding=utf8"。

2、在创建数据库或者数据表的时候选择了默认的编码格式,没有设置utf8。

解决方法:

若数据表还没有创建,则创建的时候加上 default charset = utf8;

eq:

若数据库还没有创建,则创建的时候也同样加上 default charset = utf8; 即可。

 若已经创建,则通过如下代码进行修改编码格式:

  1. alter database test character set utf8;
  2. alter table account2 character set utf8;
  3. alter table account2 change name name varchar(10) character set utf8;

 其中 test 为数据库名、account2 为数据表名、name 为数据表中的列名。

5.2 时区问题

报错提示为:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized

解决方法:在url中加入 serverTimezone=GMT%2B8 

eq:"jdbc:mysql://localhost:3306/test1?serverTimezone=GMT%2B8"

5.3 数据库中存在空用户名情况

使用错误的密码,或者不适用账号密码也同样可以登录数据库或者连接数据库。

解决方法:

1、进入 mysql 的 bin 目录,在搜索框中输入 cmd 。或者通过 cmd 的 cd 指令跳转到 mysql 的 bin 目录也可以。

2、登录 mysql

3、输入 select * from mysql.user where user=' '; 进行查询,查看当前的数据

4、删除空用户名:use mysql;  delete from user where user = ' ';

5、重载权限表 flush privileges;­

6、重启服务 service mysqld restart

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/698507
推荐阅读
相关标签
  

闽ICP备14008679号