0

我如何让我的程序一个字一个字地从数据库中读取一个 Set 值。

import java.util.*;
import java.sql.*;
public class SetProblem {

public static void main(String[] args) {

    Connection con = null;
    Statement st = null;
    ResultSet rs  = null;

    Set<String> nums = new HashSet<>();
    nums.add("1");
    nums.add("2");
    try
    {
        Class.forName("org.sqlite.JDBC");
        con = DriverManager.getConnection("jdbc:sqlite:src/database/set.db");
        st = con.createStatement();
        //st.execute("create table data(word, synonyms);");
        //st.executeUpdate("insert into data values('figure', '"+nums+"');");
        rs = st.executeQuery("select * from data;");
        Set<String> set = new TreeSet<>();
        while(rs.next())
        {
            set.add(rs.getString(2));
        }
        for(String s:set)
        {
            System.out.print(s + "");
        }
    }
    catch(ClassNotFoundException e)
    {
        System.out.println("Driver not found");
    }
    catch(SQLException s)
    {
        System.out.println("wrong sql command");
    }
}

}

我的问题是它打印 [1, 2] 而不是我想要的 1 2 。我怎样才能做到这一点?

4

1 回答 1

0

您正在插入一行,但您想要(我认为)是插入两行。您看到 [1, 2] 因为它正是您在第二列中插入的内容(您正在强制使用 nums.toString())。

这是我认为您正在寻找的代码:

    //...
    Set<String> nums = new HashSet<>();
    nums.add("1");
    nums.add("2");
    try
    {
        Class.forName("org.sqlite.JDBC");
        con = DriverManager.getConnection("jdbc:sqlite:src/database/set.db");
        st = con.createStatement();
        //st.execute("create table data(word, synonyms);");
        //for(String i: nums)  //HERE YOU NEED TO CYCLE
        //   st.executeUpdate("insert into data values('figure', '"+i+"');");
        rs = st.executeQuery("select * from data;");
        Set<String> set = new TreeSet<>();
        while(rs.next())
        {
            set.add(rs.getString(2));
        }
        for(String s:set)
        {
            System.out.print(s + "");
        }
    }
    //...
于 2013-06-16T20:11:05.350 回答