java 从数据库取数据并存入本地文本中

还是上次你帮我解决的那个问题,我现在才发现,你没有判断uid是否相同,如果相同就把内容放进同一个文本里,因此导致文本里的数据是每个用户最后那一条数据,不是存的这个用户的所有数据。

第1个回答  推荐于2016-03-28
fos = new FileOutputStream(new File(dir, entry.getKey()+".txt"), true);

把FileOutputStream的第二个参数设置为true,就表示追加内容追问

还是不行,还是只能存扫描到的最后一条数据,还有上次说的 回车换行也不对

还有这个:这是数据库里的情况

这是取出来的文本的情况:

追答

你再贴些完整点的代码吧

追问

       //关闭流  

   analyzer.close();

   reader.close();

fos.flush();

追答

conn.selectFromDb方法是把所有结果一次查出来么?但是你的Uid是个Map,其key是唯一的,也就是一个uid在里面只有一个值,你要是想把所有的值都存在里面,可以考虑用Map>

追问

哦,我懂你的意思了,我得把这里的Map<String,String>改成Map<String,List<String>>,谢谢阿,我去试试,我现在改成这样,不会写,呵呵了

追答

user_id = ...........;

//获取内容
text = res.get(user_id);
if(text==null){
text = new ArrayList();
res.put(user_id, text);
}
text.add(text这里数据的内容);

来自:求助得到的回答本回答被提问者采纳
第1个回答  推荐于2016-03-28
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * java读取数据库内容并存放到文件中
 * @author young
 *
 */
public class JavaToSQLTest {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("F:\\workspace\\test.txt");
PrintWriter pw = new PrintWriter(file);
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;DatabaseName = soft";
Connection conn = null;
String id;
String fname, lname;
try {
pw.println("emp_id\t\tfname\t\tlname");
Class.forName(driver);
conn = DriverManager.getConnection(url, "sa", "1234");
PreparedStatement ps = conn.prepareStatement("select emp_id, fname, lname from emps");
ResultSet rs = ps.executeQuery();
while(rs.next()){
id = rs.getString("emp_id");
fname = rs.getString("fname");
lname = rs.getString("lname");
pw.print(id + "\t");
pw.print(fname + "\t\t");
pw.print(lname);
pw.println();
}

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pw != null){
pw.close();
}
}

}
}

追问

你这种也可以但是没有对id进行判断,我的数据是这样子的,同一uid有很多,所以要判断。

追答

这个要判断也不难 不想扩展了。

第2个回答  推荐于2016-03-28
fos = new FileOutputStream(new File(dir, entry.getKey()+".txt"), true);

把FileOutputStream的第二个参数设置为true,就表示追加内容追问

还是不行,还是只能存扫描到的最后一条数据,还有上次说的 回车换行也不对

还有这个:这是数据库里的情况

这是取出来的文本的情况:

追答

你再贴些完整点的代码吧

追问

       //关闭流  

   analyzer.close();

   reader.close();

fos.flush();

追答

conn.selectFromDb方法是把所有结果一次查出来么?但是你的Uid是个Map,其key是唯一的,也就是一个uid在里面只有一个值,你要是想把所有的值都存在里面,可以考虑用Map>

追问

哦,我懂你的意思了,我得把这里的Map<String,String>改成Map<String,List<String>>,谢谢阿,我去试试,我现在改成这样,不会写,呵呵了

追答

user_id = ...........;

//获取内容
text = res.get(user_id);
if(text==null){
text = new ArrayList();
res.put(user_id, text);
}
text.add(text这里数据的内容);

来自:求助得到的回答本回答被提问者采纳
第2个回答  推荐于2016-03-28
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * java读取数据库内容并存放到文件中
 * @author young
 *
 */
public class JavaToSQLTest {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("F:\\workspace\\test.txt");
PrintWriter pw = new PrintWriter(file);
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;DatabaseName = soft";
Connection conn = null;
String id;
String fname, lname;
try {
pw.println("emp_id\t\tfname\t\tlname");
Class.forName(driver);
conn = DriverManager.getConnection(url, "sa", "1234");
PreparedStatement ps = conn.prepareStatement("select emp_id, fname, lname from emps");
ResultSet rs = ps.executeQuery();
while(rs.next()){
id = rs.getString("emp_id");
fname = rs.getString("fname");
lname = rs.getString("lname");
pw.print(id + "\t");
pw.print(fname + "\t\t");
pw.print(lname);
pw.println();
}

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pw != null){
pw.close();
}
}

}
}

追问

你这种也可以但是没有对id进行判断,我的数据是这样子的,同一uid有很多,所以要判断。

追答

这个要判断也不难 不想扩展了。

相似回答