JDBC连接数据库教程,postgreSQL
https://blog.csdn.net/jg15617651654/article/details/63262456/
JDBC连接数据库教程,postgreSQL
流年你奈我何 2017-03-18 17:17:43 17389 收藏 4
分类专栏: Postgres 修炼之道 文章标签: postgresql 数据库 事务 jdbc
版权
0、概述
本文借postgreSQL通过JDBC连接数据库的示例,介绍了常见数据库操作及JDBC的API、JDBC的一般工作流程及JDBC事务。
1、准备工作
B、新建一个Java项目,并导入postgreSQL的JDBC驱动程序jar包。
2、Java连接postgreSQL代码示例。
[java] view plain copy
- package vertxTest;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.Statement;
- public class PostgreSQLJDBC {
- public static void main(String args[]) {
- Connection c = null;
- Statement stmt = null;
- try {
- Class.forName("org.postgresql.Driver");
- c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/pgsqltest", "postgres", "2016");
- c.setAutoCommit(false); // 把自动提交
- System.out.println("Opened database successfully");
- stmt = c.createStatement();
- String sql = "CREATE TABLE STUDENTS " +
- "(ID TEXT PRIMARY KEY NOT NULL ," +
- " NAME TEXT NOT NULL, " +
- " SEX TEXT NOT NULL, " +
- " AGE TEXT NOT NULL)";
- stmt.executeUpdate(sql);
- System.out.println("Table created successfully");
- stmt.close();
- c.commit();
- c.close();
- } catch (Exception e) {
- System.err.println(e.getClass().getName() + ": " + e.getMessage());
- System.exit(0);
- }
- }
- }
3、常见增删改查操作。
A、定义记录的类(可选)
[java] view plain copy
- package vertxTest;
- public class Student {
- private String Id;
- private String Name;
- private String Sex;
- private String Age;
- Student(String Id,String Name, String Sex, String Age) {
- this.Id = Id; //default
- this.Name = Name;
- this.Sex = Sex;
- this.Age = Age;
- }
- public String getId() {
- return Id;
- }
- public void setId(String Id) {
- this.Id = Id;
- }
- public String getName() {
- return Name;
- }
- public void setName(String Name) {
- this.Name = Name;
- }
- public String getSex() {
- return Sex;
- }
- public void setSex(String Sex) {
- this.Sex = Sex;
- }
- public String getAge() {
- return Age;
- }
- public void setage(String Age) {
- this.Age = Age;
- }
- }
B、JDBC表数据操作方法
[java] view plain copy
- package vertxTest;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- public class JDBCOperation {
- /**
- * @method getConn() 获取数据库的连接
- * @return Connection
- */
- public Connection getConn() {
- String driver = "org.postgresql.Driver";
- String url = "jdbc:postgresql://localhost:5432/pgsqltest";
- String username = "postgres";
- String password = "2016";
- Connection conn = null;
- try {
- Class.forName(driver); // classLoader,加载对应驱动
- conn = (Connection) DriverManager.getConnection(url, username, password);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- /**
- * @method insert(Student student) 往表中插入数据
- * @return int 成功插入数据条数
- */
- public int insert(Student student) {
- Connection conn = getConn();
- int i = 0;
- String sql = "insert into students (id,Name,Sex,Age) values(?,?,?,?)";
- PreparedStatement pstmt;
- try {
- pstmt = (PreparedStatement) conn.prepareStatement(sql);
- pstmt.setString(1, student.getId());
- pstmt.setString(2, student.getName());
- pstmt.setString(3, student.getSex());
- pstmt.setString(4, student.getAge());
- i = pstmt.executeUpdate();
- pstmt.close();
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return i;
- }
- /**
- * @method delete(Student student) 删除表中数据
- * @return int 成功删除表中数据条数
- */
- public int delete(String name) {
- Connection conn = getConn();
- int i = 0;
- String sql = "delete from students where Name='" + name + "'";
- PreparedStatement pstmt;
- try {
- pstmt = (PreparedStatement) conn.prepareStatement(sql);
- i = pstmt.executeUpdate();
- System.out.println("resutl: " + i);
- pstmt.close();
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return i;
- }
- /**
- * @method update(Student student) 更改表中数据
- * @return int 成功更改表中数据条数
- */
- public int update(Student student) {
- Connection conn = getConn();
- int i = 0;
- String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
- PreparedStatement pstmt;
- try {
- pstmt = (PreparedStatement) conn.prepareStatement(sql);
- i = pstmt.executeUpdate();
- System.out.println("resutl: " + i);
- pstmt.close();
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return i;
- }
- /**
- * @method Integer getAll() 查询并打印表中数据
- * @return Integer 查询并打印表中数据
- */
- public Integer getAll() {
- Connection conn = getConn();
- String sql = "select * from students";
- PreparedStatement pstmt;
- try {
- pstmt = (PreparedStatement)conn.prepareStatement(sql);
- ResultSet rs = pstmt.executeQuery();
- int col = rs.getMetaData().getColumnCount();
- System.out.println("============================");
- while (rs.next()) {
- for (int i = 1; i <= col; i++) {
- System.out.print(rs.getString(i) + "\t");
- if ((i == 2) && (rs.getString(i).length() < 8)) {
- System.out.print("\t");
- }
- }
- System.out.println("");
- }
- System.out.println("============================");
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
C、测试类
[java] view plain copy
- package vertxTest;
- public class JDBCTest {
- public static void main(String args[]) {
- JDBCOperation op = new JDBCOperation();
- op.getAll();
- op.insert(new Student("001","Achilles", "Male", "14"));
- op.insert(new Student("002","Bean", "Fmale", "15"));
- op.getAll();
- op.update(new Student("002","Bean", "", "7"));
- op.delete("Achilles");
- op.getAll();
- }
- }
C、输出结果
============================ ============================ ============================ 001 Achilles Male 14 002 Bean Fmale 15 ============================ resutl: 1 resutl: 1 ============================ 002 Bean Fmale 7 ============================ |
4、代码分析
在上述对数据库进行增删改查的过程中,可以发现其共性部分,即通用的流程:
(1)创建Connection对象、SQL查询命令字符串;
(2)对Connection对象传入SQL查询命令,获得PreparedStatement对象;
(3)对PreparedStatement对象执行executeUpdate()或executeQurey()获得结果;
(4)先后关闭PreparedStatement对象和Connection对象。
可见,使用JDBC时,最常打交道的是Connection、PreparedStatement这两个类,以及select中的ResultSet类。
5、JDBC的API
API |
说明 |
java.sql.Connection |
与特定数据库的连接(会话)。能够通过getMetaData方法获得数据库提供的信息、所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 |
java.sql.Driver |
每个驱动程序类必需实现的接口,同时,每个数据库驱动程序都应该提供一个实现Driver接口的类。 |
java.sql.DriverManager (Class) |
管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载在”jdbc.drivers”系统属性中引用的驱动程序。只是一个辅助类,是工具。 |
java.sql.Statement |
用于执行静态SQL语句并返回其生成结果的对象。 |
java.sql.PreparedStatement |
继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 |
java.sql.CallableStatement |
用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入/输出参数。 |
java.sql.PreparedStatement |
继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 |
java.sql.CallableStatement |
用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入/输出参数。 |
6、JDBC的一般工作流程
(1)加载驱动
Class.forName(“org.postgresql.Driver”); JAVA规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动注册到驱动程序管理器中。
(2)建立连接
conn=DriverManager.getConnection("jdbc:postgresql://localhost:5432/pgsqltest","postgres", "2016");
Connection连接是通过DriverManager的静态方法getConnection(.....)来得到的,这个方法的实质是把参数传到实际的Driver中的connect()方法中来获得数据库连接的。
postgreSQL URL的格式:
jdbc:postgresql:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端口号):XXXXXXX(所使用的库名)
MySQL URL的写法 例:jdbc:mysql://192.168.8.21:3306/test
(3)获得Statement对象
Statement stmt = conn.createStatement();
(4)执行sql语句
stmt.executeQuery(String sql); //返回一个查询结果集。
stmt.executeUpdate(String sql); //返回值为int型,表示影响记录的条数。
将sql语句通过连接发送到数据库中执行,以实现对数据库的操作。
(5)处理结果集
使用Connection对象获得一个Statement,Statement中的executeQuery(Stringsql) 方法可以使用select语句查询,并且返回一个结果集。 ResultSet,通过遍历这个结果集,可以获得select语句的查寻结果,ResultSet的next()方法会操作一个游标从第一条记录的前面开始读取,直到最后一条记录。
executeUpdate(String sql) 方法用于执行DDL和DML语句,比如可以update,delete操作。
只有执行select语句才有结果集返回。
Statement str=con.createStatement(); //创建Statement
String sql=”insert into test(id,name)values(1,”+”’”+”test”+”’”+”)”;
str. executeUpdate(sql);//执行Sql语句
String sql=”select * from test”;
ResultSet rs=str. executeQuery(String sql);//执行Sql语句,执行select语句后有结果集
//遍历处理结果集信息
while(rs.next()){
System.out.println(rs.getInt(“id”));
System.out.println(rs.getString(“name”))
}
(6)关闭数据库连接
rs.close();
stmt.close();
con.close();
ResultSet Statement Connection是依次依赖的。
注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接时才可以使用的,所以在使用结束之后有可能其它的Statement还需要连接,所以不能现关闭Connection。
7、JDBC事务
事务的4大特性
(1) 原子性
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。
原子操作,也就是不可分割的操作,必须一起成功一起失败。
(2) 一致性
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
(3) 分离性
分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
(4) 持久性
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证。
JDBC连接数据库教程,postgreSQL相关推荐
- 转载:JDBC连接数据库教程,postgreSQL
0.概述 本文借postgreSQL通过JDBC连接数据库的示例,介绍了常见数据库操作及JDBC的API.JDBC的一般工作流程及JDBC事务. 1.准备工作 A.下载安装好postgreSQL数据库 ...
- JDBC连接数据库教程,以postgreSQL为例
0.概述 本文借postgreSQL通过JDBC连接数据库的示例,介绍了常见数据库操作及JDBC的API.JDBC的一般工作流程及JDBC事务. 1.准备工作 A.下载安装好postgreSQL数据库 ...
- Jdbc连接数据库大全
Jdbc连接数据库大全 oracle Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); Stringu ...
- 【数据库原理实验(openGauss)】 使用JDBC连接数据库
使用JDBC连接数据库 文章目录 使用JDBC连接数据库 一.准备连接环境 1.修改数据库的pg_hba.conf文件 2.登陆数据库授权退出 3.修改数据库监听地址 4.下载Java驱动包导入工具 ...
- JDBC编程:1(使用JDBC连接数据库)
使用JDBC连接数据库 下载连接MySQL数据库的驱动 这个jar包可以在官网上对照着你的MySQL版本来下载,这里我下载的是最新的8.0.20版本, 这里是8.0.20版本的驱动包:mysql-co ...
- 如何使用jdbc连接数据库
如何使用jdbc连接数据库 数据库是一个有组织的数据集合.数据库管理系统以一种与数据库格式一致的方式,提供了存储和组织数据的机制.数据库管理系统允许在不考虑内部数据表示的情况下访问和存储数据. jav ...
- Java七步创建以JDBC连接数据库的程序
JDBC连接数据库 ◆ 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java. ...
- JDBC连接数据库过程
JDBC连接数据库过程 时间: 2009-03-03 20:43来源: 作者: 点击: <script src="http://www.topkc.cn/plus/count.php? ...
- JDBC连接数据库总结
JDBC连接数据库 一下以mysql 数据库连接来说明 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(J ...
最新文章
- miui通知栏要点两下_MIUI免费主题分享,半透明通知栏很好看,另附壁纸!
- C#实现rabbitmq 延迟队列功能
- Python面试必知(四)
- 判定Java源文件名称_JAVA
- 初识 ASP.NET 3.5 MVC 开发
- TeraTerm设定(窗体大小,字体字号)保存为默认值
- [css] 解释下为什么css的reset不建议直接这么写:*{ margin:0; padding:0;}?
- python创造订单失败_使用Python API创建新订单,get AttributeError:“str”对象没有属性“iteritems”...
- 12-静态代理设计模式-为了引出spring动态代理
- 苏轼眼里看到的技术世界(一)
- 转一篇关于如何改变性格,建立自信的帖子,写的很好,我一定做到,看后才明白自己到底该如何改变
- 当逛书店成为一种怀旧
- C语言数字图像处理---3.3图像锐化
- htcm7刷linux,HTC One M7 怎么刷机?刷机图文教程 ?
- 逻辑设计法:数字电路在PLC编程中的体现
- 关于“PS中用魔棒选取之后拖到另一个图层中怎么没颜色了”的解决方法
- git报错:error: failed to push some refs to ... 的解决办法及如何让线上覆盖本地方法【Git/SVN】
- 国内人才申领《上海市居住证》审核试行办法
- STC8H驱动hub75e接口的64*64LED点阵屏
- AIOps指标异常检测之无监督算法
热门文章
- 线性代数---向量问题的求解方法
- python目标跟踪精度曲线图_Python+opencv3.4+Kalman滤波在视频中跟踪绘制运动目标,Pythonopencv34kalman,卡尔曼滤波,实现,物体,追踪,和,轨迹...
- leetcode 旋转数组
- 伯努利数(详解 + 例题 :P3711 仓鼠的数学题)
- P2304 [NOI2015] 小园丁与老司机(网络流/上下界网络流)
- 【HAOI2018】染色【反向二项式反演】【NTT卷积】
- CF605C. Freelancer's Dreams
- P1064 [NOIP2006 提高组] 金明的预算方案
- 【每日一题】4月9日题目精讲 Running Median
- 多项式乘法:练习总结