“线程中的异常”;“主要”;转换为MYSQL时java中的java.lang.NullPointerException

“线程中的异常”;“主要”;转换为MYSQL时java中的java.lang.NullPointerException,java,mysql,exception-handling,nullpointerexception,Java,Mysql,Exception Handling,Nullpointerexception,我是一名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 cla

我是一名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;
     }
}
公共类测试{
public static List=new ArrayList();
公共静态void main(字符串[]args)抛出FileNotFoundException、InterruptedException和SQLException{
JSONParser j=newJSONParser(新文件(“文件”));
ArrayList tweets=j.getTweets();
String sql=“插入TwitterDataset(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_Favority_count、tweet_lang)值(?,,,,,,,,,,,,,,,?,,?,,,,?)”;
连接conn=getConnection();
PreparedStatement ps=conn.prepareStatement(sql);
最终int batchSize=1000;
整数计数=0;
用于(Tweet-Tweet:tweets){
if(tweet.getLang().equals(“en”)){
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();
如果(++计数%batchSize==0){
ps.executeBatch();
}
}
}
ps.executeBatch();
ps.close();
康涅狄格州关闭();
System.out.println(“文件已成功写入数据库”);
}
私有静态连接getConnection(){
连接con=null;
String url=“jdbc:mysql://localhost:3306/";
字符串db=“dbo”;
String driver=“com.mysql.jdbc.driver”;
字符串user=“root”;
字符串pass=“elvira03”;
试一试{
Class.forName(驱动程序);
con=DriverManager.getConnection(url+db、用户、通行证);
}catch(classnotfounde异常){
e、 printStackTrace();
}捕获(SQLE异常){
e、 printStackTrace();
}
返回con;
}
}
试试看


我认为在一些tweet中,如果用户没有设置,那么语言可能是空的。

我在使用流式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()));
第42行是:if(tweet.getLang().equals(“en”)){
    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()));