数据库的基本操作

查询数据

在开始前先简单地介绍一下什么是静态SQL和动态SQL:

静态SQL,在编译阶段就可以确定数据库要做什么事情。在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,例如在Java的一段代码中有一个待执行的SQL“select * from product where product_price>5”,在Java编译阶段,就可以将这段SQL交给数据库管理系统去分析,数据库软件可以对这段SQL进行语法解析,生成数据库方面的可执行代码,这样的SQL称为静态SQL。

动态SQL,而如果嵌入的SQL没有明确给出,如在Java中定义了一个字符串类型的变量sql:String sql;,然后采用PreparedStatement对象的execute方法去执行这个sql,该sql的值可能等于从文本框中读取的一个SQL或者从键盘输入的SQL,但具体是什么,在编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL。
例如每一种数据库软件都有能够执行SQL语句的界面,那个界面接收的SQL就是动态SQL,因为数据库厂商在做这个界面时,并不知道用户会输入哪些SQL,只有在该界面执行后,接收了用户的实际输入,才知道SQL是什么。
另外还要注意一点,在SQL中如果某些参数没有确定,如"select * from product where product_price>? and product_price<?",这种语句是静态SQL,不是动态SQL,虽然个别参数的值不知道,但整个SQL的结构已经确定,数据库是可以将它编译的,在执行阶段只需将个别参数的值补充进来即可。

转载于:https://www.cnblogs.com/FengzZ/p/4890045.html

简单地说就是:
静态sql:语句类型在编程时候必须是确定好的,可以还有某些参数还未确定;
动态sql:语句类型可以在运行期间指定,可以在运行过程中键盘或其他途径输入SQL语句。

使用Statement实例执行静态SELECT语句查询记录

例:

package mydatabase;import java.sql.*;public class Test2 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password="xxx";static {try{//注册JDBC驱动程序Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace();            //输出捕获到的异常信息}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);//获得数据库连接Statement statement = connection.createStatement();     //createStatement()方法创建并返回一个Statement实例String sql = "select * from product";                   //定义静态SELECT语句ResultSet resultSet = statement.executeQuery(sql);      //执行静态SELECT语句while(resultSet.next()){                                //遍历结果集,通过next()方法可以判断是否还存在符合条件的记录String name = resultSet.getString(1);   //通过列索引获得指定列的值int price = resultSet.getInt(3);        //通过列索引获得指定列的值System.out.println(name+" "+price);                 //打印表中信息}statement.close();                                      //立即释放Statement实例占用的数据库和JDBC资源connection.close();                                     //立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接}catch (SQLException e){e.printStackTrace();}}
}

结果:

通过PreparedStatement实例执行动态SELECT语句查询记录

例:

package mydatabase;import java.sql.*;public class Test4 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password = "xxx";static {try{Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace();}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);//获得数据库连接Statement statement = connection.createStatement();                     //createStatement()方法创建并返回一个Statement实例String sql = "select *from product";                                    //定义静态SELECT语句PreparedStatement preparedStatement = connection.prepareStatement(sql); //预处理动态INSERT语句ResultSet resultSet = preparedStatement.executeQuery();                 //执行动态INSERT语句ResultSetMetaData metaData = resultSet.getMetaData();                   //获得ResultSetMetaData类的实例System.out.print(metaData.getColumnName(1)+"  ");                       //通过列索引获得指定列的值System.out.print(metaData.getColumnName(2)+"  ");System.out.println(metaData.getColumnName(3));                          //通过列索引获得指定列的值while(resultSet.next()){String name = resultSet.getString(1);String type = resultSet.getString(2);int price = resultSet.getInt(3);System.out.println(name+"  "+type+"  "+price);}resultSet.close();preparedStatement.close();connection.close();}catch (SQLException e){e.printStackTrace();}}
}

结果:

插入数据

通过Statement实例执行静态INSERT语句添加单条记录

例:

package mydatabase;import java.sql.*;public class Test5 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password = "xxx";static {try{Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace();            //输出捕获的异常信息}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);Statement statement = connection.createStatement();String sql = "insert into product (product_name,product_type,product_price,regist_date) " +"values('内存卡','电子用品',100,'2020-6-3'),('256G硬盘','电子用品',500,'2020-6-3')";statement.executeUpdate(sql);       //执行INSERT语句statement.close();connection.close();System.out.println("插入数据成功!");}catch (SQLException e){e.printStackTrace();}}
}

结果:

通过PreparedStatement实例执行动态INSERT语句批量添加记录

例:

package mydatabase;import java.sql.*;public class Test6 {private static final String url = "jdbc:mysql://localhost:3306/study";private static final String user = "root";private static final String password = "xxx";static {try{Class.forName("com.mysql.cj.jdbc.Driver");}catch (ClassNotFoundException e){e.printStackTrace();}}public static void main(String[]args){try{Connection connection = DriverManager.getConnection(url,user,password);String [][] records = {{"雨伞","生活用品","20","2020-6-3"},{"风扇","生活用品","150","2020-6-3"}};String sql = "insert into product(product_name,product_type,product_price,regist_date) values(?,?,?,?)";//定义动态INSERT语句PreparedStatement preparedStatement = connection.prepareStatement(sql);                                 //预处理动态INSERT语句preparedStatement.clearBatch();                                             //清空Batchfor (int i=0;i<records.length;i++){preparedStatement.setString(1,records[i][0]);           //为参数赋值preparedStatement.setString(2,records[i][1]);           //为参数赋值preparedStatement.setInt(3, Integer.valueOf(records[i][2]));//为参数赋值preparedStatement.setDate(4, Date.valueOf(records[i][3]));//为参数赋值preparedStatement.addBatch();                                           //将INSERT语句添加到Batch中}preparedStatement.executeBatch();                                           //批量执行Batch中的INSERT语句preparedStatement.close();connection.close();System.out.println("插入数据成功!");}catch (SQLException e){e.printStackTrace();}}
}

结果:

JDBC编程:2(数据库的基本操作)相关推荐

  1. JDBC编程(数据库增添、查询、删除方法的定义)

    JDBC编程即JAVA数据库连接,数据库连接完成后,可在eclipse里面执行相关数据库的查询,删除,增添等操作 为了JDBC程序可以跨平台,我们首先要加载相应的驱动文件 以连接MySQL数据库为例 ...

  2. MySQL数据库 --- Java的JDBC编程

    文章目录 Java的JDBC编程 1. 数据库编程的必备条件 2. MySQL驱动包的安装 3. idea 中 驱动包的部署 4. Java的数据库编程: JDBC 5. JDBC API 6. JD ...

  3. jdbc和mysql做游戏排行榜_MySQL数据库与JDBC编程

    欢迎关注公众号:xfxuezhang MySQL数据库与JDBC编程 JDBC (Java Database Connectivity) DDL(Data Definition Language,数据 ...

  4. 数据库编程连接mysql_使用JDBC编程-连接MySQL数据库

    作者:李老师,吕老师              2019-09-23 准备工作: 1.首先安装MySQL5.5.30 64位:链接:https://pan.baidu.com/s/1H99PH-jRq ...

  5. java连接as400数据库,原创:用JDBC访问AS/400数据 配置与JDBC编程要点Windows系统 -电脑资料...

    发了半天了,只见鱼过,不见冒泡,正在疑惑各位大大是否对此题目不感兴趣呢?luoshengzh大大的鼓励来了,谢谢luoshengzh, 发了半天了,只见鱼过,不见冒泡,正在疑惑各位大大是否对此题目不感 ...

  6. Java - 数据库JDBC编程

    本节目标 数据库驱动 JDBC的概念及作用 掌握JDBC的工作原理 掌握JDBC中几个常用接口和类 掌握基于数据库的应用程序开发流程 1.数据库编程的必备条件 编程语言,如Java,C.C++.Pyt ...

  7. 基于JDBC的MySQL数据库编程

    ✨博客主页: 荣 ✨系列专栏: MySQL ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. JDBC概述 二. JDBC前置工作 1. 准备好MySQL驱动包 2. 创建项目 三. JD ...

  8. Java编程 JDBC连接Oracle数据库

    Part1 JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...

  9. JDBC编程--jdbc基本操作步骤

    JDBC即java数据库互连,是java语言和数据库之间独立于数据库的连接标准API,JDBC从根本上来说是一种规范,具体的实现需要依赖于具体数据库生产商提供jar包[驱动],提供了统一的接口用于访问 ...

最新文章

  1. 渡神纪帧数测试软件,渡神纪芬尼斯崛起配置要求高吗 渡神纪配置要求详细介绍_游侠网...
  2. java byte大小_Java中byte大小格式化
  3. IDEA快速入门(Mac版)
  4. iOS Hacker 越狱后开发和逆向工具准备
  5. php改vue,修改.vue · 柳鑫鹏/1702phpA - Gitee.com
  6. 面对枯燥的源码,如何才能看得下去
  7. 怎么解决缺少java.doc_java 生成doc帮助文档时出现的问题
  8. 解决手机网站点击出现蓝色框的问题
  9. LNMP源码安装教程
  10. SQL Server 获取日期是星期周几(默认从周日开始到周六 1-7)
  11. Linux检查服务器cpu状态脚本,Linux服务器硬件运行状态及故障邮件提醒的监控脚本分享...
  12. python 数据分析实践--(1)收入预测分析
  13. 视网膜正常oct图_眼科泰斗经验分享:OCT检查图像采集及解读分析(非常值得收藏)...
  14. 快速爬取链家网的房源信息
  15. 音频耦合电容容值大小如何确定
  16. 花卉识别python_基于深度学习的花卉识别系统设计与实现
  17. 愿世界永无 bug!再也不想熬夜加班了!
  18. java web中图形验证码的生成(英文和数字混合的验证码)
  19. ACRCOCAD盘凸轮DMIS程序
  20. 集装箱储能系统本地服务器,0.5MW-1MWh集装箱储能系统方案

热门文章

  1. 【精华】【经典】自动化循环操作方法当前网页方法,可以用于本地化AI智能自动抓取网页资源信息,类似爬虫功能
  2. IDEA 连接MySQL数据库
  3. 使用awk,sort和uniq从ATS访问日志中统计出异常链接域名的次数排名
  4. linux内存布局及页面映射
  5. linux valgrind memCheck ---内存检查工具的可视化方法valkyrie
  6. java8 lambda 表达式详解
  7. Luogu 2470 [SCOI2007]压缩
  8. 以太坊RLP机制分析
  9. [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum
  10. UML中的六种关系的比较与学习