Java 从CSV文件读取
上述代码用于将详细信息上载到数据库,这些信息在CSV文件中以选项卡分隔 CSV文件的示例格式如下所示,这很好:Java 从CSV文件读取,java,csv,Java,Csv,上述代码用于将详细信息上载到数据库,这些信息在CSV文件中以选项卡分隔 CSV文件的示例格式如下所示,这很好: http://avb.com(制表符空间)asdf(制表符空间)asdf(制表符空间)asdd(制表符空间)asdf http://anything.com(选项卡空间)asdf(选项卡空间)asdf(选项卡空间)asdfasd(选项卡空间)asdfsadf 有时我可能需要将一些null值从CSV文件插入数据库,如下所示: http://asdf.com(选项卡空间)(选项卡空间)aa
http://avb.com(制表符空间)asdf(制表符空间)asdf(制表符空间)asdd(制表符空间)asdf
http://anything.com(选项卡空间)asdf(选项卡空间)asdf(选项卡空间)asdfasd(选项卡空间)asdfsadf
有时我可能需要将一些null
值从CSV文件插入数据库,如下所示:
http://asdf.com(选项卡空间)(选项卡空间)aasddf(选项卡空间)(选项卡空间)asdfsad
但是这不起作用,没有任何东西被插入到数据库中
为了在表的第二列和第四列(
srccnt
&verticle
)中插入null
值,必须对上述程序进行哪些修改?我建议您调试代码,以更具体地找出它在哪里没有按预期运行,然后在必要时,发布更具体的问题。StringTokenizer将连续分隔符视为单个分隔符。您说输入包含[tab space]作为分隔符,但代码的其余部分似乎不需要空格,因此,如果没有更多信息,我猜输入仅用制表符(而不是[tab space])分隔,并且忽略了相邻的分隔符,然后是最后一个nextToken()
引发您忽略的异常
这里的答案是使用split()
,按照
StringTokenizer是一个遗留类
出于兼容性原因保留
尽管在纽约不鼓励使用它
代码。建议任何人
使用
String或
改为java.util.regex包
也就是说,您应该查看任何现有的CSV库(Google for Java CSV)。我使用FileHelpers解析CSV文件。它读取一个csv文件并在object中给我一个输出,这就是我想要的。而且,如果我通过对象列表,它会为我创建一个csv文件。给它一个机会。您的代码不完整。
try
语句的catch()和/或finally
子句在哪里?如果忽略异常,那么这就是开始的地方。。。打印堆栈跟踪。“但这不起作用。没有任何内容插入到数据库中。”。。。告诉我你得到了某种形式的错误。其次,您正在\t上标记,但在“space”(制表符空间)aasddf(制表符空间)(制表符空间)asdfsad“…”的情况下,在\t之后有一个空格。。。这将返回一个“空格”标记,对吗?如果你不想要空格,那么你应该在标记化之前去掉它们。类似strLine.replaceAll(\\w+,“”)的东西应该可以实现这一点。也可以使用split()而不是标记器。
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();
}
}
}
}
}