当前位置: 首页 > 编程日记 > 正文

jdbc链接数据库

JDBC简介

JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。

JDBC编程步骤

(1)加载驱动程序:

下载驱动包 : http://dev.mysql.com/downloads/connector/j/

解压,得到 jar文件。将该文件复制到Java工程目录Java Resources/Libraries/ 下,→ buildpath 。

(2)获得数据库连接

(3)创建Statement对象:

(4)向数据库发送SQL命令

(5)处理数据库的返回结果(ResultSet类)

 1 package com.baidu.emp.jdbcTest;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.Statement;
 7 
 8 import com.mysql.jdbc.Driver;
 9 /**
10  * 开始使用jdbc连接数据库
11  * @author Admin
12  *
13  */
14 public class Test001 {
15 
16     public static void main(String[] args) throws Exception {
17 
18         /**
19          * 加载驱动
20          */
21         // 方法一:
22         /*
23          * import java.sql.DriverManager; import com.mysql.jdbc.Driver;
24          */
25         // Driver driver = new Driver();
26         // DriverManager.registerDriver(driver);
27 
28         // 方法二:(推荐使用)
29         Class.forName("com.mysql.jdbc.Driver");
30 
31         /**
32          * 创建链接
33          */
34         String url = "jdbc:mysql://localhost:3306/testjdbc";
35         String user = "root";
36         String password = "root";
37         Connection connection = DriverManager.getConnection(url, user, password);
38 
39         // 创建statement对象
40         Statement statement = connection.createStatement();
41 
42         /**
43          * 执行SQL,获取结果集
44          */
45         String sql = "select * from test01";
46         ResultSet result = statement.executeQuery(sql);
47 
48         // 遍历结果集
49         while (result.next()) {
50             String name = result.getString("name");
51             int id = result.getInt("id");
52             System.out.println(name + "\t" + id);
53         }
54 
55         /**
56          * 关闭链接,释放资源
57          */
58         result.close();
59         statement.close();
60         connection.close();
61     }
62 }

防止SQL注入改用prepareStatement

 1 package com.boya.emp.jdbcTest;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 /**
 8  * SQL注入,使用prepareStatement对象进行预编译
 9  * @author Admin
10  *
11  */
12 public class Test002 {
13 
14     public static void main(String[] args) throws Exception {
15 
16         /**
17          * 加载驱动
18          */
19         Class.forName("com.mysql.jdbc.Driver");
20 
21         /**
22          * 创建链接
23          */
24         String url = "jdbc:mysql://localhost:3306/testjdbc";
25         String user = "root";
26         String password = "root";
27         Connection connection = DriverManager.getConnection(url, user, password);
28 
29         // 写SQL 
30         String sql = "select * from test01 where id = ?";
31         //创建statement对象,预编译
32         PreparedStatement statement = connection.prepareStatement(sql);
33         //设置参数
34         statement.setInt(1, 2);
35         /**
36          * 执行SQL,获取结果集
37          */
38         ResultSet result = statement.executeQuery();
39 
40         // 遍历结果集
41         while (result.next()) {
42             String name = result.getString("name");
43             int id = result.getInt("id");
44             System.out.println(name + "\t" + id);
45         }
46 
47         /**
48          * 关闭链接,释放资源
49          */
50         result.close();
51         statement.close();
52         connection.close();
53     }
54 } 
View Code

进行代码优化,设置配置文件,工具类,实现增删该查

增加配置文件方便修改数据库,用户登录。。。

jdbc.properties(配置文件名)

1 driverName=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/testjdbc
3 userName=root
4 password=root

注意写配置文件时中间不可以有空格,引号之类的

工具类:增强了代码的复用性

  1 package com.baidu.emp.utils;
  2 
  3 import java.io.InputStream;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.SQLException;
  9 import java.util.Properties;
 10 
 11 import org.junit.Test;
 12 
 13 
 14 
 15 public class JdbcUtils {
 16 
 17     static String driverClassName;
 18     static String url;
 19     static String user;
 20     static String password;
 21 
 22     static {
 23         // 创建配置文件对象
 24         Properties properties = new Properties();
 25         // 加载配置文件输入流
 26         InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
 27         // 重新加载配置文件
 28         try {
 29             properties.load(inputStream);
 30             // 获取配置文件的值
 31             driverClassName = properties.getProperty("driverName");
 32             url = properties.getProperty("url");
 33             user = properties.getProperty("userName");
 34             password = properties.getProperty("password");
 35             Class.forName(driverClassName);
 36 
 37         } catch (Exception e) {
 38             // 抛出异常
 39             throw new RuntimeException(e);
 40         }
 41     }
 42 
 43     /**
 44      * 获取连接
 45      */
 46     @Test
 47     public void testName() throws Exception {
 48         
 49         System.out.println(driverClassName);
 50     }
 51     public static Connection getConnection() {
 52         Connection connection = null;
 53         try {
 54             connection = DriverManager.getConnection(url, user, password);
 55         } catch (SQLException e) {
 56             // 抛出异常
 57             throw new RuntimeException(e);
 58         }
 59         return connection;
 60     }
 61 
 62     /**
 63      * 关闭链接,释放资源
 64      */
 65     public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {
 66 
 67         try {
 68             if (resultSet != null) {
 69                 resultSet.close();
 70             }
 71             resultSet = null; // 垃圾及时清除
 72             //注意,不要弄成死循环
 73             close(connection, statement);
 74         } catch (SQLException e) {
 75             throw new RuntimeException(e);
 76         }
 77 
 78     }
 79 
 80     /**
 81      * 增删改释放资源
 82      */
 83     public static void close(Connection connection, PreparedStatement statement) {
 84 
 85         try {
 86             if (connection != null) {
 87                 connection.close();
 88             }
 89                 
 90             connection = null;
 91             if (statement != null) {
 92                 statement.close();
 93             }
 94             statement = null;
 95 
 96         } catch (SQLException e) {
 97             throw new RuntimeException(e);
 98         }
 99 
100     }
101 
102 }
View Code

测试增删改查:

  1 package com.baidu.emp.jdbcTest;
  2 
  3 import java.sql.Connection;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 
  7 import org.junit.After;
  8 import org.junit.Before;
  9 import org.junit.Test;
 10 
 11 import com.baidu.emp.utils.JdbcUtils;
 12 
 13 /**
 14  * 使用jdbcUtils连接数据库进行增删改查
 15  * 
 16  * @author Admin
 17  *
 18  */
 19 public class Test003 {
 20 
 21     // 初始化值
 22     Connection connection = null;
 23     PreparedStatement statement = null;
 24     ResultSet result = null;
 25 
 26     @Before
 27     public void start() throws Exception {
 28         // 创建链接
 29         connection = JdbcUtils.getConnection();
 30         System.out.println("创建链接");
 31     }
 32 
 33     @After
 34     public void end() throws Exception {
 35         // 关闭链接
 36         JdbcUtils.close(connection, statement, result);
 37         System.out.println("关闭链接");
 38     }
 39     
 40     /**
 41      *插入数据
 42      * @throws Exception
 43      */
 44     @Test
 45     public void add() throws Exception {
 46         String sql = "insert into test01 values(null,?)";
 47         statement = connection.prepareStatement(sql);
 48         statement.setString(1, "李四");
 49         int result = statement.executeUpdate();
 50         if (result!=0) {
 51             System.out.println("添加成功");
 52         }
 53     }
 54     /**
 55      * 删除数据
 56      * @throws Exception
 57      */
 58     @Test
 59     public void del() throws Exception {
 60         String sql = "delete from test01 where id =?";
 61         statement = connection.prepareStatement(sql);
 62         statement.setInt(1,3);
 63         int result = statement.executeUpdate();
 64         if (result!=0) {
 65             System.out.println("删除成功");
 66         }
 67     }
 68     /**
 69      * 修改数据
 70      * @throws Exception
 71      */
 72     @Test
 73     public void change() throws Exception {
 74         String sql = "update test01 set name = ? where id = ?";
 75         statement = connection.prepareStatement(sql);
 76         statement.setString(1, "张飞");
 77         statement.setInt(2, 2);
 78         int result = statement.executeUpdate();
 79         if (result!=0) {
 80             System.out.println("修改成功");
 81         }
 82     }
 83     
 84     /**
 85      * 查询全部数据
 86      * @throws Exception
 87      */
 88     @Test
 89     public void findAll() throws Exception {
 90         String sql = "select id , name from test01";
 91         statement = connection.prepareStatement(sql);
 92         result = statement.executeQuery();
 93         if (result.next()) {
 94             System.out.println("查询成功");
 95         }
 96     }
 97     
 98     /**
 99      * 条件查询数据
100      * @throws Exception
101      */
102     @Test
103     public void findOne() throws Exception {
104         String sql = "select id , name from test01 where id = ?";
105         statement = connection.prepareStatement(sql);
106         statement.setInt(1, 2);
107         result = statement.executeQuery();
108         if (result.next()) {
109             System.out.println("查询成功");
110         }
111     }
112 
113 }

希望能给大家一个参考,也希望大家多多支持我。

转载于:https://www.cnblogs.com/kaikai-2018/p/10392646.html

相关文章:

Google Protocol Buffers介绍

Google Protocol Buffers(简称Protobuf),是Google的一个开源项目,它是一种结构化数据存储格式,是Google公司内部的混合语言数据标准,是一个用来序列化(将对象的状态信息转换为可以存储或传输的形式的过程)结…

打造 AI Beings,和微信合作…第七代微软小冰的成长之路

8月15日, “第七代微软小冰”年度发布会在北京举行。本次发布会上,微软(亚洲)互联网工程院带来了微软小冰在 Dual AI 领域的新进展,全新升级的部分核心技术,最新的人工智能创造成果,以及更多的合作与产品落地。其中&am…

感知机介绍及实现

感知机(perceptron)由Rosenblatt于1957年提出,是神经网络与支持向量机的基础。感知机是最早被设计并被实现的人工神经网络。感知机是一种非常特殊的神经网络,它在人工神经网络的发展史上有着非常重要的地位,尽管它的能力非常有限,…

不甘心只做输入工具,搜狗输入法上线AI助手,提供智能服务

8月19日搜狗输入法上线了新功能——智能汪仔,在输入法中引入了AI助手,这是搜狗输入法继今年5月推出“语音变声功能”后又一个AI落地产品。 有了智能汪仔AI助手的加持后,搜狗输入法能够在不同的聊天场景,提供丰富多样的表达方式从…

可构造样式表 - 通过javascript来生成css的新方式

可构造样式表是一种使用Shadow DOM进行创建和分发可重用样式的新方法。 使用Javascript来创建样式表是可能的。然而&#xff0c;这个过程在历史上一直是使用document.createElement(style)来创建<style>元素&#xff0c;然后通过访问其sheet属性来获得一个基础的CSSStyle…

模板方法模式与策略模式的区别

2019独角兽企业重金招聘Python工程师标准>>> 模板方法模式&#xff1a;在一个方法中定义一个算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下&#xff0c;重新定义算法中的某些步骤。 策略模式&#xff1a;定义一个…

简单明了,一文入门视觉SLAM

作者 | 黄浴转载自知乎【导读】SLAM是“Simultaneous Localization And Mapping”的缩写&#xff0c;可译为同步定位与建图。最早&#xff0c;SLAM 主要用在机器人领域&#xff0c;是为了在没有任何先验知识的情况下&#xff0c;根据传感器数据实时构建周围环境地图&#xff0c…

大主子表关联的性能优化方法

【摘要】主子表是数据库最常见的关联关系之一&#xff0c;最典型的包括合同和合同条款、订单和订单明细、保险保单和保单明细、银行账户和账户流水、电商用户和订单、电信账户和计费清单或流量详单。当主子表的数据量较大时&#xff0c;关联计算的性能将急剧降低&#xff0c;在…

Windows7上配置Python Protobuf 操作步骤

1、 按照http://blog.csdn.net/fengbingchun/article/details/8183468 中步骤&#xff0c;首先安装Python 2.7.10&#xff1b; 2、 按照http://blog.csdn.net/fengbingchun/article/details/47905907 中步骤&#xff0c;配置、编译Protobuf&#xff1b; 3、 将(2)中生成的pr…

鲜为人知的静态、命令式编程语言——Nimrod

Nimrod是一个新型的静态类型、命令式编程语言&#xff0c;支持过程式、函数式、面向对象和泛型编程风格而保持简单和高效。Nimrod从Lisp继承来的一个特殊特性抽象语法树&#xff08;AST&#xff09;作为语言规范的一部分&#xff0c;可以用作创建领域特定语言的强大宏系统。它还…

机器学习进阶-图像形态学操作-腐蚀操作 1.cv2.erode(进行腐蚀操作)

1.cv2.erode(src, kernel, iteration) 参数说明&#xff1a;src表示的是输入图片&#xff0c;kernel表示的是方框的大小&#xff0c;iteration表示迭代的次数 腐蚀操作原理&#xff1a;存在一个kernel&#xff0c;比如(3, 3)&#xff0c;在图像中不断的平移&#xff0c;在这个9…

无需成对示例、无监督训练,CycleGAN生成图像简直不要太简单

作者 | Jason Brownlee译者 | Freesia&#xff0c;Rachel编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】图像到图像的转换技术一般需要大量的成对数据&#xff0c;然而要收集这些数据异常耗时耗力。因此本文主要介绍了无需成对示例便能实现图…

Git使用常见问题解决方法汇总

1. 在Ubuntu下使用$ git clone时出现server certificate verification failed. CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile: none 解决方法&#xff1a;在执行$ git clone 之前&#xff0c;在终端输入&#xff1a; export GIT_SSL_NO_VERIFY1 2. 在Windows上更新了…

服务器监控常用命令

在网站性能优化中&#xff0c;我们经常要检查服务器的各种指标&#xff0c;以便快速找到害群之马。大多情况下&#xff0c;我们会使用cacti、nagois或者zabbix之类的监控软件&#xff0c;但是这类软件安装起来比较麻烦&#xff0c;在一个小型服务器&#xff0c;我们想尽快找到问…

Ubuntu下内存泄露检测工具Valgrind的使用

在VS中可以用VLD检测是否有内存泄露&#xff0c;可以参考http://blog.csdn.net/fengbingchun/article/details/44195959&#xff0c;下面介绍下Ubuntu中内存泄露检测工具Valgrind的使用。Valgrind目前最新版本是3.11.0&#xff0c; 可以从http://www.valgrind.org/ 通过下载源码…

数据为王的时代,如何用图谱挖掘商业数据背后的宝藏?

这是一个商业时代&#xff0c;一个数据为王的时代&#xff0c;也是一个 AI 迎来黄金发展期的时代。据史料记载&#xff0c;商业在商朝已初具规模。斗转星移&#xff0c;时光流转&#xff0c;到 2019 年&#xff0c;商业形式已发生翻天覆地的变化&#xff0c;但是商业的本质——…

旋转卡壳——模板(对踵点)

这东西学了我大概两天吧。。其实不应该学这么久的&#xff0c;但是这两天有点小困&#xff0c;然后学习时间被削了很多\(QwQ\) 说几个坑点。 - 对于题目不保证有凸包的情况&#xff0c;要选用左下角的点&#xff0c;而非单纯的最下边的点构造凸包。 - 对于凸包中只有\(1/2\)个点…

SNMP 协议 OID的使用

为什么80%的码农都做不了架构师&#xff1f;>>> SNMP 协议 OID的使用 SNMP&#xff08;Simple Network Management Protocol简单网络管理&#xff09;协议 是现在网络管理系统&#xff08;NMS&#xff09;监控网络设备状态的协议&#xff0c;是现在网管事实上的标准…

颜色空间YUV简介

YUV概念&#xff1a;YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL&#xff0c;Phase Alternation Line)&#xff0c;是PAL和SECAM模拟彩色电视制式采用的颜色空间。其中的Y、U、V几个字母不是英文单词的组合词&#xff0c;Y代表亮度&#xff0c;其实Y就是图像的灰度值…

基于RNN的NLP机器翻译深度学习课程 | 附实战代码

作者 | 小宋是呢来源 | CSDN博客深度学习用的有一年多了&#xff0c;最近开始NLP自然处理方面的研发。刚好趁着这个机会写一系列 NLP 机器翻译深度学习实战课程。本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署&#xff0c;将包括以下内容&#xff1a;&#xf…

trash-cli设置Linux 回收站

trash-cli 设置 Linux 回收站 trash-cli是一个使用 python 开发的软件包&#xff0c;包含 trash-put、restore-trash、trash-list、trash-empty、trash-rm等命令&#xff0c;我们可以通过这条命令&#xff0c;将文件移动到回收站&#xff0c;或者还原删除了的文件。 trash-cli的…

磁盘有时也不可靠

实验服务器的磁盘是最近买的&#xff0c;当卖家问我要普通的还是高级的&#xff0c; 我选择了普通&#xff0c;现在追悔莫及。今天的分析更加详细。首先发现每次实验&#xff0c;出错的文件都不一样&#xff0c;所以应该不是临界条件的问题。下表总结了出错的位置&#xff0c;原…

从原理到落地,七大维度详解矩阵分解推荐算法

作者 | gongyouliu编辑丨Zandy来源 | 大数据与人工智能 &#xff08; ID: ai-big-data&#xff09;导语&#xff1a;作者在《协同过滤推荐算法》这篇文章中介绍了 user-based 和 item-based 协同过滤算法&#xff0c;这类协同过滤算法是基于邻域的算法(也称为基于内存的协同过…

libyuv库的使用

libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的&#xff0c;可在Windows、Linux、Mac、Android等操作系统&#xff0c;x86、x64、arm架构上进行编译运行&#xff0c;支持SSE、AVX、NEON等SIMD指令加速。下面说一下libyuv在Windows7VS2013 x6…

封装 vue 组件的过程记录

在我们使用vue的开发过程中总会遇到这样的场景&#xff0c;封装自己的业务组件。 封装页面组件前要考虑几个问题&#xff1a;1、该业务组件的使用场景 2、在什么条件下展示一些什么数据&#xff0c;数据类型是什么样的&#xff0c;及长度颜色等 3、如果是通用的内容&#xff0c…

Service的基本组成

Service与Activity的最大区别就是一有界面&#xff0c;一个没有界面。 如果某些程序操作很消耗时间&#xff0c;那么可以将这些程序定义在Service之中&#xff0c;这样就可以完成程序的后台运行&#xff0c; 其实Service就是一个没有界面的Activity&#xff0c;执行跨进程访问也…

BP神经网络公式推导及实现(MNIST)

BP神经网络的基础介绍见&#xff1a;http://blog.csdn.net/fengbingchun/article/details/50274471&#xff0c;这里主要以公式推导为主。BP神经网络又称为误差反向传播网络&#xff0c;其结构如下图。这种网络实质是一种前向无反馈网络&#xff0c;具有结构清晰、易实现、计算…

AI应用落地哪家强?CSDN AI Top 30+案例评选等你来秀!

人工智能历经百年发展&#xff0c;如今迎来发展的黄金时期。目前&#xff0c;AI 技术已涵盖自然语言处理、模式识别、图像识别、数据挖掘、机器学习等领域的研究&#xff0c;在汽车、金融、教育、医疗、安防、零售、家居、文娱、工业等行业获得了令人印象深刻的成果。 在各行业…

安利Mastodon:属于未来的社交网络

我为Mastodon开发了一款安卓客户端&#xff0c;v1.0版本已经发布&#xff0c;欢迎下载使用 源码在这里&#xff1a;https://github.com/shuiRong/Gakki ??? 正文 Mastodon(长毛象)是什么&#xff1f; 是一个免费开源、去中心化、分布式的微博客社交网络&#xff0c;是微博、…

通过案例练习掌握SSH 的整合

1. SSH整合_方案01 ** 整合方案01 Struts2框架 Spring框架 在Spring框架中整合了Hibernate&#xff08;JDBC亦可&#xff09; 一些业务组件&#xff08;Service组件&#xff09;也可以放入Spring框架中迚行管理&#xff08;昨天的例子&#xff09; 1. 请求&#xff0…