草庐IT

java - JDBC - 从文本文件加载数据

coder 2023-10-22 原文

我正在尝试通过 Java 从文本文件将数据加载到我的 MySQL 数据库。到目前为止,我有以下代码。当我运行它时,它成功地从文件中读取数据并将其打印出来,但随后出现此错误并且没有数据添加到数据库中:

Exception in thread "main" java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:143)
at jdbc.Jdbc.main(Jdbc.java:81)

package jdbc;

import java.sql.*; 
import java.io.*;
import java.util.*; 
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;

public class Jdbc { 
public static void main (String args []) 
  throws SQLException, IOException { 

  // the following statement loads the MySQL jdbc driver
  // make sure it is in the CLASSPATH

try {
  Class.forName ("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
    System.out.println ("Could not load the driver"); 
  }

String user, password, host;

Scanner sc = new Scanner(System.in);
System.out.println("Type userid, password, hostname or ipaddress: ");
user = sc.next();
password = sc.next();
host = sc.next();
System.out.println(user+" "+password+" "+host);

//  userid, password and hostname are obtained from the console

Connection conn = DriverManager.getConnection
              ("jdbc:mysql://localhost/PoemsAss", user, password);

/* JDBC default is to commit each SQL statement as it is sent to the database.  Setting autocommmit=false changes the default
   behaviour so that transactions have to be committed explicity.
 */
conn.setAutoCommit(false);

// Creating a statement lets us issue commands against the connection.

Statement s = conn.createStatement();



//Create Tables
s.executeUpdate("create table IF NOT EXISTS Poet(Poet CHAR(20)  PRIMARY KEY,     DOB DATE, PlaceOfBirth CHAR(20), Nationally CHAR(20),  Language CHAR(15))");
System.out.println("Table created");
s.executeUpdate("create table IF NOT EXISTS Translator(Translator_Name CHAR(30)  PRIMARY KEY,  Poem_Title VARCHAR(50), Translation_Date DATE)");
System.out.println("Table created");
s.executeUpdate("create table IF NOT EXISTS Poem(Poem_Title VARCHAR(50)  PRIMARY KEY,  Date_Published DATE, Language CHAR(20), Num_Words SMALLINT, Translator_Name CHAR(30))");
System.out.println("Table created");
s.executeUpdate("create table IF NOT EXISTS Recording(RecordingID VARCHAR(4)  PRIMARY KEY, Date DATE, Place CHAR(20), Duration TINYINT, Format VARCHAR(10), Poem_Title VARCHAR(50))" );
System.out.println("Table created");


String data_file = "src/jdbc/poet_data.txt";
File inputFile = new File(data_file);
FileReader inf = new FileReader(inputFile);
BufferedReader inb = new BufferedReader(inf);
System.out.println("Ready to read line");
String line = inb.readLine(); // read a line



String psq2 = "insert into Poet values (?,?,?,?,?)";
PreparedStatement ps2=conn.prepareStatement(psq2);


java.sql.Date when;

while ((line != null)) {
String[] tokens = line.split(","); // split line into ‘,’
System.out.println(tokens[0] + " " + tokens[1] +
" " + tokens[2] + " " + tokens[3] + " " +
tokens[4] + " ");
//Should trim leading/trailing spaces from tokens.
ps2.setString(1, tokens[0]);
when = java.sql.Date.valueOf(tokens[1]);
ps2.setDate(2, when);
ps2.setString(3, tokens[2]);
ps2.setString(4, tokens[3]);
//convert yyyy-mm-dd string to date
ps2.setString(5, tokens[4]);
ps2.execute();
ps2.clearParameters();
line = inb.readLine(); //read next line
}


conn.commit();


 conn.close();
  }
}

最佳答案

很明显你的问题出在tokens[1]字符串的格式上。

您正在尝试从不匹配可接受格式 yyyy-mm-dd 的字符串创建 java.sql.Date 对象

例如,如果您的 String 是这样的:21/12/2002 将抛出一个运行时异常,就像您已经拥有的那样。为了使其正常工作,您必须解析您的字符串,以使其对java.sql.Date.valueOf 方法可读。

例子:

SimpleDateFormat textFormat = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date myDate = textFormat.parse(tokens[1]);
when = new java.sql.Date(myDate.getTime());

作为旁注,parse() 方法抛出 ParseException,因此请确保将代码包含在相关的 try/catch block 或使您的方法 throw 此异常。

希望对你有帮助

关于java - JDBC - 从文本文件加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881404/

有关java - JDBC - 从文本文件加载数据的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  5. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  6. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

随机推荐