我是Java的初学者,我正在编写一个代码来将json twitter数据集输入到MYSQL数据库中。我使用文件名“file”作为输入,解析它,并将其写入SQL数据库。但是,我一直收到错误:
线程“main”java.lang.NullPointerException中的异常 在edu.mbhs.twitter.test.main(test.java:42)
第42行包含:
if (tweet.getLang().equals("en")){
这是我的主要类代码:
public class test {
public static List <String> list = new ArrayList<String>();
public static void main(String[] args) throws FileNotFoundException, InterruptedException, SQLException {
JSONParser j = new JSONParser(new File("file"));
ArrayList<Tweet> tweets = j.getTweets();
String sql = "insert into twitterdatasets (tweet_created_at, tweet_id, tweet_text, user_id, user_screen_name, user_location, user_followers_count, user_friends_count, user_created_at, user_verified, user_lang, tweet_retweeted_count, tweet_favorite_count, tweet_lang) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
final int batchSize = 1000;
int count = 0;
for (Tweet tweet: tweets){
if (tweet.getLang().equals("en")){
User user = tweet.getUser();
ps.setString(1, tweet.getCreatedAt());
ps.setString(2, tweet.getIdStr());
ps.setString(3, tweet.getText());
ps.setString(4, user.getIdStr());
ps.setString(5, user.getScreenName());
ps.setString(6, user.getLocation());
ps.setInt(7, user.getFollowersCount());
ps.setInt(8, user.getFriendsCount());
ps.setString(9, user.getCreatedAt());
ps.setBoolean(10, user.getVerified());
ps.setString(11, user.getLang());
ps.setInt(12, tweet.getRetweetCount());
ps.setInt(13, tweet.getFavoriteCount());
ps.setString(14, tweet.getLang());
ps.addBatch();
if (++count % batchSize == 0){
ps.executeBatch();
}
}
}
ps.executeBatch();
ps.close();
conn.close();
System.out.println("File has been successfully written to database");
}
private static Connection getConnection() {
Connection con = null;
String url = "jdbc:mysql://localhost:3306/";
String db = "dbo";
String driver = "com.mysql.jdbc.Driver";
String user = "root";
String pass = "elvira03";
try {
Class.forName(driver);
con = DriverManager.getConnection(url + db, user, pass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}
答案 0 :(得分:0)
尝试
if(tweet.getLang()!= null && tweet.getLang().equals("en") { ... }
我认为在某些推文中,如果用户没有设置它,语言可以是null
。
答案 1 :(得分:0)
我在使用Streaming API时遇到了同样的问题...如果你的应用程序处理的邮件太慢,你就会断开连接。解决方案是在消息处理过程中放弃检查lang。
相反,您可以在OAuth参数中启用语言过滤器...我正在使用scribe,这就是我的解决方案:
OAuthService service = new ServiceBuilder().provider(TwitterApi.class).apiKey("your_twitter_api_key")
.apiSecret("your_twitter_api_secret").build();
// Set your access token
Token accessToken = new Token("your_twitter_token", "your_twitter_secret");
// Let's generate the request
System.out.println("Connecting to Twitter Public Stream");
OAuthRequest request = new OAuthRequest(Verb.POST, STREAM_URI);
request.addHeader("version", "HTTP/1.1");
request.addHeader("host", "stream.twitter.com");
request.setConnectionKeepAlive(true);
request.addHeader("user-agent", "Twitter Stream Reader");
// ADD YOUR LANGUAGE PREFS HERE...
request.addBodyParameter("language", "en");
service.signRequest(accessToken, request);
Response response = request.send();
// Create a reader to read Twitter's stream
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getStream()));