Java基础总结(数据库)

首先我开始学习Java。
我将从非常基础的水平开始写作。
我会创建自己可以复习的备忘录。

数据库连接机制

数据库 (DB)这是整理和积累数据的东西。也称为数据库(DB)。
数据是资料。是基本事实。是通过实验、观察、调查和统计处理获得的数字信息。
base有”基地”的意思,直译过来就是一种”信息的基地”类似的东西。

能管理数据的软件。
还有各种不同类型的软件,可以根据选择的数据库进行开发。

    • Oracle

 

    MySQL

有各种各样的数据库软件可供选择。

JDBC:Java数据库连接。Java数据库连接(JDBC)的缩写,是用于将Java和数据库连接的一组类和接口所起的作用。

    • JDBC API

 

    • APIとはプログラムやサービスの機能を外部から使えるようにする仕組みや利用方法

 

    • JDKに含まれるパッケージなので、一般的なJava環境が整っていれば使用できる。

 

    • JDBC ドライバ

 

    各DBの開発元が公開してくれている。各サイトのDLページなどからダウンロードできるようになっていたりする。

它是由两个部分构建而成的。

JDBC驱动程序的作用是什么?JDBC驱动器具备吸纳各个数据库的差异的功能。
即使每个数据库的处理方式不同,Java程序也几乎不需要改动,因为JDBC驱动器可以吸收这些差异。

SQL (Structured Query Language) 在中国人调香热衷于固化查询语言结构化查询语言(SQL)是一种用于操作数据库的结构化查询语言。

流动

    1. DB和JDBC驱动的安装

 

    1. SQL操作

 

    1. JDBC编程

 

    Web应用程序集成

按照以下顺序进行

事前准备(安装DB和JDBC驱动程序)在本文中,我们将使用MySQL进行操作。

MySQL的安装MySQL是一种常用的开源数据源(OSS)的数据库。
OSS是Open Source Software的缩写,其源代码是公开的,
可以免费使用、修改和再分发的软件。

本次我们将使用MySQL Community Server。

 

请参考下面的YouTube视频来进行操作。

 

需要设置管理者账户“root”的密码。

在中国,只需要一种中文选项的话,可以将以下句子释义为:
下载JDBC驱动程序只需下载。只是有点难以理解应该下载哪一个。

请参考下方的Youtube视频进行操作。

 

设定环境变量需要非常小心地进行操作。如果设置错误可能会影响其他程序。

    • PATHの設定

 

    • MySQL内のbinフォルダの場所を指定する

 

    • CLASSPATHの設定

 

    JDBCドライバーのファイルを指定する

其他术语等

    • JARファイル(Java ARchive)

 

    • クラスファイルなどを圧縮してまとめたファイル

 

    「~.jar」

SQL是什么?SQL是操作关系数据库(RDB)的标准语言,也是最常用的数据库操作语言。
换句话说,操作数据库的语言不仅仅是SQL。
还有XQuery/OQL/GraphQL/LINQ等等。

SQL的基础入门开始深入研究SQL的实际操作。

首先,在SQL中不区分大小写。
使用大写或小写取决于具体场景。

在数据库中,有一种称为“表”的细分分类。
它类似于Excel的表格,用于整理信息。
纵轴被称为“列”,横轴被称为“行”。
有时也将一行的数据称为“记录”。

数据定义语言(DDL)能够进行数据库和表的创建和修改的语言。

创建
修改
删除等

数据操作语言(DML) ※特别常用对数据表格中的数据进行操作的编程语言。这是最常用的一种。

查询(取得)
插入(挿入)
更新(更新)
删除(削除)等

例如,获取登录信息和进行会员注册等操作可以使用 DML(数据操作语言)来向表中添加记录。

数据控制语言(DCL)哪个用户可以访问哪个表格?这种语言用于权限管理。

授权 (Grant)
取消授权 (Revoke)

我第一次尝试进行SQL操作从实际的简单操作步骤开始执行。

创建数据库表

CREATE DATABASE データベースの名前;
CREATE TABLE データベース名.表名(列名 データ型,~);

//
CREATE TABLE sampledb.student(no int PRIMARY KEY,name varchar(10),score int);

由于MySQL的数据类型与Java的感觉有点不同,所以在进行注册时最好进行一些调查。

通过在数据类型后面加上「PRIMARY KEY」,保证数据的唯一性。而数据的唯一性意味着不能注册相同的数据。具体来说,会员编号就是一个例子。

查看数据库和表的方法在命令提示符中启动MySQL后介绍在SQL中执行的命令。

show databases;
show tables in データベース名;
desc データベース名.テーブル名;

在进行表操作之前

use データベース名;

//これから触るデータベースにしてから作業スタートするように。
source ~.sql;

主要是使用命令操作,但是可以通过将命令汇总到SQL文件中来一次性执行SQL文件中的命令。
所有在「~.sql」文件中的内容将被读取并执行命令。

在SQL中进行数据操作(SELECT语句)。当需要获取表格内的数据时使用

SELECT 列名 FROM 表名;
//列名は「,」で区切って複数指定可能
SELECT * FROM student;
//studentテーブルの情報をすべて取得
SELECT no , score*0.5 FROM student
//studentテーブルの中の「no」行と「score」行に0.5の掛け算をした値を出力
//ここでの*は数値に挟まれているので計算式として扱われる。
SELECT 列名か* FROM テーブル名 ORDER BY 対象の列名 ASCDESC;
//ASCか昇順、DESCが降順
SELECT 列名か* FROM テーブル名 LIMIT 件数;
SELECT 列名か* FROM テーブル名 WHERE 列名 IS NULL;
SELECT 列名か* FROM テーブル名 WHERE 列名 IS NOT NULL;
SELECT 列名か* FROM テーブル名 WHERE 列名 >= 10;
SELECT 列名か* FROM テーブル名 WHERE 列名 IN (A,B);
SELECT 列名か* FROM テーブル名 WHERE 列名 LIKE '検索文字%';
SELECT 列名か* FROM テーブル名 WHERE 列名 LIKE '%検索文字';
SELECT 列名か* FROM テーブル名 WHERE 列名 LIKE '%検索文字%';
SELECT 列名か* FROM テーブル名 WHERE 列名 LIKE '検索文字%' AND 列名 LIKE '%検索文字%';


//比較演算子や中身にデータがあるかどうかなど指定できる
select player from game as gm join goal as go on gm.id=go.matchid
where stadium = 'National Stadium, Warsaw';

//asはテーブル名の別名を設定(省略もできる)joinは関連するテーブルの追加on以下で共通項の設定をする。
SELECT title, name FROM movie m 
JOIN casting c ON m.id=c.movieid
JOIN actor a ON a.id=c.actorid

WHERE 
yr=1962
AND
ord = 1;
select title, name
from movie m, casting c, actor a
where
 c.movieid=m.id
 and c.actorid=a.id
 and ord=1
 and movieid in 
 (select movieid
from casting, actor
where actorid=actor.id
and name='Julie Andrews')
SELECT distinct(player)
FROM game ga JOIN goal go ON go.matchid = ga.id 
WHERE (team1='GER' or team2='GRE')AND teamid <> 'GRE';

//同じ要件が複数重複している場合disinctで重複分をまとめてくれる
SELECT name FROM teacher
WHERE dept IS NULL; 
SELECT name,COALESCE(mobile,'未登録') FROM teacher
select
 name,
case when dept=1 then 'Sci'
when dept=2 then 'Sci' 
else 'Art' end
from
 teacher;

▼加入的使用方法

 

▼如何使用GROUP BY

 

使用SQL进行数据操作(插入语句)。
当我们想要插入表内的数据时使用。

INSERT INTO 表名(列名:省略可) VALUES(挿入したい値)

//
INSERT INTO student VALUES(1,'山田',80);
''」で囲ったものは文字列であるということを示している。

//2
INSERT INTO student(no,name) VALUES(1,'山田');
列を指定して挿入することもできる

在SQL中进行数据操作(更新语句)。在想要更新表内数据时使用

UPDATE 表名 SET 列名 = 列値;
//列名 = 列値は「,」で複数記述できる

//
UPDATE student SET score = score+5;

用SQL进行数据操作(删除指令)您可以删除表中的数据。 de .)

DELETE FROM 表名;

//
DELETE FROM student
studentテーブルのデータをすべて削除

用SQL进行条件筛选(选择语句)通过使用”WHERE子句”,可以在SELECT语句/UPDATE语句/DELETE语句中指定条件。
而在进行条件指定时,还必须具备操作符的知识。

    • 関係演算子 >,>=,<,<=,=,<>

 

    • (=はjavaの==と同義、<>はjavaの!=と同義)

 

    • 論理演算子 AND,OR,NOT

 

    特殊演算子 BETWEEN,LIKE
SELECT {*1列名} FROM 表名[WHERE 取得条件]
//列名は「,」で複数指定可

//1
SELECT * FROM student WHERE 50<=score AND score<=80;

//2
SELECT * FROM student WHERE score BETWEEN 50 AND 80;

//3
SELECT * FROM student WHERE name LIKE '%原';
%0文字以上の任意の文字列。「~原」を抜き出す。「原」もOK

使用SQL进行条件指定(UPDATE语句)

UPDATE 表名 SET 列名= WHERE 更新条件

//
UPDATE student SET score=score+5 WHERE no=1;

使用SQL时对条件进行指定(DELETE语句)

DELETE FROM 表名 WHERE 更新条件

//
DELETE FROM student WHERE no=1;

关于JDBC当涉及使用Java操作数据库时,由于其超重要性,需要详细描述。

在处理JDBC之前必须将JDBC驱动程序设置在环境变量CLASSPATH中。

JDBC更新处理程序的流程

将连接到数据库。处理DriverManager类。
DriverManager类是用来管理JDBC驱动程序的类。
可以使用getConnection方法来进行操作。

Connection con = Driver.Manager.getConnection(JDBCURL,username,pass);

//接続するDBを指定する文字列
//URL:jdbc:mysql://dbサーバー名(localhost)/DB名
//MySQLはURLの形だが、違うデータベースはそれぞれ指定の形で行う

//変数conを作る

生成语句管理DB的连接信息

Statement stmt = con.createStatement();

//変数conを使う
//変数stmtを作る

执行SQL执行 SQL

int count=stmt.executeUpdate(SQL文);

//変数stmtを使う
//変数countには変更件数が入る

释放资源

stmt.close();
con.close();

//作った変数を作った順と逆順でstmt⇒conの順番で閉じる

让我们实际看一下代码。

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;

public class InsertStudent{

  public static void main(String[] args){

    //「①DBに接続」で使う引数を事前に設定
    final String URL = "jdbc:mysql://localhost/sampledb";
    final String USER = "root";
    final String PASS = "pass";

    //「③SQLを実行」で使う引数を事前に設定
    String sql = "INSERT INTO student VALUES(6,'Kobayashi',95)";

    //変数conとstmtを事前にnullで定義
    Connection con = null;
    Statement stmt = null;
    //try内で定義してしまうと、try内でしか使えないのでconとstmtがcloseできない
    

    try{
      //①DBに接続
      con = DriverManager.getConnection(URL, USER, PASS);
      
      //②ステートメントを生成
      stmt = con.createStatement();
      
      //③SQLを実行
      int count = stmt.executeUpdate(sql);      
      System.out.println( count + "件更新しました");
    } catch(Exception e){
     //tryの中でエラーが発生したときのエラー表示
      e.printStackTrace();
    } finally {
      try{
        //④リソースを解放
        //例外が発生しても必ず実行されるfinallyブロックに
        //nullだとcloseができないのでif文に入れている
        if(stmt != null) stmt.close();
        if(con != null) con.close();
      } catch(Exception e){
        e.printStackTrace();
      }
    }
  }
}

//conとstmtは必ずラストにcloseしなければならない

JDBC搜索处理程序的流程

执行SQL在更新处理和搜索处理中,执行SQL语句时的方法不同。
在更新时,返回值是数字;在搜索时,返回值是搜索结果。

ResultSet rs = stmt.executeQuery(SQL文);

//ResultSet検索した結果を保持している

处理搜索结果

while(rs.next()){
//getterメソッド呼び出しデータ型により記述内容が変わる
}


//nextメソッドは行(横軸)の移動、データがあれば戻り値はtrue、なければfalse

//gettterメソッドは列(縦軸)へのアクセス
//getXxx("列名"/列番号)列番号は1から始まる
//String name = rs.getString("name");

释放资源同样需要释放资源的是搜索处理。

rs.close();
stmt.close();
con.close();

让我们实际动手编写代码吧。

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;

public class SelectAllStudent{

  public static void main(String[] args){
  
    final String URL = "jdbc:mysql://localhost/sampledb";
    final String USER = "root";
    final String PASS = "pass";
    String sql = "SELECT * FROM student";
    
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    try{
      //①DBに接続
      con = DriverManager.getConnection(URL, USER, PASS);
      //②ステートメントを生成
      stmt = con.createStatement();
      //③SQLを実行
      rs = stmt.executeQuery(sql);
      //④検索結果の処理
      System.out.println("+-------+-------+-------+");
      System.out.println("| no    | name  | score |");
      System.out.println("+-------+-------+-------+");
      while(rs.next()){
        System.out.print("| " + rs.getInt("no") + "\t");
        System.out.print("| " + rs.getString("name") + "\t");
        System.out.println("| " + rs.getInt("score") + "\t|");
      }
      System.out.println("+-------+-------+-------+");
    } catch(Exception e){
      e.printStackTrace();
    } finally {
      try{
        //⑤リソースの解放
        if(rs != null) rs.close();
        if(stmt != null) stmt.close();
        if(con != null) con.close();
      } catch(Exception e){
        e.printStackTrace();
      }
    }
  }
}

使用预编译语句。
预备的意思是已经准备好的。
这种方法是在语句阶段将SQL语句作为参数传递的方法。

可以事先编写指定了IN参数的SQL语句,并使用setter方法简便地将值赋给SQL语句的IN参数。

操作步骤指定一个包含IN参数的SQL语句
IN参数是指(?.?.?)

INSERT INTO students VALUES(?.?.?)

使用setter方法来设置值到?

使用setter函数来给?赋值。

ps.setInt(1,7);
ps.setString(2,"藤原");

//データ型は第2引数に合わせる
//第1引数は?の位置を指定している

执行SQL

必须关闭资源。

让我们实际动手写一次

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;

public class InsertStudent2{

  public static void main(String[] args){
  
    final String URL = "jdbc:mysql://localhost/sampledb";
    final String USER = "root";
    final String PASS = "pass";
    String sql = "INSERT INTO student VALUES(?, ?, ?)";
    String[] names = {"sato", "yamada", "kawata", "uchida"};
    int[] scores = {90, 85, 80, 75};
    
    Connection con = null;
    PreparedStatement ps = null;
    
    try{
      //①DBに接続
      con = DriverManager.getConnection(URL, USER, PASS);
      //②ステートメントを生成
      ps = con.prepareStatement(sql);
      //③SQLを実行
      for(int i = 0; i < names.length; i++){
        ps.setInt(1, i + 7);
        ps.setString(2, names[i]);
        ps.setInt(3, scores[i]);
        ps.executeUpdate();
      }
      System.out.println( names.length + "件更新しました");
    } catch(Exception e){
      e.printStackTrace();
    } finally {
      try{
        //リソースの解放
        if(ps != null) ps.close();
        if(con != null) con.close();
      } catch(Exception e){
        e.printStackTrace();
      }
    }
  }
}


涉及Web应用的关键词
这里只是简单介绍一下关键词,不做详细解释。

MVC模型将应用程序分为模型、视图和控制器三部分,并相互作用来搭建应用程序的机制。这种机制在之前自己学习的Ruby on Rails中也被使用,Java也采用了类似的机制。

由于MVC模型的详细介绍在另一篇文章中已经整理好,请参考那篇文章。

 

在Java的MVC中的关键词Ruby on Rails和Java的MVC模型有一个很大的区别,就是Java的MVC模型要根据Java的语法规范来创建。而在Ruby on Rails中,由于每个MVC组件的编写方式都不同,所以这是一个很大的区别。

DAO
Data Accces Objectの略。
MVCモデルのモデルに当たる。
データベースとのやりとりの箇所のみ。
基本的にSQLがらみの記述はDAOにするイメージ。

サーブレット
MVCモデルのコントローラーに当たる。

JSP
Java Server Pagesの略
MVCモデルのビューに当たる。HTMLなどで記述する。

Java的MVC要点 (Java de MVCDAO和Servlet是一种能够连接已存在的类之间的语法,可以建立它们之间的连接。

StuDAO sdao = new StuDAO;

//この記述で「StuDAO」という名前のDAOファイルと接続ができる。
    • DTO

 

    • Data Transfer Object

 

    データを転送するために使用するクラス
StuDTO select(){...}

//テーブル内の情報をすべて取得するイメージ

Entitiyクラス
テーブルの1行分を転送するために使用するクラスのこと。DTOの中の1つのようなイメージ。
DTOにadd,get,sizeメソッドなどの、一覧から表示するようなメソッドを定義。
Entityにはテーブル内の項目(氏名、生徒番号)などの情報に基づいたset,getメソッドの定義が必要

DAOとDTOとEntity
すごくふんわりしたイメージ。
クラスの種類。3クラスとも必ず事前に定義が必要。
DAOはデータ取得
DTOはデータ転送(全件データ)
Entityはデータ転送のより詳細な指示(詳細データ)
DTOとEntityはDAOを補助するツールクラスみたいなイメージ
一覧情報をDTOで取得し、Entityで1行などの詳細情報を取得するイメージ。
EntityはBeansなどの変数で定義されることが多い。

与网络应用程序相关的应用编辑 

关于网页制作,实际操作中在创建时要进行反复检查和重新组装。

在处理数据库时非常方便的软件我一直都在CUI界面上操作,比如cmd,但实际上有很多可以通过GUI操作数据库的软件。
我不太熟悉CUI,所以感觉用GUI操作更容易,但习惯了之后可能就不再使用命令了…

DBeaver –> DBeaver 数据库管理工具 

一种选项是将A5M2改写成: 

bannerAds