2008-10-10 30 views
49

Tôi gặp sự cố khi sử dụng đối tượng java.text.MessageFormat.Java MessageFormat - Làm thế nào tôi có thể chèn các giá trị giữa các dấu nháy đơn?

Tôi đang cố tạo câu lệnh chèn SQL. Vấn đề là, khi tôi làm điều gì đó như thế này:

MessageFormat messageFormat = "insert into {0} values ('{1}', '{2}', '{3}', {4})"; 
Object[] args = { str0, str1, str2, str3, str4 }; 
String result = messageFormat.format(args); 

tôi có được điều này cho giá trị của result:

"insert into <str0> values ({1}, {2}, {3}, <str4>)" 

Như bạn có thể thấy, vấn đề là một trong các vị trí mục tiêu mà kèm theo dấu nháy đơn không được thay thế bởi các đối số. Tôi đã thử sử dụng các dấu ngoặc kép đơn như sau: ''{1}'' và các ký tự thoát như sau: \'{1}\' nhưng vẫn mang lại kết quả tương tự.

chỉnh sửa: Tôi quên đề cập đến rằng tôi cũng đã thử '''{1}'''. Kết quả là: "insert into <str0> values ('{1}', '{2}', '{3}', <str4>)". Nó đang giữ dấu ngoặc kép ban đầu nhưng vẫn không chèn các giá trị.

Tôi làm cách nào để giải quyết vấn đề này? Đối với hồ sơ, tôi đang sử dụng JDK 6u7.

+1

Chỉ ra rằng ''' {0} ''' hoạt động sau khi tất cả. Tôi chỉ cần làm sạch toàn bộ thư mục xây dựng của mình, vì quá trình xây dựng của tôi không được cập nhật chính xác và tôi đã không nhận ra nó. Rất tiếc! –

+0

[Câu trả lời này] (http://stackoverflow.com/questions/17569608/format-a-message-using-messageformat-format-in-java#17569639) giải thích lý do tại sao báo giá bổ sung là cần thiết. –

Trả lời

91

Tôi chỉ cố gắng dấu ngoặc kép và nó làm việc tốt cho tôi:

MessageFormat messageFormat = new MessageFormat("insert into {0} values (''{1}'', ''{2}'', ''{3}'', {4})"); 
Object[] args = {"000", "111", "222","333","444","555"}; 
String result = messageFormat.format(args); 

Kết quả là:

insert into 000 values ('111', '222', '333', 444) 

Đây có phải là những gì bạn cần không?

+1

Tôi đã thử điều này trước đây, nhưng nó không hoạt động. Một cái gì đó đã được hơi say với quá trình xây dựng ... sau khi một sạch hoàn toàn -> xây dựng lại, phương pháp này đã làm việc! *than van*. Cảm ơn! –

+0

Bạn được chào đón :) – serg

0

Điều đầu tiên bạn nghĩ đến là thay đổi str1, str2, str3 để có dấu nháy đơn xung quanh chúng.

 
Object[] args = { str0, "'" + str1 + "'", "'" + str2 + "'", "'" + str3 + "'", str4 }; 

Sau đó, tất nhiên, xóa dấu nháy đơn khỏi chuỗi truy vấn của bạn.

+0

Cảm ơn. Đây là cách giải quyết hiện tại của tôi nhưng tôi muốn một cái gì đó nhanh hơn/sạch hơn một chút. –

6

Trong vòng Chuỗi, một cặp dấu nháy đơn có thể được sử dụng để trích dẫn bất kỳ ký tự tùy ý nào ngoại trừ dấu nháy đơn. Ví dụ: chuỗi mẫu "'{0}'" đại diện cho chuỗi "{0}", không phải là FormatElement. Bản thân một trích dẫn đơn lẻ phải được thể hiện bằng các dấu nháy đơn được tăng gấp đôi '' trong một số String. Ví dụ, mô hình chuỗi "'{''}'" được hiểu như là một chuỗi các '{ (bắt đầu trích dẫn và một cú đúp xoăn trái), '' (một dấu nháy đơn), và }' (một cú đúp xoăn đúng và kết thúc của trích dẫn), không'{''}' (dấu ngoặc nhọn trái và phải): đại diện cho chuỗi "{'}", không phải"{}".

Từ: MessageFormat (Java Platform SE 8)

+0

Cảm ơn. Tôi đã đọc điều này trong tài liệu Java nhưng tôi đã nhầm lẫn (Và không thể có được những gì tôi muốn từ nó), Mặc dù chắc chắn có một khả năng lớn mà tôi đã làm sai. Chăm sóc để xây dựng? –

+1

Tôi nghĩ rằng phần quan trọng là: "Một trích dẫn đơn lẻ phải được biểu diễn bằng dấu ngoặc đơn kép" trong suốt chuỗi "- phần còn lại chỉ giải thích cách dấu nháy đơn và dấu ngoặc nhọn được kết hợp. Khá một câu ... – wemu

2

Sử dụng ba ký tự dấu nháy đơn:

MessageFormat messageFormat = "insert into {0} values ('''{1}''', '''{2}''', '''{3}''', '''{4}''')"; 
+1

Điều này chỉ dẫn đến '" chèn vào các giá trị ('{1}', '{2}', '{3}', ) "'. Vì vậy, nó có dấu nháy đơn ngay bây giờ nhưng các giá trị đối số vẫn không được chèn vào. –

25

Xin lỗi nếu điều này bị tắt, nhưng có vẻ như bạn đang cố gắng sao chép PreparedStatement đã có trong JDBC.

Nếu bạn đang cố gắng tạo SQL để chạy với cơ sở dữ liệu thì tôi khuyên bạn nên xem xét PreparedStatement, nó đã làm những gì bạn đang cố gắng làm (với một cú pháp hơi khác).

Xin lỗi nếu đây không phải là những gì bạn đang làm, tôi chỉ nghĩ rằng tôi sẽ chỉ ra.

+0

Tôi cũng không biết điều này, cảm ơn! –

Các vấn đề liên quan