0、概述

本文借postgreSQL通过JDBC连接数据库的示例,介绍了常见数据库操作及JDBC的API、JDBC的一般工作流程及JDBC事务。

1、准备工作

A、下载安装好postgreSQL数据库。

B、新建一个Java项目,并导入postgreSQL的JDBC驱动程序jar包。

2、Java连接postgreSQL代码示例。

[java] view plaincopy
  1. package vertxTest;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.Statement;
  5. public class PostgreSQLJDBC {
  6. public static void main(String args[]) {
  7. Connection c = null;
  8. Statement stmt = null;
  9. try {
  10. Class.forName("org.postgresql.Driver");
  11. c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/pgsqltest", "postgres", "2016");
  12. c.setAutoCommit(false); // 把自动提交
  13. System.out.println("Opened database successfully");
  14. stmt = c.createStatement();
  15. String sql = "CREATE TABLE STUDENTS " +
  16. "(ID TEXT PRIMARY KEY     NOT NULL ," +
  17. " NAME            TEXT    NOT NULL, " +
  18. " SEX             TEXT    NOT NULL, " +
  19. " AGE             TEXT    NOT NULL)";
  20. stmt.executeUpdate(sql);
  21. System.out.println("Table created successfully");
  22. stmt.close();
  23. c.commit();
  24. c.close();
  25. } catch (Exception e) {
  26. System.err.println(e.getClass().getName() + ": " + e.getMessage());
  27. System.exit(0);
  28. }
  29. }
  30. }

3、常见增删改查操作。

A、定义记录的类(可选)

[java] view plaincopy
  1. package vertxTest;
  2. public class Student {
  3. private String Id;
  4. private String Name;
  5. private String Sex;
  6. private String Age;
  7. Student(String Id,String Name, String Sex, String Age) {
  8. this.Id = Id; //default
  9. this.Name = Name;
  10. this.Sex = Sex;
  11. this.Age = Age;
  12. }
  13. public String getId() {
  14. return Id;
  15. }
  16. public void setId(String Id) {
  17. this.Id = Id;
  18. }
  19. public String getName() {
  20. return Name;
  21. }
  22. public void setName(String Name) {
  23. this.Name = Name;
  24. }
  25. public String getSex() {
  26. return Sex;
  27. }
  28. public void setSex(String Sex) {
  29. this.Sex = Sex;
  30. }
  31. public String getAge() {
  32. return Age;
  33. }
  34. public void setage(String Age) {
  35. this.Age = Age;
  36. }
  37. }

B、JDBC表数据操作方法

[java] view plaincopy
  1. package vertxTest;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. public class JDBCOperation {
  8. /**
  9. * @method getConn() 获取数据库的连接
  10. * @return Connection
  11. */
  12. public Connection getConn() {
  13. String driver = "org.postgresql.Driver";
  14. String url = "jdbc:postgresql://localhost:5432/pgsqltest";
  15. String username = "postgres";
  16. String password = "2016";
  17. Connection conn = null;
  18. try {
  19. Class.forName(driver); // classLoader,加载对应驱动
  20. conn = (Connection) DriverManager.getConnection(url, username, password);
  21. } catch (ClassNotFoundException e) {
  22. e.printStackTrace();
  23. } catch (SQLException e) {
  24. e.printStackTrace();
  25. }
  26. return conn;
  27. }
  28. /**
  29. * @method insert(Student student) 往表中插入数据
  30. * @return int 成功插入数据条数
  31. */
  32. public int insert(Student student) {
  33. Connection conn = getConn();
  34. int i = 0;
  35. String sql = "insert into students (id,Name,Sex,Age) values(?,?,?,?)";
  36. PreparedStatement pstmt;
  37. try {
  38. pstmt = (PreparedStatement) conn.prepareStatement(sql);
  39. pstmt.setString(1, student.getId());
  40. pstmt.setString(2, student.getName());
  41. pstmt.setString(3, student.getSex());
  42. pstmt.setString(4, student.getAge());
  43. i = pstmt.executeUpdate();
  44. pstmt.close();
  45. conn.close();
  46. } catch (SQLException e) {
  47. e.printStackTrace();
  48. }
  49. return i;
  50. }
  51. /**
  52. * @method delete(Student student) 删除表中数据
  53. * @return int 成功删除表中数据条数
  54. */
  55. public int delete(String name) {
  56. Connection conn = getConn();
  57. int i = 0;
  58. String sql = "delete from students where Name='" + name + "'";
  59. PreparedStatement pstmt;
  60. try {
  61. pstmt = (PreparedStatement) conn.prepareStatement(sql);
  62. i = pstmt.executeUpdate();
  63. System.out.println("resutl: " + i);
  64. pstmt.close();
  65. conn.close();
  66. } catch (SQLException e) {
  67. e.printStackTrace();
  68. }
  69. return i;
  70. }
  71. /**
  72. * @method update(Student student) 更改表中数据
  73. * @return int 成功更改表中数据条数
  74. */
  75. public int update(Student student) {
  76. Connection conn = getConn();
  77. int i = 0;
  78. String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
  79. PreparedStatement pstmt;
  80. try {
  81. pstmt = (PreparedStatement) conn.prepareStatement(sql);
  82. i = pstmt.executeUpdate();
  83. System.out.println("resutl: " + i);
  84. pstmt.close();
  85. conn.close();
  86. } catch (SQLException e) {
  87. e.printStackTrace();
  88. }
  89. return i;
  90. }
  91. /**
  92. * @method Integer getAll() 查询并打印表中数据
  93. * @return Integer 查询并打印表中数据
  94. */
  95. public Integer getAll() {
  96. Connection conn = getConn();
  97. String sql = "select * from students";
  98. PreparedStatement pstmt;
  99. try {
  100. pstmt = (PreparedStatement)conn.prepareStatement(sql);
  101. ResultSet rs = pstmt.executeQuery();
  102. int col = rs.getMetaData().getColumnCount();
  103. System.out.println("============================");
  104. while (rs.next()) {
  105. for (int i = 1; i <= col; i++) {
  106. System.out.print(rs.getString(i) + "\t");
  107. if ((i == 2) && (rs.getString(i).length() < 8)) {
  108. System.out.print("\t");
  109. }
  110. }
  111. System.out.println("");
  112. }
  113. System.out.println("============================");
  114. } catch (SQLException e) {
  115. e.printStackTrace();
  116. }
  117. return null;
  118. }
  119. }

C、测试类

[java] view plaincopy
  1. package vertxTest;
  2. public class JDBCTest {
  3. public static void main(String args[]) {
  4. JDBCOperation op = new JDBCOperation();
  5. op.getAll();
  6. op.insert(new Student("001","Achilles", "Male", "14"));
  7. op.insert(new Student("002","Bean", "Fmale", "15"));
  8. op.getAll();
  9. op.update(new Student("002","Bean", "", "7"));
  10. op.delete("Achilles");
  11. op.getAll();
  12. }
  13. }

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为例相关推荐

  1. JDBC连接数据库教程,postgreSQL

    https://blog.csdn.net/jg15617651654/article/details/63262456/ JDBC连接数据库教程,postgreSQL 流年你奈我何 2017-03- ...

  2. 转载:JDBC连接数据库教程,postgreSQL

    0.概述 本文借postgreSQL通过JDBC连接数据库的示例,介绍了常见数据库操作及JDBC的API.JDBC的一般工作流程及JDBC事务. 1.准备工作 A.下载安装好postgreSQL数据库 ...

  3. java 连接 postgresql_java如何连接数据库并对其操作(以PostgreSQL为例)

    nblogs-markdown"> java如何连接数据库并对其操作(以PostgreSQL为例)相关概念 JDBC(Java Data Base Connectivity)是一种用于 ...

  4. php连接数据库比jdbc连接哪个好,MySQL_MySQL为例讲解JDBC数据库连接步骤,1、什么是JDBC?有什么作用? - phpStudy...

    MySQL为例讲解JDBC数据库连接步骤 1.什么是JDBC?有什么作用? Java Data Base Connectivity Java数据库连接协议 是一种用于执行SQL语句的Java API, ...

  5. 如何使用jdbc连接数据库

    如何使用jdbc连接数据库 数据库是一个有组织的数据集合.数据库管理系统以一种与数据库格式一致的方式,提供了存储和组织数据的机制.数据库管理系统允许在不考虑内部数据表示的情况下访问和存储数据. jav ...

  6. Jdbc连接数据库大全

    Jdbc连接数据库大全 oracle Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); Stringu ...

  7. 2、JDBC连接数据库

    1.JDBC连接数据库步骤 加载JDBC驱动程序 建立数据库连接Connection 创建执行SQL的语句Statement 处理执行结果ResultSet 释放资源 2.在项目里配置数据库驱动 右击 ...

  8. NodeJS 使用官方oracledb库连接数据库教程

    NodeJS 使用官方oracledb库连接数据库教程 导读 Linux下安装使用 gcc安装 nodejs安装 oracle客户端安装 npm安装oracledb测试连接 错误说明 windows下 ...

  9. 【数据库原理实验(openGauss)】 使用JDBC连接数据库

    使用JDBC连接数据库 文章目录 使用JDBC连接数据库 一.准备连接环境 1.修改数据库的pg_hba.conf文件 2.登陆数据库授权退出 3.修改数据库监听地址 4.下载Java驱动包导入工具 ...

最新文章

  1. 突发 | Yann LeCun卸任!Facebook变天,做AI不能落地是不成了
  2. 19年8月 字母哥 第四章 常用web开发数据库框架 不要用公司网络加载不出来 用热点!!!
  3. 算法笔记_202:第三届蓝桥杯软件类决赛真题(Java高职)
  4. 小米电动车官宣!雷军:今晚发布会跟大家仔细说
  5. 半导体八大工艺流程图_大国重器,国芯基石 半导体离子注入机行业研究报告...
  6. ptyhon的列表与字典操作
  7. 1130: 零起点学算法37——求阶乘
  8. Emmet的HTML语法(敲代码的快捷方式)
  9. 深入浅出、通俗易懂的讲解CAN bus。
  10. JavaScript --------WebS APIs学习之DOM(三)
  11. 智能耳机测试软件,内置心率监测仪 捷波朗运动耳塞体验!
  12. 搭建GTK+开发环境
  13. JavaScirpt 与 ECMAScript 的关系
  14. 彻底搞懂-扔鸡蛋问题-方程-动态规划
  15. 数据备份一般有哪些方式,如何进行数据备份
  16. iPhone的设置中,找不到“开发者选项”
  17. Pkg打包nodejs程序整理
  18. 数据挖掘与数据分析(快速入门)
  19. 京东商城(360Buy)价格识别 java版
  20. OpenShift 4 之让Route只运行在集群中Infra节点

热门文章

  1. String StringBuffer StringBuilder的异同
  2. 反编译代码遇到的问题
  3. (openssh、telnet、vsftpd、nfs、rsync、inotify、samba)
  4. Inspur World:融合架构产品从定制走向通用
  5. [转]C#操作注册表
  6. CISA:企业断网3到5天,赶走网络中的 SolarWinds 黑客
  7. 雇佣黑客组织利用 3Ds Max 恶意软件攻击全球企业
  8. LeetCode--057--插入区间(java)
  9. HTML中元素的position属性详解
  10. js类型转换的各种玩法