2009-06-18 23 views
6

đang hiện tại:Groovy String nối

row.column.each(){column -> 
    println column.attributes()['name'] 
    println column.value() 
} 

Column là một Node rằng có một thuộc tính duy nhất và một giá trị duy nhất. Tôi đang phân tích cú pháp xml thành đầu vào tạo các câu lệnh chèn vào truy cập. Có cách Groovy nào để tạo câu lệnh có cấu trúc sau đây không:

Insert INTO tablename (col1, col2, col3) VALUES (1,2,3) 

Tôi hiện đang lưu trữ thuộc tính và giá trị cho các mảng riêng biệt rồi đưa chúng vào đúng thứ tự.

Trả lời

18

Tôi nghĩ rằng nó có thể dễ dàng hơn rất nhiều trong groovy hơn là câu trả lời hiện được chấp nhận. Các phương pháp thu thập và tham gia được xây dựng cho loại điều này. Tham tự động chăm sóc nối và cũng không đặt dấu phẩy dấu trên chuỗi

def names = row.column.collect { it.attributes()['name'] }.join(",") 
def values = row.column.collect { it.values() }.join(",") 
def result = "INSERT INTO tablename($names) VALUES($values)" 
+1

Điều này làm việc hoàn hảo! Vì thiết lập của tôi là table.row.column, tôi đã sử dụng $ {table.attributes() ['name']} để lấy tablename – XanderLynn

0

Bạn chỉ có thể sử dụng hai Trình tạo chuỗi. Một cái gì đó như thế này, đó là thô và chưa được kiểm tra:

def columns = new StringBuilder("Insert INTO tablename(") 
def values = new StringBuilder("VALUES (") 
row.column.each() { column -> 
    columns.append(column.attributes()['name']) 
    columns.append(", ") 
    values.append(column.value()) 
    values.append(", ") 
} 
// chop off the trailing commas, add the closing parens 
columns = columns.substring(0, columns.length() - 2) 
columns.append(") ") 
values = values.substring(0, values.length() - 2) 
values.append(")") 

columns.append(values) 
def result = columns.toString() 

Bạn có thể tìm thấy tất cả các loại toán tử thao tác chuỗi Groovy here.

+1

Trong Groovy bạn có thể thêm vào sau một StringBuilder sử dụng '<<' chứ không phải là "append()" mà làm cho mã nhiều hơn nữa có thể đọc được IMO –