[关闭]
@nextleaf 2018-09-10T04:28:42.000000Z 字数 5913 阅读 665

2018-09-07 工作日志

Java JDBC


星期五


JDBC

Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它JDBC是面向关系型数据库的。

JDBC API提供了以下接口和类:

DriverManager: 这个类管理数据库驱动程序的列表。确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。

Driver: 此接口处理与数据库服务器通信。很少直接直接使用驱动程序(Driver)对象,一般使用DriverManager中的对象,它用于管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息

Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过此唯一的连接对象。

Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。

ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,可以通过移动它来检索下一个数据。

SQLException: 这个类用于处理发生在数据库应用程序中的任何错误。

JDBC 架构
分为双层架构和三层架构。

双层:此处输入图片的描述 三层:此处输入图片的描述

一般步骤

导入包:

  1. import java.sql.*;

java.sql和javax.sql是JDBC 4.0的主要包。下载MySQL连接器

注册JDBC驱动程序
需要初始化驱动程序,这样就可以打开与数据库的通信。以下是代码片段实现这一目标:

  1. Class.forName("com.mysql.jdbc.Driver");
  2. //Class.forName("oracle.jdbc.OracleDriver");
  3. //String url="jdbc:oracle:thin:@localhost:1521:orcl";
  4. //String username="orcl";
  5. //String password="123456";

打开一个连接
使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接,如下所示:

  1. //STEP 3: Open a connection
  2. // Database credentials
  3. static final String USER = "root";
  4. static final String PASS = "pwd123456";
  5. tConnection conn = DriverManager.getConnection(DB_URL,USER,PASS);

执行一个查询
需要使用一个类型为StatementPreparedStatement的对象,并提交一个SQL语句到数据库执行查询。如下:

  1. //STEP 4: Execute a query
  2. stmt = conn.createStatement();
  3. //connection.prepareStatement(sql)//PreparedStatement可以防止注入攻击
  4. String sql;
  5. sql = "SELECT id, first, last, age FROM Employees";
  6. ResultSet rs = stmt.executeQuery(sql);

如果要执行一个SQL语句:UPDATEINSERTDELETE语句,那么需要下面的代码片段:

  1. //STEP 4: Execute a query
  2. stmt = conn.createStatement();
  3. String sql;
  4. sql = "DELETE FROM Employees";
  5. ResultSet rs = stmt.executeUpdate(sql);

从结果集中提取数据
可以使用适当的ResultSet.getXXX()方法来检索的数据结果如下:

  1. //STEP 5: Extract data from result set
  2. while(rs.next()){
  3. //Retrieve by column name
  4. int id = rs.getInt("id");
  5. int age = rs.getInt("age");
  6. String first = rs.getString("first");
  7. String last = rs.getString("last");
  8. //Display values
  9. System.out.print("ID: " + id);
  10. System.out.print(", Age: " + age);
  11. System.out.print(", First: " + first);
  12. System.out.println(", Last: " + last);
  13. }

清理环境资源
在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费,对依赖于JVM的垃圾收集如下:

  1. //STEP 6: Clean-up environment
  2. rs.close();
  3. stmt.close();
  4. conn.close();

例子:

  1. //STEP 1. Import required packages
  2. package com.nl.sx910.jdbc;
  3. import java.sql.*;
  4. /**
  5. * Created with IntelliJ IDEA 2018.
  6. * Description:JDBC模板
  7. *
  8. * @author: 黄昭鸿
  9. * @date: 2018-09-10
  10. * Time: 9:19
  11. */
  12. public class JDBCExample {
  13. // JDBC driver name and database URLjdbc:mysql://localhost:3306/
  14. static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
  15. //&allowPublicKeyRetrieval=true
  16. static final String DB_URL = "jdbc:mysql://localhost:3306/javabasedemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false";
  17. // Database credentials -- 数据库名和密码自己修改
  18. static final String USER = "root";
  19. static final String PASS = "Huang...";
  20. public static void main(String[] args) {
  21. Connection conn = null;
  22. Statement stmt = null;
  23. try {
  24. //STEP 2: Register JDBC driver
  25. Class.forName(JDBC_DRIVER);
  26. //STEP 3: Open a connection
  27. System.out.println("Connecting to database...");
  28. conn = DriverManager.getConnection(DB_URL, USER, PASS);
  29. //STEP 4: Execute a query
  30. System.out.println("Creating statement...");
  31. stmt = conn.createStatement();
  32. String sql;
  33. sql = "SELECT id, first, last, age FROM employees";
  34. ResultSet rs = stmt.executeQuery(sql);
  35. //STEP 5: Extract data from result set
  36. while (rs.next()) {
  37. //Retrieve by column name
  38. int id = rs.getInt("id");
  39. int age = rs.getInt("age");
  40. String first = rs.getString("first");
  41. String last = rs.getString("last");
  42. //Display values
  43. System.out.print("ID: " + id);
  44. System.out.print(", Age: " + age);
  45. System.out.print(", First: " + first);
  46. System.out.println(", Last: " + last);
  47. }
  48. //STEP 6: Clean-up environment
  49. rs.close();
  50. stmt.close();
  51. conn.close();
  52. } catch (SQLException se) {
  53. //Handle errors for JDBC
  54. se.printStackTrace();
  55. } catch (Exception e) {
  56. //Handle errors for Class.forName
  57. e.printStackTrace();
  58. } finally {
  59. //finally block used to close resources
  60. try {
  61. if (stmt != null) {
  62. stmt.close();
  63. }
  64. } catch (SQLException ignored) {}
  65. try {
  66. if (conn != null) {
  67. conn.close();
  68. }
  69. } catch (SQLException se) {
  70. se.printStackTrace();
  71. }
  72. }
  73. System.out.println("Goodbye!");
  74. }
  75. }

JDBC数据类型

下表列出了默认的JDBC数据类型与Java数据类型转换,当使用PreparedStatement或CallableStatement对象时可调用setXXX()方法或ResultSet.updateXXX()方法。

SQL JDBC/Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
CHAR java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
BIT boolean setBoolean updateBoolean
NUMERIC java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT byte setByte updateByte
SMALLINT short setShort updateShort
INTEGER int setInt updateInt
BIGINT long setLong updateLong
REAL float setFloat updateFloat
FLOAT float setFloat updateFloat
DOUBLE double setDouble updateDouble
VARBINARY byte[ ] setBytes updateBytes
BINARY byte[ ] setBytes updateBytes
DATE java.sql.Date setDate updateDate
TIME java.sql.Time setTime updateTime
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
BLOB java.sql.Blob setBlob updateBlob
ARRAY java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
STRUCT java.sql.Struct SetStruct updateStruct

JDBC SQL语法

结构化查询语言(SQL)是一种标准化语言,允许对数据库执行操作
1.0 创建数据库

CREATE DATABASE语句用于创建新的数据库。 语法是 -

  1. SQL> CREATE DATABASE DATABASE_NAME;

示例
以下SQL语句创建一个名为EMP的数据库 -

  1. SQL> CREATE DATABASE EMP;

2.0 删除数据库

DROP DATABASE语句用于删除存在的数据库。

注意:要创建或删除数据库,需要有数据库服务器的管理员权限。 需要特别小心的是:删除数据库将丢失数据库中存储的所有数据(无法恢复)。

3.0 创建表

CREATE TABLE语句用于创建新表。 语法是 -

  1. SQL> CREATE TABLE table_name
  2. (
  3. column_name column_data_type,
  4. column_name column_data_type,
  5. column_name column_data_type
  6. ...
  7. );

以下SQL语句创建一个名为Employees的表,其中包含四列:

  1. SQL> CREATE TABLE Employees
  2. (
  3. id INT NOT NULL,
  4. age INT NOT NULL,
  5. first VARCHAR(255),
  6. last VARCHAR(255),
  7. PRIMARY KEY ( id )
  8. );

4.0 删除表
DROP TABLE语句用于删除存在的表
5.0 INSERT数据

  1. SQL> INSERT INTO table_name VALUES (column1, column2, ...);

6.0 查询数据
在上篇日志
7.0 更新数据
UPDATE语句用于更新数据。 UPDATE的语法是 -

  1. SQL> UPDATE table_name
  2. SET column_name = value, column_name = value, ...
  3. WHERE conditions;

UPDATE示例:

  1. SQL> UPDATE Employees SET age=20 WHERE id=100;

8.0 删除数据
DELETE语句用于从表中删除数据。 DELETE的语法是 -

  1. SQL> DELETE FROM table_name WHERE conditions;

WHERE子句可以使用比较运算符,例如:=,!=,<,>,<=和>=,以及BETWEEN和LIKE运算符。

DELETE示例,以下SQL DELETE语句将删除ID为100的员工的记录 -

  1. SQL> DELETE FROM Employees WHERE id=100;

启动MySQL服务

  1. sudo systemctl start mysql.service

查看Mysql相关进程

  1. sudo ps -A | grep -i mysql

连接到mysql数据库

  1. mysql -u root -p
  2. //然后输入密码

查看数据库列表

  1. show databases;

使用某数据库

  1. use xxx

退出

  1. quit

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注