热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JDBC操作MySQL数据库案例

JDBC操作MySQL数据库案例1importjava.sql.Connection;2importjava.sql.DriverManager;3importjava.sql.P

JDBC操作MySQL数据库案例

1 import java.sql.Connection;
2 import java.sql.DriverManager;
3 import java.sql.PreparedStatement;
4 import java.sql.ResultSet;
5 import java.sql.Statement;
6
7 import org.junit.Test;
8
9 public class JDBCTest {
10 @Test
11 public void test() throws Exception {
12 Connection con = null;//定义引用
13 Statement stmt = null;
14 ResultSet rs = null;
15 //规范的代码格式,try catch finally
16 try {
17 String driverClassName = "com.mysql.jdbc.Driver";
18 String url = "jdbc:mysql://localhost:3306/exam";
19 String username = "root";
20 String password = "123";
21
22 Class.forName(driverClassName); //加载
23 con = DriverManager.getConnection(url, username, password); //连接
24 stmt = con.createStatement(); //可以理解为创建SQL语句发射器
25
26 //executeUpdate方法,可以执行增删改语句(INSERT, UPDATE, DELETE),返回被改变的记录条数
27 String sql="DELETE FROM stu";
28 int r = stmt.executeUpdate(sql);
29 System.out.println("共删除了"+r+"条记录!");
30
31 //executeQuery方法,用于执行查询操作(SELECT),返回结果集
32 String sql2="select * from emp";
33 rs = stmt.executeQuery(sql2);
34 while(rs.next()) { //把光标向下移动一行,并判断下一行是否存在!
35 int empno = rs.getInt(1); //通过列编号来获取该列的值!
36 String ename = rs.getString("ename"); //通过列名称来获取该列的值
37 double sal = rs.getDouble("sal");
38 System.out.println(empno + ", " + ename + ", " + sal);
39 }
40 } catch(Exception e) {
41 throw new RuntimeException(e);
42 } finally {
43 // 一定要关闭!!!!!!
44 if(rs != null) rs.close();
45 if(stmt != null) stmt.close();
46 if(con != null) con.close();
47 }
48 }
49 @Test
50 /**
51 * 预处理方式
52 * 优点:灵活,效率高,防SQL攻击
53 * SQL攻击例子:
54 * 若:sql = "select * from t_user where username='" + username + "' and password='" + password + "'";
55 * username = "a' or 'a'='a";
56 * password = "a' or 'a'='a";
57 * 最后拼成的语句为:
58 * select * from t_user where username='a' or 'a'='a" and password='a' or 'a'='a'
59 * 永远为true。
60 */
61 public void test2() throws Exception {
62 Connection con = null;//定义引用
63 ResultSet rs = null;
64 PreparedStatement pstmt=null;
65 try {
66 String driverClassName = "com.mysql.jdbc.Driver";
67 //mysql默认预处理是关闭的,加上这两个参数之后可以开启预处理
68 String url = "jdbc:mysql://localhost:3306/exam?useServerPrepStmts=true&cachePrepStmts=true";
69 String username = "root";
70 String password = "123";
71 Class.forName(driverClassName);
72 con = DriverManager.getConnection(url, username, password);
73
74 String sql="select * from emp where empno=? and job=?";
75 pstmt = con.prepareStatement(sql);
76 pstmt.setInt(1, 1001);
77 pstmt.setString(2, "文员");
78 rs =pstmt.executeQuery();
79 if(rs.next())
80 {
81 System.out.println(rs.getString("ename"));
82 }
83 } catch(Exception e) {
84 throw new RuntimeException(e);
85 } finally {
86 if(rs != null) rs.close();
87 if(pstmt != null) pstmt.close();
88 if(con != null) con.close();
89 }
90 }
91 }

View Code

 

转:https://www.cnblogs.com/fengmingyue/p/6040463.html



推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
author-avatar
董鹏飞80
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有