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
有时我可能需要一些
null
值从CSV文件插入到数据库中,如下所示:http://asdf.com(tab space)(tab space)aasddf(tab space)(tab space)asdfsad
但这是行不通的,没有任何内容插入数据库。
为了在表的第二和第四(
null
&srccnt
)列中插入verticle
值,必须对上述程序进行哪些修改? 最佳答案
StringTokenizer将连续的定界符视为单个定界符。您说输入包含[制表符空格]作为定界符,但是您的其余代码似乎没有期望空格,因此,如果没有更多信息,我将猜测输入仅由制表符分隔(而不是[制表符]空格]),并忽略相邻的定界符,然后最后一个nextToken()
会引发一个您正在忽略的异常。
答案是按照Javadoc中的建议使用split()
重写它
StringTokenizer是一个遗留类,
出于兼容性原因保留
尽管在新版本中不鼓励使用
码。建议任何人
寻求此功能使用
String的split方法或
改为使用java.util.regex软件包。
也就是说,您应该查看其中的任何现有CSV库(Google for Java CSV)。
关于java - 从CSV文件读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4191201/