如何将结果集连接到字符串变量

时间:2019-01-11 09:05:16

标签: java sql

我想将ItemName列的值设置为一个与逗号分开的字符串。

我尝试过这样,但是不起作用

        String sql = "SELECT `ItemName` FROM `invoicelist` WHERE `InvoiceId` = '"+invoicenum+"' ";
        try {
        ResultSet rs =   CODE.DbAccess.getdata(sql);


        while (rs.next()) {
        String em =  rs.getString("ItemName");

         description = em.replace("\n", ",");
         System.out.println(description);  


        }

2 个答案:

答案 0 :(得分:3)

如果要在Java中进行串联,则应更改为此:

Public wdApp As New Word.Application, wdDoc As Word.Document, wdTbl As Word.Table
Public strFolder As String, strFile As String, WkBk As Workbook, WkSht As Worksheet, r As Long

Sub GetTableData()

Application.ScreenUpdating = False
Dim x As Integer

strFolder = GetFolder: If strFolder = "" Then GoTo ErrExit
Set WkBk = ActiveWorkbook
wdApp.WordBasic.DisableAutoMacros
strFile = Dir(strFolder & "\*.doc*", vbNormal)
While strFile <> ""
Set wdDoc = wdApp.Documents.Open(FileName:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False)
Set WkSht = WkBk.Sheets.Add
x = x + 1
WkSht.Name = Mid(strFile, 20, 29) & x

With wdDoc
For Each wdTbl In .Tables
  With wdTbl.Range.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[^13^l]"
    .Replacement.Text = "¶"
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
   End With
  r = WkSht.Cells(WkSht.Rows.Count, 1).End(xlUp).Row
  If r > 1 Then r = r + 2
  wdTbl.Range.Copy
  WkSht.Paste Destination:=WkSht.Range("A" & r)
Next
WkSht.UsedRange.Replace What:="¶", Replacement:=Chr(10), LookAt:=xlPart, SearchOrder:=xlByRows
.Close SaveChanges:=False
End With
strFile = Dir()
Wend
ErrExit:
wdApp.Quit
Set wdDoc = Nothing: Set wdApp = Nothing: Set WkSht = Nothing: Set WkBk = Nothing
Application.ScreenUpdating = True
End Sub

Function GetFolder() As String
Dim oFolder As Object
GetFolder = ""
Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choose a folder", 0)
If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path
Set oFolder = Nothing
End Function

Function sheet_exists(sheet_to_find As String) As Boolean

Dim work_sheet As Worksheet

sheet_exists = False
For Each work_sheet In ThisWorkbook.Worksheets
    If sheet_to_find = work_sheet.Name Then
        sheet_exists = True
        Exit Function
    End If
Next work_sheet

End Function

如果要在查询中进行串联,则可以搜索String sql = "SELECT `ItemName` FROM `invoicelist` WHERE `InvoiceId` = '" + invoicenum + "' "; try { ResultSet rs = CODE.DbAccess.getdata(sql); while (rs.next()) { description += rs.getString("ItemName") + ","; } description = description.substring(0, description.length() - 1); //System.out.println(description); }

答案 1 :(得分:1)

String sql = "SELECT `ItemName` FROM `invoicelist` WHERE `InvoiceId` = '" + invoicenum + "' ";
try { 
    ResultSet rs =   CODE.DbAccess.getdata(sql);
    StringBuilder builder = new StringBuilder(); // used to store string and append data further if you want
    while (rs.next()) {
        builder.append(rs.getString("ItemName").append(","); // adding data/Item name to builder and appending comma after adding item name
    } 
    if(builder.length() > 0){ // if there's some data inside builder
        builder.setLength(builder.length() - 1); // remove last appended comma from builder
    }
    System.out.println("Command Separated Data" + builder.toString()); // final data of item name
}

其他方法是从SQL本身连接结果。(这是与MySQL兼容的代码)

String sql = "SELECT group_concat(`ItemName`) as items FROM `invoicelist` WHERE `InvoiceId` = '" + invoicenum + "' ";
try { 
    ResultSet rs =   CODE.DbAccess.getdata(sql);
    String data = "";
    while (rs.next()) {
        data = rs.getString("items")
    } 
    System.out.println("Command Separated Data" + data); 
}