1.JDBC:Java DataBase Connectivity 可以为多种关系型数据库DBMS 提供统一的访问方式,用Java来操作数据库

2.JDBC API 主要功能:

三件事,具体是通过以下类/接口实现:

DriverManager : 管理jdbc驱动

Connection: 连接(通过DriverManager产生)

  • Statement(PreparedStatement) :增删改查 (通过Connection产生 )
  • CallableStatement : 调用数据库中的 存储过程/存储函数 (通过Connection产生 )

Result :返回的结果集 (上面的Statement等产生 )

Connection产生操作数据库的对象:

  • Connection产生Statement对象:createStatement()
  • Connection产生PreparedStatement对象:prepareStatement()
  • Connection产生CallableStatement对象:prepareCall();

Statement操作数据库:

增删改:executeUpdate()

查询:executeQuery();

ResultSet:保存结果集 select * from xxx

next():光标下移,判断是否有下一条数据;true/false

previous(): true/false

getXxx(字段名|位置):获取具体的字段值

PreparedStatement操作数据库:

  1. public interface PreparedStatement extends Statement

因此

增删改:executeUpdate()

查询:executeQuery();

--此外

赋值操作 setXxx();

PreparedStatement与Statement在使用时的区别:

1.Statement:

sql

executeUpdate(sql)

2.

PreparedStatement:

sql(可能存在占位符?)

在创建PreparedStatement 对象时,将sql预编译 prepareStatement(sql)

executeUpdate()

setXxx()替换占位符?

3.jdbc访问数据库的具体步骤:

  • 导入驱动,加载具体的驱动类
  • 与数据库建立连接
  • 发送sql,执行
  • 处理结果集 (查询)

4.
数据库驱动
驱动jar               具体驱动类                                                                                连接字符串

MySQL               mysql-connector-java-x.jar com.mysql.jdbc.Driver                   jdbc:mysql://localhost:3306/数据库实例名

使用jdbc操作数据库时,如果对数据库进行了更换,只需要替换:驱动、具体驱动类、连接字符串、用户名、密码

5.

测试JDBC基本功能代码

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.sql.Statement;
  6.  
  7. public class JDBCDemo {
  8. private static final String URL = "jdbc:mysql://localhost:3306/mydatabase?serverTimezone=GMT%2B8";
  9. private static final String USERNAME = "root";
  10. private static final String PWD = "password";
  11.  
  12. public static void update() throws ClassNotFoundException, SQLException {// 增删改
  13. // a. 导入驱动,加载具体的驱动类
  14. Class.forName("com.mysql.cj.jdbc.Driver");
  15. // b.与数据库建立连接
  16. Connection connection = DriverManager.getConnection(URL, USERNAME, PWD);
  17. // c.发送sql,执行增删改查
  18. Statement stmt = connection.createStatement();
  19. //增加 String sql = "insert into student values(2,'李四',21)";
  20. //修改 String sql = "update student set name='张三' where id=1";
  21. //删除
  22. String sql = "delete from student where id=1";
  23. int count = stmt.executeUpdate(sql);
  24. if (count > 0) {
  25. System.out.println("操作成功!");
  26. }
  27. stmt.close();
  28. connection.close();
  29.  
  30. }
  31. public static void query() throws ClassNotFoundException, SQLException {// 增删改
  32. // a. 导入驱动,加载具体的驱动类
  33. Class.forName("com.mysql.cj.jdbc.Driver");
  34. // b.与数据库建立连接
  35. Connection connection = DriverManager.getConnection(URL, USERNAME, PWD);
  36. // c.发送sql,执行增删改[查]
  37. Statement stmt = connection.createStatement();
  38. char stuname='a';
  39. //模糊查询
  40. String sql = "select id,name,age from student where name like '%"+stuname+"%'";
  41. ResultSet rs=stmt.executeQuery(sql);
  42. //int count = stmt.executeUpdate(sql);
  43. while (rs.next()) {
  44. int id=rs.getInt("id");
  45. String name=rs.getString("name");
  46. int age=rs.getInt("age");
  47. System.out.println(id+"--"+name+"--"+age);
  48.  
  49. }
  50. rs.close();
  51. stmt.close();
  52. connection.close();
  53.  
  54. }
  55. public static void main(String[] args) throws ClassNotFoundException, SQLException {
  56. // update();
  57. query();
  58. }
  59. }

错误记录:

  1. Exception in thread "main" java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
  2. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
  3. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
  4. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
  5. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
  6. at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
  7. at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
  8. at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
  9. at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
  10. at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
  11. at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
  12. at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
  13. at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
  14. at JDBCDemo.query(JDBCDemo.java:35)
  15. at JDBCDemo.main(JDBCDemo.java:57)

解决办法

在连接数据库的URL结尾添加 ?serverTimezone=GMT%2B8 即可

JDBC原理及常见错误分析的更多相关文章

  1. 一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)

    JDBC全称又叫做Java DataBase Connectivity,就是Java数据库连接,说白了就是用Java语言来操作数据库.这篇文章主要是对JDBC的原理进行讲解.不会专注于其使用.主要是理 ...

  2. JDBC原理

    JDBC原理   JDBC是什么: Java Database Connectivity:Java访问数据库的解决方案 JDBC是Java应用程序访问数据库的里程碑式解决方案.Java研发者希望用相同 ...

  3. 前端开发环境之GRUNT自动WATCH压缩JS文件与编译SASS文件环境下Ruby安装sass常见错误分析

    前言: 1.sass编译为css文件,早先时刻写css,后来看了sass挺不错的,于是在新的项目中开始使用上了sass.(grunt需要ruby环境,所以需要先安装ruby,sass环境) ①安装ru ...

  4. 【JDBC】jdbc原理总结

    1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库 ...

  5. Unit01: JDBC原理 、 JDBC基础编程

    Unit01: JDBC原理 . JDBC基础编程 这个文件里面有两块内容: 1.用比较麻烦的方式连接数据库,test1(),test4() 2.创建DBTool,测试DBTool连接数据库 ,tes ...

  6. Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结

    Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结 1. 本文范围 1 2. Angular的优点 1 2.1. 双向数据绑定 1 2.2. dsl ...

  7. MySQL常见错误分析与解决方法总结

    MySQL常见错误分析与解决方法总结 一.Can't connect to MySQL server on 'localhost' (10061)翻译:不能连接到 localhost 上的mysql分 ...

  8. IOS常见错误分析解决(一直更新) 你值得收藏-综合贴

    -来自收藏总结 综合了好多的常见错误 1:clang failed with exit code 254 一:检測代码中 是否 有 NSLog 打印了 返回 void 的值. 2:Verify exi ...

  9. Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化

    Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化 一丶索引原理 什么是索引:       索引 ...

随机推荐

  1. 开源沙箱CuckooSandbox 介绍与部署

    1. 介绍 1.1应用  在工作中很多时候需要自己对一些可以程序,可执行文件进行检测,当然我们可以通过VT,微步,等一些开源的平台进行检测.现在我们通过自己搭建的开源的沙箱进行检测.所谓沙箱,是分离运 ...

  2. JAVA 通过POI 模版,导出excel

    如有不足,欢迎指正,谢谢 ! 1.Maven引入  POI jar包.模版和结果文件.rar下载 <dependency> <groupId>org.apache.poi< ...

  3. 【PAT甲级】1067 Sort with Swap(0, i) (25 分)

    题意: 输入一个正整数N(<=100000),接着输入N个正整数(0~N-1的排列).每次操作可以将0和另一个数的位置进行交换,输出最少操作次数使得排列为升序. AAAAAccepted cod ...

  4. 【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)

    题意: 输入一个正整数N(<=1000),接下来输入N个点的序号.如果刚才输入的序列是一颗二叉搜索树或它的镜像(中心翻转180°)的先序遍历,那么输出YES并输出它的后序遍历,否则输出NO. t ...

  5. floyd的魔改应用——洛谷P2419 [USACO08JAN]牛大赛Cow Contest 题解

    想找原题请点击这里:传送门 原题: 题目背景 [Usaco2008 Jan] 题目描述 N ( ≤ N ≤ ) cows, conveniently numbered ..N, are partici ...

  6. 指令——mdadm

    Mdadm命令详解 Linux内核中有一个md(multiple devices)模块在底层管理RAID设备,它会在应用层给我们提供一个应用程序的工具mdadm ,mdadm是linux下用于创建和管 ...

  7. 简单聊一聊Ansible自动化运维

    一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...

  8. SpringBoot笔记二:整合篇

    Spring Boot与缓存 jsr-107 Java Caching定义了5个核心接口分别是CachingProvider, CacheManager, Cache, Entry 和 Expiry. ...

  9. js缓慢运动,Math.ceil向上取整,floor向下取整

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. ES5中的this

    参考资料:>>> this的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理: this 永远指向最后调用它的那个对象 下面我们来看一个最简单的例子:(例子均来自参考资 ...