当前位置:   article > 正文

JDBC-Java链接MySQL数据库_java jdbc 连接数据库 链接串带账号密码

java jdbc 连接数据库 链接串带账号密码

        JDBC(Java DataBase Connectivity) 称为Java数据库连接。链接后,可以使用Java和SQL语言对数据库进行操作。


获取数据库中表的数据

事务的实现

对sql语句进行预加载


链接步骤

1. 注册驱动类,其中传入的字符串为导入的依赖中的Driver。

Class.forName("com.mysql.jdbc.Driver");

2. 通过 DriverManager 的 getConnection 方法获取数据库的连接。

  1. /**
  2. * 2.连接连接
  3. * getConnection(String url,String user, String password);
  4. * url: 连接字符串 (用于表述 要连接那台计算机的数据库 )
  5. * user :数据库账号
  6. * password: 数据库密码
  7. * url: jdbc:mysql://localhost:3306/数据库名称?参数名:参数值
  8. * jdbc: 协议 mysql:子协议
  9. * localhost:3306 主机端口
  10. */
  11. String url = "jdbc:mysql://localhost:3306/myschool?userUnicod=true&characterEncoding=utf8";
  12. String user = "root";
  13. String passwd = "root";
  14. Connection connection = DriverManager.getConnection(url, user, passwd);

这样就完成了数据库的链接 。那么如何对数据库进行操作呢?接下来需要在以上的步骤后面继续。

对数据库进行操作步骤

3. 获取数据库操作对象statement

Statement statement = connection.createStatement();

4. 执行SQL语句

  1. //编写SQL语句
  2. String sql = "UPDATE grade SET gradeName='一年级' WHERE gradeID =1";
  3. //执行SQL语句,返回值为受影响的行数
  4. int row = statement.executeUpdate(sql);

对数据库进行操作的完整代码

  1. // 声明数据库连接
  2. Connection connection = null;
  3. // 声明数据库操作对象
  4. Statement statement =null;
  5. try {
  6. Class.forName("com.mysql.jdbc.Driver");
  7. String url = "jdbc:mysql://localhost:3306/myschool?userUnicod=true&characterEncoding=utf8";
  8. String user = "root";
  9. String passwodr = "root";
  10. connection = DriverManager.getConnection(url, user, passwodr);
  11. statement = connection.createStatement();
  12. String sql = "UPDATE grade SET gradeName='一年级' WHERE gradeID =1";
  13. int row = statement.executeUpdate(sql);
  14. } catch (ClassNotFoundException e) {
  15. e.printStackTrace();
  16. } catch (SQLException e) {
  17. e.printStackTrace();
  18. } finally {
  19. try {
  20. // 释放资源 正用到关
  21. if(null!=statement){
  22. statement.close();
  23. }
  24. if (null != connection) {
  25. connection.close();
  26. }
  27. } catch (SQLException e) {
  28. e.printStackTrace();
  29. }
  30. }

获取数据库中表的数据

  1. package cn.xk.demoa;
  2. import cn.xk.entity.Student;
  3. import java.sql.*;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. public class Demo {
  7. public static void main(String[] args) {
  8. // 声明数据库连接
  9. Connection connection = null;
  10. // 声明数据库操作对象
  11. Statement statement = null;
  12. // 声明 查询返回的结果集
  13. ResultSet resultSet = null;
  14. // 声明集合 用于保存 学生集
  15. List<Student> studentList = new ArrayList<>();
  16. try {
  17. // 注册驱动类
  18. Class.forName("com.mysql.jdbc.Driver");
  19. String url = "jdbc:mysql://localhost:3306/myschool?userUnicod=true&characterEncoding=utf8";
  20. String user = "root";
  21. String passwodr = "root";
  22. // 通过DriverManager的getConnection 方法 获取数据的连接
  23. connection = DriverManager.getConnection(url, user, passwodr);
  24. System.out.println("数据库连接成功");
  25. //3.获取数据库操作对象
  26. statement = connection.createStatement();
  27. //4.执行SQL语句
  28. String sql = "select * from student";
  29. // 通过statement 的executeQuery(sql)方法 执行 查询语句
  30. // ResultSet 结果集
  31. resultSet = statement.executeQuery(sql);
  32. // 遍历结果集 行 和 列 组成的结果集
  33. // 通过next() 方法判断是否存在数据
  34. while (resultSet.next()) {
  35. Student student = new Student();
  36. //通过下标获取 虚拟结果集中的值 注意 下标从1开始 2 3 4 ....
  37. int stuNo = resultSet.getInt(1);
  38. student.setStudentNo(stuNo);
  39. // 通过列名 获取值
  40. String stuName = resultSet.getString("studentName");
  41. student.setStudentName(stuName);
  42. student.setLoginPwd(resultSet.getString("loginPwd"));
  43. student.setSex(resultSet.getString("sex"));
  44. student.setGradeId(resultSet.getInt("gradeId"));
  45. student.setPhone(resultSet.getString("phone"));
  46. student.setAddress(resultSet.getString("address"));
  47. student.setBornDate(resultSet.getString("bornDate"));
  48. // 将对象保存到集合中
  49. studentList.add(student);
  50. }
  51. System.out.println("-----------------");
  52. for (Student student : studentList)
  53. System.out.println(student);
  54. } catch (ClassNotFoundException e) {
  55. e.printStackTrace();
  56. } catch (SQLException e) {
  57. e.printStackTrace();
  58. } finally {
  59. try {
  60. // 释放资源 正用到关
  61. if (null != resultSet) {
  62. resultSet.close();
  63. }
  64. if (null != statement) {
  65. statement.close();
  66. }
  67. if (null != connection) {
  68. connection.close();
  69. }
  70. } catch (SQLException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
  75. }

运行结果

  1. Student{studentNo=10001, loginPwd='123', studentName='李文才', sex=男, gradeld=1, phone='13645667890', address='地址不详', bomDate='1994-04-12 00:00:00.0', email='null', identityCard='null'}
  2. Student{studentNo=10002, loginPwd='123', studentName='李斯文', sex=男, gradeld=1, phone='13645556793', address='河南洛阳', bomDate='1993-07-23 00:00:00.0', email='null', identityCard='null'}
  3. Student{studentNo=10003, loginPwd='123', studentName='张萍', sex=女, gradeld=1, phone='13642345112', address='地址不详', bomDate='1995-06-10 00:00:00.0', email='null', identityCard='null'}
  4. Student{studentNo=10004, loginPwd='123', studentName='韩秋洁', sex=女, gradeld=1, phone='13812344566', address='北京市海淀区', bomDate='1995-07-15 00:00:00.0', email='null', identityCard='null'}
  5. Student{studentNo=10005, loginPwd='123', studentName='张秋丽', sex=女, gradeld=1, phone='13567893246', address='北京市东城区', bomDate='1994-01-17 00:00:00.0', email='null', identityCard='null'}
  6. Student{studentNo=10006, loginPwd='123', studentName='肖梅', sex=女, gradeld=1, phone='13563456721', address='河北省石家庄市', bomDate='1991-02-17 00:00:00.0', email='null', identityCard='null'}
  7. Student{studentNo=10007, loginPwd='123', studentName='郭秦洋', sex=男, gradeld=1, phone='13056434411', address='上海市卢湾区', bomDate='1992-04-18 00:00:00.0', email='null', identityCard='null'}
  8. Student{studentNo=10008, loginPwd='123', studentName='何睛睛', sex=女, gradeld=1, phone='13053445221', address='广州市天河区', bomDate='1997-07-23 00:00:00.0', email='null', identityCard='null'}
  9. Student{studentNo=11111, loginPwd='123', studentName='郭靖', sex=男, gradeld=1, phone='13645667783', address='天津市河西区', bomDate='1990-09-08 00:00:00.0', email='null', identityCard='null'}
  10. Student{studentNo=20000, loginPwd='123', studentName='王宝宝', sex=男, gradeld=2, phone='15076552323', address='地址不详', bomDate='1996-06-05 00:00:00.0', email='null', identityCard='null'}
  11. Student{studentNo=20010, loginPwd='123', studentName='何小华', sex=女, gradeld=2, phone='13318877954', address='地址不详', bomDate='1995-09-10 00:00:00.0', email='null', identityCard='null'}
  12. Student{studentNo=30011, loginPwd='123', studentName='陈志强', sex=男, gradeld=3, phone='13689965430', address='地址不详', bomDate='1994-09-27 00:00:00.0', email='null', identityCard='null'}
  13. Student{studentNo=30012, loginPwd='123', studentName='李露露', sex=女, gradeld=3, phone='13685678854', address='地址不详', bomDate='1992-09-27 00:00:00.0', email='null', identityCard='null'}

事务的实现

使用JDBC实现MySQL的事务只需要在对数据库进行操作之前关闭MySQL的自动事务,并且在操作之后进行提交或者回滚,即可。

例如,完成驱动类注册,并且获取到数据库链接和数据库操作对象后进行如下操作:

  1. //关闭MySQL的自动事务
  2. connection.setAutoCommit(false);
  3. //执行SQL语句,返回受影响的行数
  4. int row = statement.executeUpdate(sql);
  5. //未报异常则提交事务
  6. connection.commit();

实现将grade表 gradeID=2 的项的gradeName字段改为“二年级”:

  1. public static void main(String[] args) {
  2. Connection connection = null;
  3. Statement statement = null;
  4. try {
  5. //加载驱动类
  6. Class.forName("com.mysql.jdbc.Driver");
  7. String url = "jdbc:mysql://localhost:3306/myschool?userUnicod=true&characterEncoding=utf8";
  8. String user = "root";
  9. String passwd = "root";
  10. //获取数据库的链接
  11. connection = DriverManager.getConnection(url, user, passwd);
  12. //获取数据库操作对象
  13. statement = connection.createStatement();
  14. //关闭自动事务
  15. connection.setAutoCommit(false);
  16. String sql = "UPDATE grade SET gradeName='二年级' WHERE gradeID =2";
  17. //返回受影响行数
  18. int row = statement.executeUpdate(sql);
  19. //未出现异常,则提交事务
  20. connection.commit();
  21. } catch (Exception e) {
  22. try {
  23. //出现异常,回滚
  24. connection.rollback();
  25. } catch (SQLException ex) {
  26. ex.printStackTrace();
  27. }
  28. e.printStackTrace();
  29. }finally {
  30. try {
  31. if(statement!=null)
  32. statement.close();
  33. if(connection!=null)
  34. connection.close();
  35. } catch (SQLException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }

对sql语句进行预加载

        为了防止SQL注入攻击等,我们需要对要执行的sql语句进行预加载。预加载时,我们需要将sql语句中的值全部替换为 ?(占位符,表示此处有一个值) ,然后再传入,进行执行。

传入的SQL语句格式

SELECT * FROM student WHERE studentNo = ? AND loginPwd = ?

步骤:

1. 连接数据库,通过PerparedStatment传入SQL语句进行预加载,获取到数据库操作对象perparedStatement。

preparedStatement = connection.prepareStatement(sql);

2. 处理占位符,为占位符赋值

  1. preparedStatement.setObject(1,"10001");
  2. preparedStatement.setObject(2,"123");

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

闽ICP备14008679号