2014-02-22 73 views
1

我想在使用JDBC庫的java中創建一個SQLite數據庫。我的代碼很好地創建了數據庫,但是當涉及到在數據庫中創建表時,它實際上並不創建表。我知道這是因爲我正在嘗試打印記錄集並且沒有達到打印語句。我的總體目標是解析XML,然後將其寫入相應的字段以供我的Android應用程序使用。繼承人我的代碼。編寫SQLite數據庫Java的問題

import java.io.File; 

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.DocumentBuilder; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Node; 
import org.w3c.dom.Element; 

import java.sql.*; 

public class TestingXML 
{ 

public static void main(String[] args) 
{ 

    try 
    { 

     Class.forName("org.sqlite.JDBC"); 
     Connection conn = DriverManager.getConnection("jdbc:sqlite:productrecalls.db"); 
     Statement stat = conn.createStatement(); 
     stat.executeUpdate("drop table if exists products;"); 
     stat.executeUpdate("create table products (date, brandname, productdescription, reason, company, link);"); 
     PreparedStatement prep = conn.prepareStatement("insert into products values (?, ?, ?, ?, ?, ?);"); 

     File fXmlFile = new File("/Users/Trevor/Desktop/1.7-RecallsDataSet.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 

     //optional, but recommended 
     //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work 
     doc.getDocumentElement().normalize(); 

     NodeList nList = doc.getElementsByTagName("PRODUCT"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 

      Node nNode = nList.item(temp); 

      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

       Element eElement = (Element) nNode; 

       String day = eElement.getElementsByTagName("DATE").item(0).getTextContent().substring(5, 7); 
       String month = eElement.getElementsByTagName("DATE").item(0).getTextContent().substring(8, 11); 
       String year = eElement.getElementsByTagName("DATE").item(0).getTextContent().substring(12, 17); 

       String date = month + "-" + day + "-" + year; 
       String brandname = eElement.getElementsByTagName("BRAND_NAME").item(0).getTextContent(); 
       String productdescription = eElement.getElementsByTagName("PRODUCT_DESCRIPTION").item(0).getTextContent(); 
       String reason = eElement.getElementsByTagName("REASON").item(0).getTextContent(); 
       String company = eElement.getElementsByTagName("COMPANY").item(0).getTextContent(); 
       String link = eElement.getElementsByTagName("COMPANY_RELEASE_LINK").item(0).getTextContent(); 

       prep.setString(1, date); 
       prep.setString(2, brandname); 
       prep.setString(3, productdescription); 
       prep.setString(4, reason); 
       prep.setString(5, company); 
       prep.setString(6, link); 

       conn.setAutoCommit(false); 
       prep.executeBatch(); 
       conn.setAutoCommit(true); 

      } 
     } 
     ResultSet rs = stat.executeQuery("select * from products;"); 
     while (rs.next()) 
     { 
      System.out.println(" "); 
      System.out.println("date = " + rs.getString("date")); 
      System.out.println("brandname = " + rs.getString("brandname")); 
      System.out.println("productdescription = " + rs.getString("productdescription")); 
      System.out.println("reason = " + rs.getString("reason")); 
      System.out.println("company = " + rs.getString("company")); 
      System.out.println("link = " + rs.getString("link")); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    System.out.println("Done."); 

} 
} 
+1

您可以使用Firefox瀏覽器插件,看看能肯定的表是有或沒有打開源碼文件。你也沒有關閉連接和其他的東西...... –

回答

1

您近距離:)您的「create table」語句的語法需要更多信息。這裏是SQLite文檔頁面: enter link description here

這是我最近在項目中使用的示例語句。它給你一個創建表語句的具體例子:

create table authors (id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, first_name varchar(25) NOT NULL, 
last_name varchar(25) NOT NULL,created_at datetime, updated_at datetime); 

注意!您需要指定列數據類型。我還向您展示瞭如何創建主鍵(其值由數據庫生成)。

希望幫助:)