try {
BufferedReader br = new BufferedReader(new InputStreamReader(item.getInputStream()));
String strLine = "";
StringTokenizer st = null;
while ((strLine = br.readLine()) != null) {
st = new StringTokenizer(strLine, "\t");
while (st.hasMoreTokens()) {
urlcnt = st.nextToken();
srccnt = st.nextToken();
contentType = st.nextToken();
verticle = st.nextToken();
timeFrame = st.nextToken();
}
if (con == null) {
SQLConnection.setURL("jdbc:sqlserver://192.168.2.53\\SQL2005;user=sa;password=365media;DatabaseName=LN_ADWEEK");
con = SQLConnection.getNewConnection();
stmt = con.createStatement();
}
try {
ResultSet rs;
boolean hasRows = false;
rs = stmt.executeQuery("select url from urls_temp where url='"+urlcnt+"'");
while (rs.next()) {
hasRows=true;
i++;
}
if (!hasRows) {
j++;
PreparedStatement insertUrlStatement = con.prepareStatement("INSERT INTO urls_temp(url, source_name, is_active, is_periodic, Link_Type, New_Entry, verticle, periodic_timeframe) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
if (timeFrame.equalsIgnoreCase("Daily")) {
insertUrlStatement.setString(1, urlcnt);
insertUrlStatement.setString(2, srccnt);
insertUrlStatement.setInt(3, 1);
insertUrlStatement.setInt(4, 0);
insertUrlStatement.setString(5, contentType);
insertUrlStatement.setInt(6, 1);
insertUrlStatement.setString(7, verticle);
insertUrlStatement.setString(8, timeFrame);
insertUrlStatement.executeUpdate();
insertUrlStatement.close();
} else {
insertUrlStatement.setString(1, urlcnt);
insertUrlStatement.setString(2, srccnt);
insertUrlStatement.setInt(3, 1);
insertUrlStatement.setInt(4, 1);
insertUrlStatement.setString(5, contentType);
insertUrlStatement.setInt(6, 1);
insertUrlStatement.setString(7, verticle);
insertUrlStatement.setString(8, timeFrame);
insertUrlStatement.executeUpdate();
}
}
}
}
}
以上代码用于将详细信息上传到数据库,这些数据库以CSV文件分隔。
CSV文件的样本格式如下,这样可以正常工作:
http://avb.com(tab space)asdf(tab space)asdf(tab space)asdd(tab space)asdf
http://anything.com(tab space)asdf(tab space)asdf(tab space)asdfasd(tab space)asdfsadf
有时我可能需要从CSV文件中将一些null
值插入数据库,如下所示:
http://asdf.com(tab space)(tab space)aasddf(tab space)(tab space)asdfsad
但这不起作用,没有任何东西插入数据库。
对于在表格的第二个和第四个(null
& srccnt
)列中插入verticle
值的上述程序,必须进行哪些修改?
答案 0 :(得分:1)
StringTokenizer将连续分隔符视为单个分隔符。你说输入包含[tab space]作为分隔符,但你的代码的其余部分似乎并不期望空格,所以没有更多信息,我猜测输入只用标签分隔(不是[tab]空格]),并忽略相邻的分隔符,然后最后nextToken()
抛出一个你忽略的异常。
这里的答案是根据Javadoc
中的建议,使用split()
重写此内容
StringTokenizer是一个遗留类 因兼容性原因而保留 虽然在新的情况下不鼓励使用它 码。任何人都可以推荐 寻求此功能使用 分裂方法的String或 而是java.util.regex包。
也就是说,您应该查看任何现有的CSV库(Google for Java CSV)。
答案 1 :(得分:0)
我建议你调试你的代码,以便更具体地找出它不符合预期的行为,然后,如果有必要,发布一个更具体的问题。
答案 2 :(得分:0)
我使用FileHelpers来解析csv文件。 http://www.filehelpers.com/。它读取一个csv文件,并在对象中给出一个输出,这是我想要的。而且,如果我传递对象列表,它将为我创建一个csv文件。给它一个机会。