728x90

 

ExecuteNonQuery ();

public override int ExecuteNonQuery ();

SQL문을 실행한 후 어떤 결과값이 돌아오지 않을 때 사용하는 메서드이다. 즉 , 데이터베이스에 데이터값을 넣거나, 데이터를 바꾸고 싶을 때 사용한다. 그래서 UPDATE , DELETE , INSERT 등을 이용할 때 사용된다. 리턴값은 정수형식(INT32)로 반환되며 그 값은 SQL문을 실행했을 때 영향을 받은 행들의 수이다. 그 이외에는 -1 이 반환된다. 반환값은 선택적으로 활용하면 된다.

 


ExecuteDataset( );

public static DataSet ExecuteDataset( );

SQL 문을 실행한 이후 데이터 값을  DataSet 에 담는 메서드 이다.
DataSet을 table에 담아 List 컬렉션을 사용해 반환하는 방법으로 사용할 수 있다. 다수 행 데이터일 때 유용하다.

 

 

 


ExecuteScalar ();
public override object ExecuteScalar ();

SQL 쿼리 실행 후 첫번째 행의 첫번째 열의 값을 반환한다. 주로 단일값을 가져오는 경우 사용된다.
반환값이 object 이기 때문에 자신이 활용할 값으로 캐스팅하여 사용하면 편리하다

 

 

 

ExecuteReader ();
public System.Data.SqlClient.SqlDataReader ExecuteReader ();

어떤 SQL 쿼리에서도 적용이 가능하다. SELECT , UPDATE , DELETE , INSERT 모두 가능한다. 주로 결과값을 받고 싶은 경우에 사용한다. SELECT 쿼리를 이용할 경우 해당하는 값들이 DataReader 타입으로 온다. 값을 가져온 후에는 SqlDataReader객체의 read메서드를 통해 값을 읽어올 수 있고 , 사용 후에는 close메서드를 이용하여 실행을 끝내주어야 한다.

 

실무에서는 sqlconnection sqlclient를 이용해 store procedure를 가져온 후

해당 데이터를 메서드를 사용하여 저장하고 List collection에 dictionary 형태로 저장하는 등의 방법으로 사용하였다

마이크로 소프트에  sqlconnection sqlclient 사용법이 잘 나와있어 정리하면 좋을 것 같다

 

https://learn.microsoft.com/ko-kr/dotnet/api/system.data.sqlclient.sqlconnection?view=dotnet-plat-ext-7.0&source=recommendations 

 

SqlConnection 클래스 (System.Data.SqlClient)

SQL Server 데이터베이스에 대한 연결을 나타냅니다. 이 클래스는 상속될 수 없습니다.

learn.microsoft.com

 

728x90

'C# asp.net' 카테고리의 다른 글

ASP.NET 웹 폼 특징  (1) 2024.01.03
C# JsonResult, ActionResult  (0) 2023.06.26
C# Newtonsoft.Json, JObject  (0) 2023.06.26
C# namespace, using 사용법  (0) 2023.06.19
C# : Database 연동(SqlClient 사용)  (0) 2022.04.21
728x90

C#에서 JSON데이터를 다루기위해 JObject라는 클래스를 사용하였다.

 

ASP.NET MVC 프레임워크를 사용한다면, JsonResult와 ActionResult도 사용이 가능하다. 주로 컨트롤러의 메서드에서 jsonresult를 반환하여 클라이언트에게 json데이터를 전송할 때 사용한다.

 

MVC 패턴을 사용하기 위해서 아래 내용이 임포트 되어있어야 한다.

using
Microsoft.AspNetCore.Mvc;

 

JsonResult

 ASP.NET MVC에서 사용되는 클래스로, JSON 형식의 데이터를 반환하기 위해 사용 주로 컨트롤러의 액션 메서드에서 JsonResult를 반환하여 클라이언트에게 JSON 데이터를 전송할 수 있다.

using Microsoft.AspNetCore.Mvc;

public class MyController : Controller
{
    public JsonResult MyAction()
     {
     var data = new { name = "John", age = 30 };
     return Json(data);
     }
}

 

ActionResult

ActionResult는 ASP.NET MVC에서 액션 메서드의 결과를 나타내는 추상 클래스

ActionResult를 상속하여 다양한 종류의 결과를 반환한다. JsonResult은 ActionResult의 일종입니다.

JsonResult와 다른 점은 ActionResult는 다른 유형의 결과도 반환할 수 있으며, 예를 들어 ViewResult는 HTML 뷰를 반환하고, RedirectResult는 다른 URL로 리디렉션할 수 있다.

using Microsoft.AspNetCore.Mvc;

public class MyController : Controller
{
    public ActionResult MyAction()
     {
     var data = new { name = "John", age = 30 };
     return Json(data);
     // return View(); // HTML 뷰 반환
    // return RedirectToAction("Index", "Home"); // 다른 액션으로 리디렉션
     }
}

 

728x90

'C# asp.net' 카테고리의 다른 글

ASP.NET 웹 폼 특징  (1) 2024.01.03
C# DB 연결관련 메소드 정리  (0) 2023.08.01
C# Newtonsoft.Json, JObject  (0) 2023.06.26
C# namespace, using 사용법  (0) 2023.06.19
C# : Database 연동(SqlClient 사용)  (0) 2022.04.21
728x90

C#에서 JSON 형태로 데이터를 주고 받으려고 한다

 

Newtonsoft.json 추가하기

C# 파일에서 Nuget 패키지 관리에 들어가 json 데이터 통신이 가능한

Newtonsoft.json 을 추가한다. 설치가 안되어 있으면 설치를 진행한다.

 

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

 

JObject

JObject는 JSON 데이터를 나타내는 C# 클래스이다. JSON 문자열을 JObject로 변환하면 JSON 데이터를 C#에서 쉽게 다룰 수 있다

 

using Newtonsoft.Json.Linq;


string jsonString = "{ \"name\": \"John\", \"age\": 30 }";

JObject json = JObject.Parse(jsonString);

string name = (string)json["name"];
int age = (int)json["age"];

jsonString 객체에 json 형식의 예시 데이터를 저장한다.

 

JObject.Parse(JObject 클래스의 정적 멤버인 Parse 메서드)를 사용하여 문자열을 jobject 객체로 반환한다

이 때, jsonString 변수에 저장된 JSON 데이터가 파싱되어 json 객체에 할당된다.

 

이제 json객체를 사용하여 json["name"]; 와 같이 json데이터에 접근할 수 있다. 

 

JSON 객체의 키에 해당하는 값을 가져오기 위해 인덱서([])를 사용하며, 

해당 값은 필요한 형식으로 캐스팅하여 사용할 수 있다. 

 

 

JObject의 메서드들

 

해당 값은 필요한 형식으로 캐스팅하여 사용할 수 있다. 

JObject.ToString(): JObject를 문자열로 변환합니다.
기본적으로는 JSON 형식으로 출력됩니다.

JObject.Parse(jsonString)["propertyName"]:
JObject의 특정 속성에 접근할 때, 속성 이름을 인덱서로 사용하여 값을 가져올 수 있습니다.

JObject.ToString(Formatting formatting):
JObject를 지정된 형식으로 문자열로 변환합니다. Formatting 매개변수를 사용하여 들여쓰기, 줄 바꿈 등의 형식을 지정할 수 있습니다.

 

아래 사이트를 참고하면 좋을 것 같다

https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm

728x90

'C# asp.net' 카테고리의 다른 글

C# DB 연결관련 메소드 정리  (0) 2023.08.01
C# JsonResult, ActionResult  (0) 2023.06.26
C# namespace, using 사용법  (0) 2023.06.19
C# : Database 연동(SqlClient 사용)  (0) 2022.04.21
ASP.NET : ADO.NET이란  (0) 2022.04.21
728x90
네임 스페이스란

성격이나 하는 일에 따라 클래스, 메소드 등을 하나의 이름으로 묶어 두는 것

 

 

네임스페이스에는 다음과 같은 속성이 있습니다.
  • 대규모 코드 프로젝트를 구성합니다.
  • 연산자를 사용하여 구분됩니다 . .
  • using 지시문은 모든 클래스에 대해 네임스페이스 이름을 지정할 필요가 없습니다.
  • global 네임스페이스는 “루트” 네임스페이스입니다. global::System은 항상 .NET System 네임스페이스를 가리킵니다.

 

 네임 스페이스는 수 없이 많은 클래스들 간의 충돌을 방지하고자 사용합니다. 비슷한 의미와 역할을 하는 클래스들을 비롯한 개체들은 이름이 비슷하거나 똑같을 수도 있습니다.

특히 큰 프로젝트의 경우 여러 사람이 작업을 진행하게 되는데 이 경우 문제가 여러 곳에서 발생할 수도 있습니다. 그래서 이 네임 스페이스를 활용해 클래스들을 관리하고 사용합니다. c#의 .net 프레임 워크의 경우 무려 11,000여개의 클래스들이 존재함에 따라 네임 스페이스가 적극적으로 활용되고 있습니다.

 

 

네임스페이스 사용법 : using

namespace는 using 이라는 키워드를 통해 불러와서 사용할 수 있습니다.

네임스페이스에 정의 된 각 타입과 객체들을 참조할 수 있다.

using System;
using System.Data.Entity;
using System.IO; using System.Linq;
using System.Web;
using System.Web.Mvc;

 

System네임 스페이스를 using 키워드를 통해 추가해두면 네임 스페이스를 명시하지 않고도 System네임 스페이스에 포함되어 있는 클래스에 접근이 가능합니다.

 

 

 

참고

https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/types/namespaces

 

네임스페이스에서 형식 구성

네임스페이스가 관련 형식을 구성하는 데 어떻게 도움이 되는지 알아봅니다.

learn.microsoft.com

 

728x90

'C# asp.net' 카테고리의 다른 글

C# JsonResult, ActionResult  (0) 2023.06.26
C# Newtonsoft.Json, JObject  (0) 2023.06.26
C# : Database 연동(SqlClient 사용)  (0) 2022.04.21
ASP.NET : ADO.NET이란  (0) 2022.04.21
asp.net mvc : 로그인, 로그오프 구현하기  (0) 2022.04.13
728x90

 

프로젝트 중 신규 페이지와 기능을 추가하고  dto를 추가했는데,

오류 메시지가 나오면서 페이지가 전혀 뜨지 않았다......

 

에러문구

2023-06-01 16:29:30.593 ERROR 4304 --- [nio-9091-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/bus/register.html]")] with root cause org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'BusNo' cannot be found on null at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:219) ~[spring-expression-5.3.27.jar:5.3.27] at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:106) ~[spring-expression-5.3.27.jar:5.3.27] at org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:53) ~[spring-expression-5.3.27.jar:5.3.27] at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:412) ~[spring-expression-5.3.27.jar:5.3.27] at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:93) ~[spring-expression-5.3.27.jar:5.3.27] at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:114) ~[spring-expression-5.3.27.jar:5.3.27] at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:338) ~[spring-expression-5.3.27.jar:5.3.27] at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ~[thymeleaf-spring5-3.0.15.RELEASE.jar:3.0.15.RELEASE] at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) ~[thymeleaf-3.0.15.RELEASE.jar:3.0.15.RELEASE] at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) ~[thymeleaf-3.0.15.RELEASE.jar:3.0.15.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) ~[thymeleaf-3.0.15.RELEASE.jar:3.0.15.RELEASE] at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.0.15.RELEASE.jar:3.0.15.RELEASE]

 

빨간 색 내용을 검색해보니,

객체가 null 이어서 조회할 수 없어 생기는 오류라고 한다.

 

간단하게 th:value 에서  dto에 ?를 붙여 해결할 수 있었다.

신규 테이블이라 아예 데이터가 없어서 생긴오류 같다.

 

적용

?만 넣어주니 페이지가 제대로 나왔다 ㅠ_ㅠ

 

 

다른 방법으로는

th:if 문으로 데이터 분기문을 사용할 수 있다고 한다.

 

아래 참고

https://ssd0908.tistory.com/entry/thymeleaf-if-else-%EC%A1%B0%EA%B1%B4%EB%AC%B8-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95

728x90
728x90

dto.java 파일을 생성 후 데이터 객체에 어노테이션을 추가했는데

빨간 줄이 뜨면서 validation 패키지 자체가 주입이 되어 있지 않는 것을 확인했다

 

Spring Validation이란?

validation이란 프로그래밍에 있어서 가장 필요한 부분이다.

Java/Kotlin 에서는 null값에 대해 접근하려고 할 때, null point exception이 발생한다. 이런 부분을 방지하기 위해 미리 검증하는 과정을 Validation이라고 함

 

 

 

검색해보니

 

spring boot 2.3 version 이상부터는 spring-boot-starter-web 의존성 내부에 있던 validation이 사라져

 spring boot version이 2.3 이상이라면 validation 의존성을 따로 추가해주어야 한다고 한다.

 

먼저 의존성을 추가해야한다

 

 

maven pom.xml 파일에 의존성 추가

아래 내용을 추가해주고 빌드하면 된다

<dependency>           
   <groupId>org.springframework.boot</groupId>           
   <artifactId>spring-boot-starter-validation</artifactId>           
   <version>2.5.2</version>       
</dependency>

 

 

 

 

validation 적용하기

dto 데이터 객체에 annotation을 추가 해주니 화면에서 잘 적용된 걸 확인할 수 있다.

 

 

이 외 가능한 유효성 검사

@Null

// null만 혀용합니다.

@NotNull

// null을 허용하지 않습니다. "", " "는 허용합니다.

@NotEmpty

// null, ""을 허용하지 않습니다. " "는 허용합니다.

@NotBlank

// null, "", " " 모두 허용하지 않습니다.

@Email

// 이메일 형식을 검사합니다. 다만 ""의 경우를 통과 시킵니다. @Email 보다 아래 나올 @Patten을 통한 정규식 검사를 더 많이 사용합니다.

@Pattern(regexp = )

// 정규식을 검사할 때 사용됩니다.

@Size(min=, max=)

// 길이를 제한할 때 사용됩니다.

@Max(value = )

// value 이하의 값을 받을 때 사용됩니다.

@Min(value = )

// value 이상의 값을 받을 때 사용됩니다.

@Positive

// 값을 양수로 제한합니다.

@PositiveOrZero

// 값을 양수와 0만 가능하도록 제한합니다.

@Negative

// 값을 음수로 제한합니다.

@NegativeOrZero

// 값을 음수와 0만 가능하도록 제한합니다.

@Future

// 현재보다 미래

@Past

// 현재보다 과거

@AssertFalse

// false 여부, null은 체크하지 않습니다.

@AssertTrue

// true 여부, null은 체크하지 않습니다.

 

 

 

728x90
728x90

계정접속 시, ora 01017 오류가 떠서 암호 수정법을 찾아보았다.....

 

 

Oracle sql developer에서 계정 생성 후 암호를 수정할 수 있다

 

우선 sysdba계정으로 접속 후 다른사용자 섹션을 클릭한다

 

클릭 시 나오는 계정들 중 수정할 계정을 선택하여

우클릭 시, 사용자 편집 화면이 나온다

 

비밀번호 및 시스템 권한 등을 수정할 수 있다.

 

쿼리로 계정 생성 및 권한 부여도 가능하다

 

* 계정 생성
create user [id] identified by [pw];

* 권한 부여
grant [권한] to [id];
grant connect, resource, dba to [id];

 

 

728x90

'DB' 카테고리의 다른 글

Oracle : 시퀀스, 인덱스 생성  (0) 2023.08.01
Oracle : 윈도우 10 오라클 11G 설치, DB계정 생성  (0) 2023.04.01
[DB] 테이블 설계 단계  (0) 2022.12.07
728x90

JAVA를 객체지향 언어라고 하는데 객체지향언어란 무엇일까?

알아보기 앞서 객체가 무엇인지 부터 알아보자

 

※ 객체[Object]

객체란 주변에 있는 모든 사물을 말한다

 

 객체지향언어[Object-oriented Language]

 

 

 

객체지향언어의 4가지 특징

1. 캡슐화

데이터와 코드의 형태를 외부로부터 알 수없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법

 

 

2. 상속

상위 클래스의 모든걸 하위 클래스가 모두 이어 받는것

3. 다형성

한 객체가 다른 여러형태(객체)로 재구성 되는 것

대표적인 예로 오버로드, 오버라이딩이 있다.

 

 

4.추상화

공통적인 속성과 기능을 추출하여 정의하는 것

 

 

객체지향언어의 장점

1. 재사용성
상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있음.

2. 생산성 향상
잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있음.

3. 자연적인 모델링
우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있다.


4. 유지보수의 우수성
프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉬워서 매우 경제적이라할
수 있다.

 

 

객체지향언어의 단점

1. 개발속도가 느린점
객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소모 된다.

2. 실행속도가 느린점

객체지향언어는 대체적으로 실행속도가 느리다.

3. 코딩난이도 상승
다중 상속이 지원되는 C++ 같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.

728x90

'JAVA' 카테고리의 다른 글

JAVA : substring 문자열 자르기  (0) 2023.08.16
JAVA : charAt() 사용법  (0) 2023.08.16
JAVA : try catch 예외처리  (0) 2022.05.12
JAVA : 클래스, 클래스 구성요소  (0) 2021.07.09
JAVA : method 메소드 정의, 형식  (0) 2021.07.09
728x90

윈도우 hosts 파일 수정하기

url 접근 시 DNS를 통하지 않고 원하는 IP로 접속할 때 사용

>> 원하는 IP로 사이트에 접근하고 싶을 때

 

window 10 에서 hosts 파일 경로

C:\Windows\System32\drivers\etc

아래에서 hosts 파일을 메모장으로 실행한다

 

 

 

파일 수정

#이 달린 내용은 무시하고 파일에  원하는 IP  url (호스트명) 입력 후 저장한다

예시 )

127.0.0.1 machine129.tistory.com

 

 

728x90
728x90

spring boot mybatis 사용 시 dao, dto, service, mapper 개념에 대해 알아보자

 

DTO(Data Transfer Object)

계층간 데이터 교환을 위한 객체

DB에서 데이터를 얻어 service나 controller로 보낼 때 사용한다

로직을 갖고 있지 않은 순수한 데이터 객체이다. 데이터 타입과 사이즈를 정의할 수 있다.

@Data annotation은

@Getter / @Setter, @ToString, @EqualsAndHashCode와 @RequiredArgsConstructor 를 합친 것

 

---> 해당 프로젝트에서 게시판을 구현하기 위해 BoardDto 를 만들고 DB 테이블에 있는 데이터 객체와 동일한 객체를 생성해 주었다.

 

DAO(Data Access Object)

mapper와 dto를 연결하는 것

CRUD 기능을 정의된 메소드를 통해 구현한다

---> mapper에 id와 동일한 메소드를 정의하였다 

 

mapper

XML 파일로 쿼리를 작성하는 곳

dao에서 CRUD 함수에 해당하는 실제 쿼리를 정의해 놓은 것

#, $ 표시를 사용하여 파라미터값을 사용함

--->resultType 데이터를 반환할 형태, parameterType 파라미터의 자료형을 명시한다.

service

DAO를 여러개 묶어서 사용할 때 service를 사용

DAO로 DB에 접근하고 DTO로 데이터를 전달받은 다음, 비지니스 로직을 처리해 적절한 데이터를 반환한다.

@Autowired Repository를 통해 repository의 method를 이용 적절한 Business Logic을 처리한다.

728x90

+ Recent posts