24、jdbc操作数据库(1)

什么是jdbc?

看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API。

Jdbc有什么用?

数据库有多种,并且不同数据库操作时的方式和语句可能不太一样,当使用java 代码控制sql 调用时,不可能每一种数据库都弄一套 java 的代码,所以就声明了一个套操作数据库的接口,java程序员只需调用这一套接口即可,具体的接口实现由对应的数据库厂商实现,所以这里就又有了一个新的概念叫做数据库驱动,这个驱动就是不同数据库厂商实现 JDBC 接口的类的一个工具包,当时用jdbc操作数据库时,需要添加对应的数据库驱动包。

如何使用jdbc?

使用jdbc操作数据库有以下几步:

  1. 添加驱动
  2. 创建数据库连接
  3. 通过连接获取操作数据库的对象
  4. 发送执行sql语句
  5. 处理结果集
  6. 关闭jdbc对象

接下来详细的介绍一下

添加驱动并获取数据库连接。不同的数据库对应的驱动包不一样,添加驱动包(添加jar包)之后需要通过驱动去获取一个数据库连接,没什么好说的,直接上代码:

//声明一个配置文件jdbc.properties
#数据库驱动类
driver=com.mysql.jdbc.Driver
#连接数据库
jdbcUrl=jdbc:mysql://127.0.0.1:3306/fqx_webapp
#用户名
user=root
#密码
password=123456--------------------------------------------------------------//工具类(基本类)
public class DBUtil {/*** 获取配置文件信息* @return*/private static Properties getProperties() {InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties properties = new Properties();try {properties.load(inputStream);} catch (IOException e) {e.printStackTrace();}return properties;}/*** 获取数据库连接 java.sql.Connection的一个实例* @return*/public static Connection getConnection() {Connection connection = null;Properties properties = getProperties();String driver = properties.getProperty("driver");try {//加载数据库驱动Class.forName(driver);//使用驱动管理器获取数据库连接connection = DriverManager.getConnection(properties.getProperty("jdbcUrl"), properties);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return connection;}/*** 释放资源* @param resultSet* @param statement* @param connection*/public static void close(ResultSet resultSet , Statement statement , Connection connection) {try {if (resultSet != null) {resultSet.close();}if (statement != null) {statement.close();}if (connection != null) {connection.close();}} catch (Exception e) {e.printStackTrace();}}}

使用java对象数据库进行简单的增、删、改、查操作,代码如下:

public class Test {public static void main(String[] args) {Test test = new Test();
//		test.insert();
//		test.delete();
//		test.update();test.query();}//添加public void insert() {//获取数据库连接Connection connection = DBUtil.getConnection();//编写sql,需要传参数的地方使用 ? 来表示,叫做占位符String sql = "INSERT INTO USER (uname , password) VALUES (? , ?)";PreparedStatement prepareStatement = null;try {//通过数据库连接获取数据库操作对象prepareStatement = connection.prepareStatement(sql);//使用对应的值填充占位符,key是占位符的下标,下标在1开始prepareStatement.setObject(1, "zhangsan");prepareStatement.setObject(2, 18);//发送并sql,返回结果//增删改可以使用executeUpdate()方法,查询使用executeQuery()方法int update = prepareStatement.executeUpdate();System.out.println("是否添加成功:"+update);} catch (SQLException e) {e.printStackTrace();} finally {//关闭资源DBUtil.close(null, prepareStatement, connection);}}//删除public void delete() {Connection connection = DBUtil.getConnection();String sql = "DELETE FROM USER WHERE ID = ?";PreparedStatement prepareStatement = null;try {prepareStatement = connection.prepareStatement(sql);prepareStatement.setObject(1, 3);int update = prepareStatement.executeUpdate();System.out.println("是否删除成功:"+update);} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(null, prepareStatement, connection);}}//修改public void update() {Connection connection = DBUtil.getConnection();String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";PreparedStatement prepareStatement = null;try {prepareStatement = connection.prepareStatement(sql);prepareStatement.setObject(1, "wangwu");prepareStatement.setObject(2 , 2);int update = prepareStatement.executeUpdate();System.out.println("是否修改成功:"+update);} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(null, prepareStatement, connection);}}//查询public void query() {Connection connection = DBUtil.getConnection();String sql = "SELECT ID,UNAME,PASSWORD FROM USER";PreparedStatement prepareStatement = null;ResultSet resultSet = null;try {prepareStatement = connection.prepareStatement(sql);//获取到结果集resultSet = prepareStatement.executeQuery();List<Map<String, Object>> list = new ArrayList<>();//返回的相当于一张表,表中有一个指针,当调用resultSet.next()方法时,指针就往后移一次while(resultSet.next()){Map<String, Object> map = new HashMap<>(); //根据对应的字段名获取结果几种的值map.put("ID", resultSet.getObject("ID"));map.put("UNAME", resultSet.getObject("UNAME"));map.put("PASSWORD", resultSet.getObject("PASSWORD"));list.add(map);}System.out.println("查询出的信息:"+list);} catch (SQLException e) {e.printStackTrace();} finally {DBUtil.close(resultSet, prepareStatement, connection);}}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jzoj3918-蛋糕【二分】

正题 题目链接:https://jzoj.net/senior/#contest/show/2953/0 题目大意 n∗mn*mn∗m的矩阵&#xff0c;有数字&#xff0c;横着三刀竖着三刀分成16份使得最小那份最大。 解题思路 暴力枚举竖着的三刀&#xff0c;然后二分答案判定即可。 codecodecode #include<cstdio&g…

2017西安交大ACM小学期数论 [阅兵式]

阅兵式 发布时间: 2017年6月25日 12:53 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 阅兵式上&#xff0c;将士们排成一个整齐的方阵&#xff0c;每个将士面朝前方。问正中心的将士能向前看到几个将士&#xff1f;注意&#xff0c;一条直线上的将…

25、jdbc操作数据库(2)

说一下使用jdbc时涉及到的一些基本的接口和类 java.sql.Driver 是数据库驱动接口&#xff0c;com.mysql.jdbc.Driver是mysql对应的驱动&#xff0c;由数据库供应商实现&#xff0c;用于提供驱动&#xff0c;实现了java.sql.Driver接口。 java.sql.DriverManager 管理驱动的…

jzoj3919-志愿者【换根法,线段树,树形dp】

正题 题目链接:https://jzoj.net/senior/#main/show/3919 题目大意 nnn个点kkk个需要到达的点&#xff0c;然后求每个点出发经过这些点的最短路径。 解题思路 因为不用回去&#xff0c;答案就是以这点为根链接所有点的树减去离这个点最远点的距离。 我们用线段树维护最远点距…

2017西安交大ACM小学期数论 [水题]

水题 发布时间: 2017年6月25日 14:06 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 平均因数个数的统计对于估算数论题目复杂度具有非常重要的意义。小A同学听了今天的课后&#xff0c;于是想要自己写一个程序&#xff0c;求出1到n的平均因数个数…

26、jdbc操作数据库(3)

1、结果集的元数据操作 ResultSetMetaData 是描述ResultSet的元数据对象&#xff0c;可以通过元数据对象获取结果集的列信息&#xff0c;使用方式如下&#xff1a; public void query() {Connection connection DBUtil.getConnection();String sql "SELECT ID,UNAME u,…

jzoj3920-噪音【贪心,dp】

正题 题目链接:https://jzoj.net/senior/#main/show/3920 题目链接 nnn头牛&#xff0c;mmm个牛棚&#xff0c;可以清空kkk次。 每头牛会指定进入一个牛棚&#xff0c;进入后产生牛棚中牛数量的噪音值&#xff0c;然后清空可以清空一个牛棚的牛&#xff0c;求最少噪音值。 解…

2017西安交大ACM小学期数论 [完全平方数]

完全平方数 发布时间: 2017年6月24日 17:01 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 给定正整数b&#xff0c;求最大的整数a&#xff0c;使a(ab)是完全平方数。 输入 多组测试数据&#xff08;不超过10000组&#xff09;。 每组数据一个正整…

27、jdbc操作数据库(4)

数据库连接池是什么&#xff1f;为什么使用连接池&#xff1f; 当使用jdbc去操作数据库时&#xff0c;需要先获取连接&#xff0c;然后进行具体的数据库操作&#xff0c;最后释放连接。这一系列操作在演示一个demo时还可以使用&#xff0c;但是当访问数据库次数多了的时候&…

28、jdbc操作数据库(5)

介绍一个稍微封装了jdbc的工具类org.apache.commons.dbutils&#xff0c;使用dbutils可以简化对数据库操作程序的开发。 API介绍 接下来通过实例的方式说一下dbutils的具体使用 添加jar包&#xff1a;commons-dbutils-1.7.jar 增、删、改 进行增、删、改操作&#xff0c;在…

jzoj3910-Idiot的间谍网络【倍增,dfs】

正题 题目链接:https://jzoj.net/senior/#main/show/3910 题目大意 nnn个点的森林mmm个操作&#xff0c; 合并两棵树让xxx节点到根节点的路径标记上cntcntcnt。并让cntcntcnt查询一个节点xxx是否有标记yyy。 解题思路 这里考虑离线的算法。我们可以先将这个森林的最终状态构…

2017西安交大ACM小学期数论 [更新学号]

发布时间: 2017年6月24日 20:27 最后更新: 2017年7月3日 09:27 时间限制: 3000ms 内存限制: 128M 描述 某知名高校有n个学生&#xff0c;每个学生有一个唯一ID。但这些ID有7位数字&#xff0c;学生总是记不住&#xff0c;于是学校想了一个办法。它们将所有ID对m取模作为学…

jzoj4815-ksum【堆】

正题 题目链接:https://jzoj.net/senior/#main/show/4815 题目大意 nnn个数的序列&#xff0c;求前kkk大的子段。 解题思路 一个区间的答案肯定比他的所有子区间要大&#xff0c;所以我们先把(1,i)(1,i)(1,i)都丢进堆里&#xff0c;然后每次取出最大的再将(l1,r)(l1,r)(l1,r)…

2017西安交大ACM小学期数论 [等差数列]

等差数列 发布时间: 2017年6月25日 13:42 最后更新: 2017年7月3日 09:27 时间限制: 1000ms 内存限制: 128M 描述 给定正整数n&#xff0c;试问存在多少个和为n的等差数列&#xff1f; 当然&#xff0c;等差数列中每一项要为非负整数&#xff0c;且不考虑降序的等差数列。…

29、jdbc操作数据库(6)

通常真正实际开发时&#xff0c;dao层虽然会涉及很多实体&#xff0c;但是可以借助泛型、反射、一些简单工具类来封装一些通用的查询、更新等操作的方法&#xff0c;下面介绍两种方法 第一种&#xff1a;借助元数据类ResultSetMetaData来实现方法的封装&#xff0c;使用Map或者…

30、JAVA_WEB开发基础之servlet(1)

servlet是什么 Servlet 是一种独立的 web 开发标准&#xff0c;用来接受、处理、返回浏览器的访问请求&#xff0c;它不应和服务器耦合在一起&#xff0c;servlet和servlet容器之间相互独立又相互依存&#xff0c;自我感觉&#xff0c;servlet有了容器才得以实现自己的价值&am…

jzoj4817-square【区间RMQ,二分答案】

正题 题目链接:https://jzoj.net/senior/#contest/show/2956/2 题目大意 n∗mn*mn∗m的010101矩阵&#xff0c;每次询问(x1,y1,x2,y2)(x1,y1,x2,y2)(x1,y1,x2,y2)里的最大全111正方形。 解题思路 我们用fi,jf_{i,j}fi,j​表示以(i,j)(i,j)(i,j)为右下角的全1正方形大小&#…

2017上海金马五校赛 丢史蒂芬妮 博弈问题

丢史蒂芬妮 发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M 描述 有一天&#xff0c;空和白很无聊&#xff0c;决定玩盛大游戏&#xff0c;考虑到两个人玩&#xff0c;他们随便掏了一个游戏出来&#xff1a;在一个n*m的棋盘…

2017上海金马五校 购买装备 贪心+二分Check

购买装备 发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:05 时间限制: 1000ms 内存限制: 128M 描述 最近盛大的一款游戏传奇世界极其火爆。游戏玩家John&#xff0c;想购买游戏中的装备。已知游戏的商店里有n件装备&#xff0c;第i件装备具有属性值ai&#xf…

31、JAVA_WEB开发基础之servlet(2)

使用servlet需要依赖jar包&#xff1a;servlet-api.jar&#xff0c;下边介绍一下关于servlet的一些api Servlet接口 package javax.servlet;import java.io.IOException;public interface Servlet {//在servlet被载入后和实施服务前由servlet引擎调用。如果init()//产生溢出U…