Hướng dẫn setstring int parameterindex string x java là gì năm 2024

Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

setNString Method (int, java.lang.String)

  • Article
  • 11/18/2022

In this article

Download JDBC driver

Sets the designated parameter to the specified String object.

Syntax

  
public final void setNString(int parameterIndex,  
                                                  java.lang.String value)  

Parameters

parameterIndex

An int that indicates the parameter index.

value

A String object that contains the parameter value.

Exceptions

SQLServerException

Remarks

This method should be used for NCHAR, NVARCHAR, NTEXT, and XML data types.

This setNString method is specified by the setNString method in the java.sql.PreparedStatement interface.

Generics là một tính năng của Java giúp cho lập trình viên có thể chỉ định rõ kiểu dữ liệu mà họ muốn làm việc với một class, một interface hay một phương thức nào đó. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về Generics trong Java.

Nội dung

Tại sao lại cần có Generics?

Generics là một khái niệm được đưa vào Java từ phiên bản 5. Trước khi đưa ra khái niệm Generics là gì, chúng ta hãy xem một đoạn code của Java trước phiên bản 5.

Như bạn đã biết ArrayList là một danh sách, bạn có thể thêm, xóa, sửa và truy cập vào các phần tử của danh sách.

List list = new ArrayList();

Với khai báo trên, giả định rằng chúng ta mong muốn chỉ làm việc với đối tượng kiểu Integer. Nhưng bởi vì list là một collection của đối tượng Object nên chúng ta có thể sử dụng nó với bất kỳ kiểu dữ liệu nào. Tại nơi nào đó trong chương trình bạn thêm vào danh sách này một phần tử không phải Integer. Khai báo sau sẽ hợp lệ:

list.add(10); list.add("gpcoder.com"); list.add(true);

Như bạn thấy, tôi có thể thêm các phần tử kiểu Integer, String, Boolean. Tuy nhiên, khi bạn lấy ra các phần tử và ép kiểu về Integer, một ngoại lệ sẽ bị ném ra.

Đó là nguyên nhân của sự cần thiết phải có của generics trong Java. Với Generics, chúng ta có thể chỉ định kiểu dữ liệu mà chúng ta sẽ làm việc ngay thời điểm biên dịch (compile time).

Ví dụ trên có thể viết lại như sau:

List list = new ArrayList();

Khi thêm một phần tử không phải kiểu Integer trình biên dịch sẽ báo lỗi ngay:

Hướng dẫn setstring int parameterindex string x java là gì năm 2024

Một số quy ước đặt tên kiểu tham số Generic

Đặt tên kiểu tham số là rất quan trọng để học Genericics. Nó không bắt buộc, tuy nhiên chúng ta nên đặt theo quy ước chung để dễ đọc, dễ bảo trì. Các kiểu tham số thông thường như sau:

  • E- Element (phần tử – được sử dụng phổ biến trong Collection Framework)
  • K – Key (khóa)
  • V – Value (giá trị)
  • N – Number (kiểu số: Integer, Double, Float, …)
  • T – Type (Kiểu dữ liệu bất kỳ thuộc Wrapper class: String, Integer, Long, Float, …)
  • S, U, V … – được sử dụng để đại diện cho các kiểu dữ liệu (Type) thứ 2, 3, 4, …

Ký tự Diamond <>

Trong Java 7 và các phiên bản sau, bạn có thể thay thế các đối số kiểu dữ liệu cần thiết để gọi hàm khởi tạo (constructor) của một lớp Generic bằng cặp dấu <>. Trình biên dịch sẽ xác định hoặc suy ra các kiểu dữ liệu từ ngữ cảnh sử dụng.

Ví dụ, bạn có thể tạo một list với câu lệnh sau:

// Trước Java 7 List integerBox = new ArrayList(); // Khai báo sử dụng cặp dấu <> từ phiên bản Java 7 List integerBox = new ArrayList<>();

Để biết thêm thông tin về ký hiệu <>, bạn xem thêm trên trang document của Oracle.

Kiểu Generic cho Class và Interface

Kiểu Generic cho Class

Ví dụ dưới đây định nghĩa ra một class Generics. KeyValuePair là một class Generics nó chứa một cặp khóa và giá trị (key/ value).

package com.gpcoder.generic; public class KeyValuePair { private K key; private V value; public KeyValuePair(K key, V value) {

this.key = key;
this.value = value;
} public K getKey() {
return key;
} public void setKey(K key) {
this.key = key;
} public V getValue() {
return value;
} public void setValue(V value) {
this.value = value;
} }

K, V trong class KeyValuePair được gọi là tham số Generics nó là một kiểu tham chiếu nào đó. Khi sử dụng class này bạn phải xác định kiểu tham số cụ thể.

package com.gpcoder.generic; public class KeyValuePairExample { public static void main(String[] args) {

KeyValuePair entry = new KeyValuePair("gpcoder", 123456789);
String name = entry.getKey();
Integer id = entry.getValue();
System.out.println("Name = " + name + ", Id = " + id); // Name = gpcoder, Id = 123456789
} }

Thừa kế lớp Generics

Một class mở rộng từ một class Generics, nó có thể chỉ định rõ kiểu cho tham số Generics, giữ nguyên các tham số Generics hoặc thêm các tham số Generics.

package com.gpcoder.generic; public class ContactEntry extends KeyValuePair { public ContactEntry(String key, Integer value) {

super(key, value);
} }

Ví dụ sử dụng ContactEntry:

package com.gpcoder.generic; public class ContactEntryExample { public static void main(String[] args) {

ContactEntry entry = new ContactEntry("gpcoder", 123456789);
String name = entry.getKey();
Integer id = entry.getValue();
System.out.println("Name = " + name + ", Id = " + id); // Name = gpcoder, Id = 123456789
} }

Một vài cách sử dụng kế thừa khác:

ContactEntry2.java

package com.gpcoder.generic; public class ContactEntry2 extends KeyValuePair { public ContactEntry2(String key, V value) {

super(key, value);
} }

ContactEntry3.java

package com.gpcoder.generic; public class ContactEntry3 extends KeyValuePair { public ContactEntry3(K key, V value) {

super(key, value);
} }

ContactEntry4.java

list.add(10); list.add("gpcoder.com"); list.add(true);

0

Kiểu Generic cho Interface

Một Interface có tham số Generics:

list.add(10); list.add("gpcoder.com"); list.add(true);

1

Ví dụ một class cài đặt Interface trên:

list.add(10); list.add("gpcoder.com"); list.add(true);

2

Ví dụ 2 class Student và Teacher sử dụng GenericDao trên:

list.add(10); list.add("gpcoder.com"); list.add(true);

3

list.add(10); list.add("gpcoder.com"); list.add(true);

4

Ví dụ sử dụng các lớp trên:

list.add(10); list.add("gpcoder.com"); list.add(true);

5

Phương thức generics

Một phương thức trong class hoặc Interface có thể sử dụng generic.

list.add(10); list.add("gpcoder.com"); list.add(true);

6

Ví dụ sử dụng phương thức Generics:

list.add(10); list.add("gpcoder.com"); list.add(true);

7

Khởi tạo đối tượng Generic

Đôi khi bạn muốn khởi tạo một đối tượng Generic:

list.add(10); list.add("gpcoder.com"); list.add(true);

8

Việc khởi tạo một đối tượng generic như trên là không được phép, vì không hề tồn tại ở thời điểm chạy của Java. Nó chỉ có ý nghĩa với trình biên dịch kiểm soát code của người lập trình. Mọi kiểu đều như nhau nó được hiểu là Object tại thời điểm chạy của Java. Muốn khởi tạo đối tượng generic bạn cần cung cấp cho Java đối tượng Class, Java sẽ tạo đối tượng tại thời điểm runtime bằng Java Reflection.

list.add(10); list.add("gpcoder.com"); list.add(true);

9

Ví dụ sử dụng phương thức khởi tạo trên:

List list = new ArrayList();

0

Mảng Generic

Có thể khai báo một mảng Generic, nhưng không thể khởi tạo một mảng Generic. Vì kiểu generic không hề tồn tại tại thời điểm chạy, List hoặc List đều là List. Generic chỉ có tác dụng với trình biên dịch để kiểm soát code của người lập trình. Điều đó có nghĩa là trình biên dịch của Java cần biết rõ là cái gì mới có thể biên dịch (compile) new T[10];. Nếu không biết rõ nó mặc định coi T là Object.

List list = new ArrayList();

1

Ví dụ:

List list = new ArrayList();

2

Chương trình sử dụng GenericArray:

List list = new ArrayList();

3

Quay trở lại với vấn đề tại sao Java không hỗ trợ khởi tạo một mảng Generic?

Lý do là kiểu generic không hề tồn tại tại thời điểm chạy, List hoặc List đều là List. Generic chỉ có tác dụng với trình biên dịch để kiểm soát code của người lập trình. Điều đó có nghĩa là trình biên dịch của Java cần biết rõ là cái gì mới có thể biên dịch (compile) new T[10];. Nếu không biết rõ nó mặc định coi T là Object.

Nếu muốn khởi tạo mảng Generic bạn cần phải truyền cho Java đối tượng Class, giúp Java có thể khởi tạo mảng generic tại thời điểm runtime bằng cách sử dụng Java Reflection. Hãy xem ví dụ minh họa:

List list = new ArrayList();

4

Chương trình sử dụng GenericArrayContructor trên:

List list = new ArrayList();

5

Generics với ký tự đại diện

Trong mã Generic, dấu chấm hỏi (?), được gọi là một đại diện (wildcard), nó đại diện cho một loại không rõ ràng. Một kiểu tham số đại diện (wildcard parameterized type) là một trường hợp của kiểu Generic, nơi mà ít nhất một kiểu tham số là wildcard.

Ví dụ của tham số đại diện (wildcard parameterized) là :

  • Collection
  • List
  • Comparator
  • Pair.

Các ký tự đại diện có thể được sử dụng trong một loạt các tình huống: như kiểu của một tham số, trường (field), hoặc biến địa phương; đôi khi như một kiểu trả về (Sẽ được nói rõ hơn trong các ví dụ thực hành). Các đại diện là không bao giờ được sử dụng như là một đối số cho lời gọi một phương thức Generic, khởi tạo đối tượng class generic, hoặc kiểu cha (supertype).

Các ký hiệu đại diện nằm ở các vị trí khác nhau có ý nghĩa khác nhau:

  • Ký tự đại diện : chấp nhận tất cả các loại đối số (chứa mọi kiểu đối tượng). Ví dụ: Collection mô tả một tập hợp chấp nhận tất cả các loại đối số kiểu String, Integer, Boolean, …
  • Ký tự đại diện : chấp nhận bất ký đối tượng nào miễn là đối tượng này kế thừa từ type hoặc đối tượng của type. Ví dụ: List mô tả một danh sách, nơi mà các phần tử là kiểu Number hoặc kiểu con của Number.
  • Ký tự đại diện : chấp nhận bất ký đối tượng nào miễn là đối tượng này là cha của type hoặc đối tượng của type. Ví dụ: Comparator Mô tả một bộ so sánh (Comparator) mà thông số phải là String hoặc cha của String.

Một kiểu tham số ký tự đại diện (wildcard parameterized type) không phải là một loại cụ thể, và nó không thể xuất hiện trong một toán tử new.