라벨이 database인 게시물 표시

2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

[C#] LINQ로 3개의 테이블을 JOIN한 후 DataGridView에 표시하는 방법

엄청 간단하구나..ㅎㅎ SQL문을 몰라도 논리적으로 기술하면 바로 돌아간다. LINQ도 메소드식과 쿼리식이 있는데, 쿼리식이 좀 더 간결하고 보기 쉬운듯. 워낙 직관적이라 그냥 소스만 붙여놔도 알 듯. // 3개의 테이블을 Join한 후, 필요한 필드만 추출해서 필드명을 지정한 후 Datagridview에 표시      using  ( var   model  =  new   FourTypesModel ())     {          var   query  =  from   u   in   model . users                      join   r   in   model . results   o n u.id equals r.userid                      join   t   in   model . types   on   r . typeid   equals   t . id          ...

[메모] LINQ 로 간단한 JOIN (LEFT-INNER-JOIN) 하기

정말 너무나 취약한 분야 데이터베이스 ㅋㅋ 하면 까먹고 보면 잊어버리고 이건 뭐 ㅋㅋㅋㅋ 여하턴 LINQ를 이용해서 두 테이블을 하나로 합치는 걸 해봤다. 여기서는 내부결합만 했고 외부결합은 다음 링크를 참조해보자. [참조] LINQでの内部結合・外部結合 여기서는 users 테이블에서 id, 이름, 성별, 연령 항목값과 typeresult 테이블에서 점수 항목값을 가져와서 JOIN 한 테이블을 만든 후, 이용자 개체에 값을 할당했다. // 타겟이 되는 이용자id를 사용해서 두 테이블을 내부결합 하는 코드 with LINQ // 참고:qiita.com/H-Takayama/items/0e0a962f9ebc59547e4d // 다른 코드는 생략      var   query  =  model . users . Join (              //결합 할 테이블명              model . typeresults ,              //결합 하는 쪽의 결합조건              typeresults  =>  typeresults . id ,       ...

[메모] Entity Framework 를 이용한 데이터조작

Npgsql과 Entity Framework를 설치한 후, using으로 데이터 관련 라이브러리를 추가한 후, 아래와 같이 사용할 수 있음. 기본적으로는 DbContext 모델을 만든 후, 그 모델에 접근해서 데이터를 조작한다. 여기서는 effects 라는 테이블에 id (pk), effectname (char) 라는 두 개의 컬럼이 있다고 가정하고, 기본적인 CRUD 를 해 봤다. LINQ는 좀 더 공부를 해야할 듯. 자주 쓰면 익숙해지겠지..?? <참고> はじめての LINQ Entity Framework 記事の一覧(iPentec.com) using   System ; using   System . Data ; using   System . Linq ; using   System . Data . SqlClient ; using   System . Data . Entity ; using   Npgsql ; namespace   NpgsqlEF6TestApp {      public   partial   class   Form1  :  Form     {          public   Form1 ()         {              InitializeComponent ();              using  ( var ...

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

PostgreSQL에서 Entity Framework를 사용해서 DB조작할 때 에러에 대한 메모. id컬럼을 Serial형(Auto Increasing)으로 만든 테이블에 id 값을 생략한 형식으로 INSERT를 하려고 했더니 다음과 같은 에러가 났다. ERROR: 重複キーが一意性制約" table_pkey "に違反しています。 ERROR: duplicate key value violates unique constraint "table_pkey" 초기화 SQL 스크립트로 데이터만 집어넣은 컬럼이라 치가 중복이 된 건 아니고, 왜 이런 에러가 나는지 감이 안잡혔는데 다음 링크에서 해답을 얻었다. PostgreSQLでINSERT時に自動採番の主キーが重複してエラーが出る場合の対処法 요약을 하자면, PostgreSQL에서는 자동으로 증가하는 번호를 시퀀스 오브젝트를 사용하여 내부적으로 관리하는데 이걸 수동으로 변경하거나 데이터를 외부에서 삽입 혹은 복사하게 되면 실제 컬럼에 들어간 값과 시퀀스 오브젝트의 값이 달라지게 되어서 문제가 생기는 경우가 있다. 내 경우에는 스크립트로 SQL 을 직접 입력해서 값을 삽입한 것이 문제가 된 듯. 이것을 확인하고 수정하는 건 다음의 3단계를 거친다. 실제 테이블 컬럼값의 최대치를 확인 >> SELECT MAX(id) FROM table; 시퀀스 오브젝트 값 확인 >> SELECT nextval('table_id_seq'); 두 값이 일치하면 문제가 없음. 두 값이 불일치하는 경우, 시퀀스 오브젝트 값을 테이블 컬럼값으로 변경해준다. >> SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));

[SQL] JOIN 개념을 시각화해서 보여주는 사이트

이미지
JOIN 참 중요하지...실무에서 제대로 몰라서 우당탕탕 하다가 다시 공부하려고 생활코딩을 보며 정리하려다가 귀찮아서...ㅠㅠ 필요할 때 밑에 있는 사이트에서 클릭해서 다이어그램을 클릭하면 어떤 JOIN인지, 그리고 SQL 예문이 나오니 활용하자. SQL Joins Visualizer (이게 가장 많이 쓰이는 LEFT JOIN + NULL 조합) 그리고 다른 분이 잘 정리해 놓은 자료도 필요하면 찾아보자..내가 적으려니 귀찮..ㅠㅠ 관계형 데이터베이스에서 조인(JOIN)이란? * 아 그리고 UNION 구문은 두 개의 테이블을 조합하는데 NULL 값과 중복을 제거한다.

[C#] EntityFramework6 for NpgSQL을 이용해서 edmx생성하기

이미지
l   결론 VS2017&2019 + .NET Framework 4.6.1 ( 4.7.1도 가능 ) + Entity Framework 6.2.0 + Npgsql 4.0.7의 조합으로  PostgreSQL 9.6 서버에 접속 후 、 Entity Data Model의 위자드를 사용하여 기존에 있던 데이터베이스를 참조해서  edmx 모델을 생성하는데 성공함.  NuGet 패키지메니저를 사용해서 필요한 라이브러리를 참조추가 &  NpgSQL의  vsix 패키지를 이용해서  ADO.NET의  Entity Data Model에  Provider 항목에 PostgreSQL을 추가하면 사용가능함. 모델클래스와 소스코드의 편집과 수정에 대한 확인은 하지 않았음. l   테스트 환경(전부 일본어 환경임..ㅠㅠ) Ø   Visual Studio 2019 & .NET Framework 4.6.1 Ø   Entity Framework 6.2.0 & Entity Framework for Npgsql 3.2.1.1 Ø   PostgreSQL 9.6+pgAdmin 3 l   작업순서 및 내용 ①       솔루션탐색기의 프로젝트명에서 오른쪽 클릭 후, 서브메뉴에서  「追加」⇒「新しい項目」 를 선택한다. ②       새로운 항목추가 화면에서 아이템리스트에서 「データ」를 선택 후, 항목리스트에서 「 ADO.NET Entity Data Model 」을 선택한 후 이름을 입력하고 「追加」버튼을 클릭한다.   ③       Entity Data Model 위자드(한국어판은 마법사??)가 표시되면 「データベースから EF Designer 」를 선택하고 「次へ」버튼을 클릭한다. ...

[C#] Npgsql을 이용해서 CRUD 하는 방법

이미지
C#은 MSSQL하고 궁합이 좋다고들 하는데 비싸서..보통 프로젝트에는 무료DBMS를 사용하게 됨. 회사에서 자주 사용하는 건 PostgreSQL9 버전인데..옛날처럼 SQL문 그대로 때려박으면 때려박힌다..ㅋㅋ ADO.NET이나 Entity Framework 를 사용해서 추상 개체 모델을 만들어 데이터를 핸들링 하라는데.. Postgre로 Eneity Framework를 해보려다가 포기랄까..실패 ㅋㅋ 이유는 자동으로 모델을 만들어주는 방법이 있는데 중간에 계속 에러가 나더라..edmx 개념도 아직은 핀트가 안 오고 ADO도 제대로 써본 적이 없어서.. 동영상 강의를 찾아보니 ADO.NET 을 사용하는 방법이 더 자료가 많길래 따라하면서 학습했다. 어렵지는 않았지만..너무 프로그래밍 안하고 등한시 하다보니까 이런 게 신기하게 느껴지네 ㅎㅎ 이하 메모와 소스코드. [개요] PostgreSQL9.4 에 Npgsql로 접속 후, 테이블에 있는 내용을 Dataset으로 긁어와서 GridView에 출력 문자열과 숫자 데이터를 입력해서 데이터를 추가(INSERT) 할 수 있음. 그리드의 데이터를 선택해서 수정(UPDATE) 혹은 삭제(DELETE) 할 수 있음. 새로고침(REFRESH) 버튼을 누르면 데이터를 최신상태(DB에 있는 내용)로 갱신한다. [메모] 솔루션 탐색기에서 [추가] -> [Nuget패키지] 들어가서 Npgsql을 검색해서 참조추가를 해야 함. using Npgsql 필요 DB커넥션 개체등 필요에 의해 개체를 생성, Npgsql~이라는 이름이 붙어있음. DB데이터를 조작하는 방법은 직접적인 방법(연결형)과 간접적인 방법(비연결형)이 있음. 연결형은 데이터베이스 서버에 계속 붙어서 리얼타임으로 데이터를 처리하는 방식임. 비연결형은 데이터베이스에서 데이터를 읽어와서 로컬의 메모리에 올려두고 데이터어뎁터와 데이터셋을 이용함. @마크가 붙은 것은 파라메터로 DB에 질의를 할 때 복수의 데이터를...

node.js 에서 mysql db 연걸하는 방법

mysql 모듈 설치 $> npm install mysql --save [ 소스코드 - database_mysql.js ] 'use strict' // mysql 데이터베이스 접속 및 설정 var mysql = require ( 'mysql' ); var conn = mysql . createConnection ({ host : 'localhost' , user : 'root' , password : '**********' , port : 3306 , database : 'test' }); conn . connect (); var sql = 'SELECT * FROM test' ; conn . query ( sql , function ( err , rows , fields ){ if ( err ) { console . log ( err ); } else { console . log ( 'rows' , rows ); console . log ( 'fields' , fields ); } }); conn . end ( function () {      console . log ( 'connection end' ); }); [참조] A pure node.js JavaScript Client implementing the MySql protocol.

Cakephp3 Association(테이블 병합)

테이블 병합 혹은 테이블 조인을 쉽게 해 주는 기능인데 제대로 이해는 못 하고 쓰기에만 급급함. 종류가 네 가지 있는데, 1:1(hasOne) 1:n(hasMany), n:1(belongsTo), n:n(belongsToMany) 임. 이 중에서 belongsTo 를 예시로 보자면.. 1. Model (****Table.php) 의 initialize() 에 다음을 추가한다. > courseTable.php     public function initialize(array $config)     {         parent::initialize($config);         $this->setTable('course');         $this->setDisplayField('id');         $this->setPrimaryKey('id');         $this->addBehavior('Timestamp');          $this->belongsTo('Section' );  // 옵션도 설정 가능  // $this->belongsTo('Section', [ 'foreignKey' => 'section_idx' ]);     } 하면 자동적으로 section 테이블과 병합이 된다. 여기서 주의해야 할 점은 첫째, 병합이 되는 테이블은 테이블과 엔티티 파일 (/Model/Table/****Table.php, /Model/Entity/****.php) 가져야 한다. 둘째, 주 키와 외래 키를 설정해야 한다. 설정하지 않는 경우...

cakephp3 트렌젝션 거는 방법

예를 들어, 데이터베이스의 필드에 +1 을 해야하는 경우, 동시에 복수의 이용자가 업데이트를 해 버리면 대략 난감... 혹은 업데이트 하는 중간에 뭔가 문제가 생겨서 변수만 증가되고 데이터베이스에는 업데이트가 이루어지지 않고 끝난다던가.. 여러가지 문제가 있을 수 있으므로 이런 경우에는 동시에 데이터베이스 입력이나 수정을 못 하게끔 잠글 필요가 있다. 논리적으로 락을 걸 수 있으나 (디비에 필드 만들어서 켜 있는 경우에는 입력변경 금지 시키고 꺼 있는 경우에는 가능하게끔) 데이터베이스의 트렌젝션을 이용해도 된다는 이야기에 솔깃해서 찾아보니 cakephp3 에도 기본적인 트렌젝션은 패키지로 제공하고 있더라. https://book.cakephp.org/3.0/ja/orm/database-basics.html#id11 음..제대로 움직이는지 아직 테스트를 안 해봐서 모르겠지만 일단 에러없이 돌아는 간다. > SectionController.php <?php namespace App\Controller; // 요 세 개 추가요~ use Cake\ORM\TableRegistry; use Cake\Datasource\ConnectionManager; use Exception; // 필요한 곳에 다음과 같이 기술함.     public function add()     {         $connection = ConnectionManager::get('default');         $connection->begin();         try           {              // 다른 코드 생략......

Cakephp3 에서 같은 테이블의 복수의 레코드를 한 번에 인서트 하는 방법

하나의 테이블에서 복수의 레코드를 추가해야 하는 경우, 미리 데이터셋을 만들어 놓은 뒤 foreach 로 돌려가면서 insert 하면 한 번에 여러 컬럼을 넣을 수 있다. 현재 프로젝트에서는 고객정보를 등록하면 고객이 사용하는 마스터의 최신 레코드 인덱스들을 관리하는 채번 테이블에 마스터 별로 레코드를 생성할 필요가 있었는데 다음과 같이 해결했다. > CustomerController.php public function add() { // 다른 코드는 생략... if($this->Masters->exists(['customer_idx' => $customer_idx])) // 마스터 관리하는 채번 테이블에 고객이 존재하나 확인 { $this->Flash->error(__('해당 고객번호가 존재하므로 채번 테이블에 레코드 생성 실패했습니다')); } else {         // 해당 테이블에 인서트 할 정보를 미리 정의하는 부분         $master_temp = [         [              'customer_idx' => $customer_idx,              'master_type' => 'SC',              'current_idx' => 0,         ], // 필요한 정보를 위와 같이 정의해서 정렬, 여러 개 가능 ]; // Master_index에 레코드를 추가하는 처리 $query = $this->Masters->query(); ...

cakephp 3.x 컨트롤러에서 다른 이름의 테이블을 불러와서 쓰는 방법

cakephp3 는 기본적으로 제약이 걸려 있어서 MVC 패턴이 적용되어 있고 그에 따라서 파일명을 붙일 때 여러가지 룰이 있다.  플러스!! 이름이 같은 경우, 예를 들어서 UsersController.php (Controller) 는 같은 이름의 UsersTable.php (Model) 과 User.php (Entity) 를 자동으로 참조하게 되어있다. 이름을 다르게 주거나 대소문자가 틀리거나 하면 꽤나 귀찮은 일이 벌어지더라..ㅠㅠ 근데 당연하게도 하나의 컨트롤러에 하나의 모델만 쓸 수는 없는 노릇이니..때로는 A 컨트롤러에서 B테이블에 있는 데이터를 참조하거나 조작하고 싶을 때가 있다. 그 때 필요한 건 TableRegistry 가 되겠다. 1. 작업할 컨트롤러 파일을 열어서 맨 위에 패키지를 추가한다. > ****Controller.php 상단에 추가 use Cake\ORM\TableRegistry; 2. 작업할 컨트롤러의 initialize() 함수에서 참조할 테이블명을 입력해서 핸들러? 핼퍼? 를 생성한다. > 더 보기 class UsersController extends AppController {     public function initialize()     {         parent::initialize();         // Customers 테이블 조작할 수 있는 핸들러? 생성         $this->Customers = TableRegistry::get('customers');     } // 다른 소스 생략.. // 필요한 부분에서 다음과 같이 사용 가능하다.    public function initiali...

cakePHP 3.x Database Configuration

CakePHP 설치 끝!! 이라고 생각했는데...ㅠㅠ 뭔지 모르지만 데이터베이스를 연결해야 한다는 에러가 정보페이지에 떴다. 약간의 삽질 후 성공 ㅋ 1. mysql 등등 데이터베이스 서버를 실행하고 2. 새로운 데이터베이스를 만들고 설정한다, 이름은 아무거나 ㅇㅋ (cakephp로 했음ㅋ) 3. 다음의 SQL문은 복사해서 실행한다. (필요한 테이블 생성하는 것이라고 함.)  CREATE TABLE users (  id INT AUTO_INCREMENT PRIMARY KEY,  email VARCHAR(255) NOT NULL,  password VARCHAR(255) NOT NULL,  created DATETIME,  modified DATETIME );  CREATE TABLE bookmarks ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, title VARCHAR(50),  description TEXT,  url TEXT,  created DATETIME,  modified DATETIME, FOREIGN KEY user_key (user_id) REFERENCES users(id)  );  CREATE TABLE tags ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255),  created DATETIME,  modified DATETIME, UNIQUE KEY (title) );  CREATE TABLE bookmarks_tags ( bookmark_id INT NOT NULL, tag_id INT NOT NULL,  PRIMARY KEY (bookmar...

mysql 사용하기 - 로그인과 실행하기

이미지
mysql 의 설치와 GUI Tool의 설치에 대해서는 넘어가겠습니다 ㅋㅋ 파일 다운로드 후 설치만 하면 끝나는데다가, 이미 훌륭한 포스팅들이 많이 있기 때문이지요..^^ 관련 파일 다운로드 및 정보는  http://www.mysql.com/  를 참조하세요~^^ 자, mysql이 설치가 되었다고 가정하고..^^ 먼저 로그인 방법입니다. prompt> mysql -h [host IP] -u [username] -p [databaseName] localhost, 즉 자기 컴퓨터에서 동작시키는 경우에는 별도의 host IP 가 필요없습니다. [패스워드는 별도로 입력하게 됩니다, 이로써 mysql에 접속 성공!!] 이 프롬프트에서 이런저런 sql 명령을 이용할 수 있게 됩니다. sql 명령에 대한 정리는 다음에!! 하도록 하고, 우선 예를 하나만 들어볼까요?? 가장 많이 쓰이는 select 문에 대해서 실행하고 싶다면, 다음의 명령을 입력하면 됩니다. mysql> select * from table1; 이 때, 세미콜론(;)은 빼먹지 않도록 주의하세요!! 전 맨날 빼먹어요 ㅋㅋㅋㅋ 그러면 아마 이렇게 결과가 촤르륵!!! 하고 뜰겁니다. [근데 뭔가 이상한 게...비행기의 스펠링이 틀린 것 같다는 느낌이;;;;] 또 하나, 이건 제가 전~혀 몰랐던 부분인데요..(아 챙피 ㅠㅠ) mysql에서는 직접 커멘드를 입력해서 실행이 가능하지만, 외부에서 *.sql 파일을 만들어서 이 파일을 실행하는 것 역시도 가능하다고 합니다. 이게 왜 좋은가 한다면, sql 파일을 명령별로 개행해서 작성한 후 돌려보면.. 어떤 라인의 어떤 명령어 혹은 필드명 등등이 틀렸는지 직관적으로 알 수 있다는 것!!! 이를 위해서 필요한 명령은 다음과 같습니다. mysql> \. [filename] 얘는 세미콜론이 안 붙습니다..왜!냐!하!면!...