当前位置:   article > 正文

Java连接MySQL数据库_javamysql数据库连接

javamysql数据库连接

数据库DataBase,简称DB。

        按照一定的格式存储数据的一些文件的组合。

        顾名思义,存储数据的仓库。实际上就是一些文件,文件中存储了具有特定格式的数据。

数据库管理系统DataBaseManagement,简称DBMS。

        专门用来管理数据库中的数据。数据库管理系统可以对数据库中的数据进行增删改查。

        常见的数据库管理系统:Mysql、Oracle、MS、SqlServer、DB2

SQL:结构化查询语言

程序员编写SQL语句,DBMS执行语句,最终完成数据库路中数据的增删改查。

即:DBMS --执行--> SQL语句 --操作--> 数据库DB

MySql具有默认端口号:3306

        端口号port:任何一个软件(应用)都会有的。端口号是应用的唯一代表。

        端口号和IP地址在一块。IP地址用来定位计算机,而端口号用来定位计算机上的某个服务。

        在同一台计算机上,端口号不能重复,具有唯一性。

数据库中存储数据最基本的单位就是表。任何一张表都有行、列。行被称为数据、列被称为字段。

SQL语句的分类:

        DQL:数据查询语言,对数据进行查询:select

        DML:数据操作语言,对数据进行增删改:insert、delete、update

        DDL:数据定义语言,对数据进行定义:create、drop、alter

        TCL:事务控制语言,包括事务提交commit、事务回滚rollback

        DCL:数据控制语言,包括授予权限grant、撤销权限revoke

MySQL服务监听3306端口,因此客户端应该去连接3306端口。

连接Mysql的指令:mysql -h 主机IP -P 端口 -u 用户名 -p密码

        -p密码中间没有空格

        如果不写-h、-P,默认会是主机的3306端口

        实际工作中,大多不用3306端口号作为Mysql的端口号,因为很容易被攻击。

JDBC:为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。

        Java程序使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统·,从而操作数据库。

JDBC原理示意:

        Java程序如果想要操作不同的数据库,方法不统一,不利于整个程序的管理。

        因此改进:规定一套接口规范,让不同的数据库厂商实现,Java程序中统一调用接口的方法

即:Mysql、Oracle、DB2、SQL Server等等DBMS实现接口【驱动程序jar文件】

        Java程序中调用接口中的方法完成数据库的连接

利用JDBC完成对数据库的操作:

1.在项目下创建lib文件夹,将mysql.jar包拷贝到文件中,并add to project加入到项目中

2.注册驱动

  1. // 创建Driver对象
  2. Driver driver = new Driver();

3.得到连接

  1. String url = "jdbc:mysql://127.0.0.1:3306/db01";
  2. // jdbc:mysql:// :表示规定好协议,按照jdbc的方式连接到mysql数据库
  3. // 127.0.0.1 :主机,也可以是localhost,表示连接ip地址
  4. // 3306 :表示监听3306端口
  5. // db01 :表示连接到db01数据库
  6. // 将数据库的用户名、密码放在properties对象中
  7. Properties properties = new Properties();
  8. // 其中,“user”、“password”是规定好的,后面的value值根据实际填写即可。
  9. properties.setProperty("user", "root"); // 用户名
  10. properties.setProperty("password", "kxg"); // 密码
  11. // 建立连接
  12. Connection connection = driver.connect(url, properties);

4.执行SQL语句

  1. String sql = "insert into actor values(1, 'jack', '男', '1970-1-1', '110');
  2. // Statement对象:用于执行静态的SQL语句并返回其生成的结果对象
  3. Statement statement = connect.createStatement();
  4. // 如果是DML语句,则返回影响的行数。即statement中存放的是执行语句数据库中受影响的行数
  5. int rows = statement.executeUpdate(sql);
  6. // 通过rows判断是否执行成功
  7. System.out.println(rows > 0 ? "成功" : "失败");

5.关闭资源

  1. statement.close();
  2. connect.close();

优化:        

        1.可以将数据库的相关信息写入properties配置文件中,通过配置文件读取信息

        2.注册驱动时,通过反射获得类对象,newInstance()获得Driver实例

        3.通过DriverManger代替Driver进行统一管理

  1. // 相关properties配置文件:
  2. user=root
  3. password=kxg
  4. url=jdbc:mysql://localhost:3306/db01
  5. driver=com.mysql.cj.jdbc.Driver
  1. // 连接数据库
  2. // 通过properties对象读取配置文件信息
  3. Properties properties = new Properties();
  4. properties.load(new FileInputStream("src//mysql.properties"));
  5. // 获取配置文件中的相关值
  6. String user = properties.getProperty("user");
  7. String password = properties.getProperty("password");
  8. String driver = properties.getProperty("driver");
  9. String url = properties.getProperty("url");
  10. // 利用反射加载driver类
  11. Class.forName(driver);
  12. // DriverManger创建连接
  13. Connection connection = DriverManger.getConnection(url, user, password);
  14. // 创建statement对象
  15. Statement statement = connection.createStatement();
  16. // 编写SQL语句
  17. String sql = "CREATE TABLE NEWS(id INT AUTO_INCREMENT, content VARCHAR(255), primary key(id));";
  18. // 执行SQL语句
  19. statement.executeUpdate(sql);
  20. // 关闭连接
  21. statement.close();
  22. connect.close();

介绍JDBC中常用的接口、类及其中的方法:

DriverManger:驱动管理类

        getConnection(url, user, password):获取与数据库的连接

Connection接口:

        createStatement():创建Statement对象

        PreparedStatement(sql):生成预处理对象

Statement接口:

        executeUpdate(sql):执行DML(update、insert、delete)语句,返回受到影响的行数

        executeQuery(sql):执行查询(select)语句,返回ResultSet对象

        execute(sql):执行任意SQL语句,返回布尔值

  1. // 演示SQL注入
  2. // 用户通过输入用户名、密码进行登录
  3. Scanner scanner = new Scanner(System.in);
  4. String name = "";
  5. String pwd = "";
  6. System.out.print("请输入用户名:");
  7. name = scanner.nextLine();
  8. System.out.print("请输入密码:");
  9. pwd = scanner.nextLine();
  10. // 建立与mysql的连接
  11. Properties properties = new Properties();
  12. properties.load(new FileInputStream("src//mysql.properties"));
  13. String user = properties.getProperty("user");
  14. String password = properties.getProperty("password");
  15. String url = properties.getProperty("url");
  16. String driver = properties.getProperty("driver");
  17. Class.forName(driver);
  18. Connection connection = DriverManager.getConnection(url, user, password);
  19. Statement statement = connection.createStatement();
  20. String sql = "select * from admin where name = '" + name + "' and password = '" + pwd + "';";
  21. // 执行SQL语句
  22. ResultSet resultSet = statement.executeQuery(sql);
  23. // 关闭资源
  24. resultSet.close();
  25. statement.close();
  26. connection.close();
  27. // 用户在进行登录时,输入数据库中已经存在的用户名、密码,显示登录成功
  28. // 但是如果用户输入用户名输入的是:"1' or",而密码输入的是"or '1' = '1"时,也可登录成功
  29. // 这就是SQL注入,同时 or '1' = '1 也被称为万能密码。

PreparedStatement接口:

        executeUpdate(sql):执行DML(update、insert、delete)语句,返回受到影响的行数

        executeQuery(sql):执行查询(select)语句,返回resultSet对象

        execute(sql):执行任何SQL语句,返回布尔值

        setObject(占位符索引, 占位符的值):解决SQL注入的问题

  1. // prepareStatement:预处理,可以解决statement中的SQL注入问题
  2. Scanner scanner = new Scanner(System.in);
  3. String name = "";
  4. String pwd = "";
  5. System.out.print("请输入用户名:");
  6. name = scanner.nextLine();
  7. System.out.print("请输入密码:");
  8. pwd = scanner.nextLine();
  9. // 获取相关值
  10. Properties properties = new Properties();
  11. properties.load(new FileInputStream("src//mysql.properties"));
  12. String user = properties.getProperty("user");
  13. String password = properties.getProperty("password");
  14. String url = properties.getProperty("url");
  15. String driver = properties.getProperty("driver");
  16. // 注册驱动
  17. Class.forName(driver);
  18. // 得到连接
  19. Connection connection = DriverManager.getConnection(url, user, password);
  20. // 组织SQL语句
  21. String sql = "select * from admin where name = ? and password = ?;"; // ?:相当于占位符
  22. // 创建prepareStatement对象,并且与SQL语句建立连接
  23. PreparedStatement preparedStatement = connection.preparedStatement(sql);
  24. // 赋值操作
  25. preparedStatement.setString(1, name); // sql语句中第一个?补成name
  26. preparedStatement.setString(2, pwd); // SQL语句中第二个?补成pwd
  27. // 接收结果集
  28. ResultSet resultSet = preparedStatement.executeQuery();
  29. // 关闭连接
  30. resultSet.close();
  31. preparedStatement.close();
  32. connection.close();

ResultSet结果集:

        (光标一开始指向的是表格的最上面-第一行的上面(表头))

        next():光标向下移动一行,如果没有下一行,返回false

        previous():光标向上移动一行

        getObject(列的索引/列名):返回对应列的值,接收类型为object

  1. // 通过ResultSet遍历表中的数据
  2. // resultSet.next():光标向后移动,如果没有下一行,则直接返回false
  3. while (resultSet.next()) {
  4. // 得到每一行的数据
  5. int id = resultSet.getInt(1);
  6. String name = resultSet.getString(2);
  7. String sex = resultSet.getString(3);
  8. String birth = resultSet.getString(4);
  9. String phone = resultSet.getString(5);
  10. System.out.println(id + "\t" + name + "\t" + sex + "\t" + birth + "\t" + phone);
  11. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/852748
推荐阅读
相关标签
  

闽ICP备14008679号