Java 在Android Studio中从CSV文件生成SQL lite数据库

Java 在Android Studio中从CSV文件生成SQL lite数据库,java,android,sql,sqlite,Java,Android,Sql,Sqlite,我得到了一个CSV文件,基本上是一个带有代码的城市列表。 在我的应用程序中,用户在写他们的出生城市时,会出现一个城市列表,当选择该城市的代码用于其他内容时,会给出建议。 我可以将.csv文件移动到Android Studio文件夹中,并将其用作使用sql lite创建的数据库吗? 如果没有,我应该在AndroidStudio中创建SQLLite数据库(一个带有SqlOpenHelper和一些查询的DatabaseManager类,如果我得到了它),然后复制.csv吗?我怎么能“复制”它呢 编辑:

我得到了一个CSV文件,基本上是一个带有代码的城市列表。 在我的应用程序中,用户在写他们的出生城市时,会出现一个城市列表,当选择该城市的代码用于其他内容时,会给出建议。 我可以将.csv文件移动到Android Studio文件夹中,并将其用作使用sql lite创建的数据库吗? 如果没有,我应该在AndroidStudio中创建SQLLite数据库(一个带有SqlOpenHelper和一些查询的DatabaseManager类,如果我得到了它),然后复制.csv吗?我怎么能“复制”它呢


编辑:很抱歉,但我意识到我的CSV文件有太多的列,手动添加这些列会很难看和累人。所以我使用了SQLite的DB浏览器,现在我得到了一个.DB文件。我可以把它放在一个特定的数据库文件夹中,然后在我的应用程序中查询它吗?

尝试将.csv信息添加到数据库中

FileReader file = new FileReader(fileName);
BufferedReader buffer = new BufferedReader(file);
String line = "";
String tableName = "TABLE_NAME";
String columns = "_id, name, dt1, dt2, dt3";
String str1 = "INSERT INTO " + tableName + " (" + columns + ") values(";
String str2 = ");";
db.beginTransaction();
while ((line = buffer.readLine()) != null) {
  StringBuilder sb = new StringBuilder(str1);
  String[] str = line.split(",");
  sb.append("'" + str[0] + "',");
  sb.append(str[1] + "',");
  sb.append(str[2] + "',");
  sb.append(str[3] + "'");
  sb.append(str[4] + "'");
  sb.append(str2);
  db.execSQL(sb.toString());
}
db.setTransactionSuccessful();
db.endTransaction();
我可以将.csv文件移动到Android Studio文件夹中并使用 它是用SQLLite创建的数据库吗

不 sqlite数据库(即文件)必须格式化,以便sqlite例程可以访问其中包含的数据。e、 g.文件的前16个字节必须是SQLite格式3\000,依此类推,如所示

如果没有,我应该在androidstudio中创建sqllite数据库吗 带有SqlOpenHelper的DatabaseManager类和一些查询(如果有) 它),然后复制.csv

您有多种选择,例如:-

  • 您可以将csv文件复制到适当的位置,使其成为包的一部分(例如,资产文件夹),然后使用例程在适当的表中生成适当的行。这需要在应用程序中创建数据库

  • 你可以简单地在应用程序中硬编码插入内容。这同样需要在应用程序中创建数据库

  • 您可以使用SQLite工具创建预填充的数据库,将其复制到assets文件夹(如果使用SQLite AssetThelper,则为assets/databases),然后从assets文件夹复制数据库。在这种情况下,不需要csv文件

  • 备选方案1的例子 作为接近选项1的示例(尽管数据未存储在数据库中),以下代码从assets文件夹的csv文件中提取数据

    此选项在这种情况下使用,因为文件每年都会更改,因此更改文件然后分发应用程序将应用更改

    该文件看起来像:-

    它以annual_changes.txt的形式存储在应用程序的资产文件夹中。以下代码用于获取值(可轻松添加到表中):-

    private void BuildFormulaValues(){
    mFormulaValues=新的ArrayList();
    mYears=新的ArrayList();
    StringBuilder错误=新建StringBuilder();
    试一试{
    InputStream is=getAssets().open(公式值文件);
    BufferedReader bf=新的BufferedReader(新的InputStreamReader(is));
    弦线;
    而((line=bf.readLine())!=null){
    if(line.substring(0,0).equals(“#”){
    继续;
    }
    字符串[]值=行。拆分(“,”);
    如果(values.length==5){
    试一试{
    mFormulaValues.add(
    新公式价值(
    这
    Long.parseLong(值[0]),
    Long.parseLong(值[1]),
    Long.parseLong(值[2]),
    Long.parseLong(值[3]),
    Long.parseLong(值[4])
    )
    );
    }捕获(数字格式){
    if(errors.length()>0){
    错误。追加(“\n”);
    }
    errors.append(
    这是.getResources().getString(
    R.string.无效\u公式\u值\u非数值)
    );
    继续;
    }
    添加(值[0]);
    }否则{
    if(errors.length()>0){
    错误。追加(“\n”);
    errors.append(
    getResources().getString(
    R.string.无效(公式值行)
    );
    }
    }
    }
    }捕获(ioe异常ioe){
    ioe.printStackTrace();
    }
    if(errors.length()>0){
    String emsg=“注意:由于以下问题,计算可能不准确:-\n\n”+
    错误。toString();
    Toast.makeText(
    这
    emsg,
    吐司长度
    ).show();
    }
    }
    
    这是否回答了您的问题?
    # This file contains annual figures
    # 5 figures are required for each year and are comma seperated
    # 1) The year to which the figures are relevant
    # 2) The annualised MTAWE (Male Total Average Weekly Earnings)
    # 3) The annual Parenting Payment Single (used to determine fixed assessment)
    # 4) The fixed assessment annual rate
    # 5) The Child Support Minimum Annual Rate
    # Lines starting with # are comments and are ignored
    2006,50648,13040,1040,320
    2007,52073,13315,1102,330
    2008,54756,13980,1122,339
    2009,56425,13980,1178,356
    2010,58854,14615,1193,360
    2011,61781,15909,1226,370
    2012,64865,16679,1269,383
    2013,67137,17256,1294,391
    2014,70569,18197,1322,399
    2015,70829,18728,1352,408
    2016,71256,19011,1373,414
    2017,72462,19201,1390,420
    2018,73606,19568,1416,427
    
    private void BuildFormulaValues() {
        mFormulaValues = new ArrayList<>();
        mYears = new ArrayList<>();
        StringBuilder errors = new StringBuilder();
        try {
            InputStream is = getAssets().open(formula_values_file);
            BufferedReader bf = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = bf.readLine()) != null ) {
                if (line.substring(0,0).equals("#")) {
                    continue;
                }
                String[] values = line.split(",");
                if (values.length == 5) {
                    try {
                        mFormulaValues.add(
                                new FormulaValues(
                                        this,
                                        Long.parseLong(values[0]),
                                        Long.parseLong(values[1]),
                                        Long.parseLong(values[2]),
                                        Long.parseLong(values[3]),
                                        Long.parseLong(values[4])
                                )
                        );
                    } catch (NumberFormatException e) {
                        if (errors.length() > 0) {
                            errors.append("\n");
                        }
                        errors.append(
                                this.getResources().getString(
                                        R.string.invalid_formula_value_notnumeric)
                        );
                        continue;
                    }
                    mYears.add(values[0]);
                } else {
                    if (errors.length() > 0) {
                        errors.append("\n");
                        errors.append(
                                getResources().getString(
                                        R.string.invalid_formula_value_line)
                        );
                    }
                }
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        if (errors.length() > 0) {
            String emsg = "Note CS CareCalculations may be inaccurate due to the following issues:-\n\n" +
                    errors.toString();
            Toast.makeText(
                    this,
                    emsg,
                    Toast.LENGTH_SHORT
            ).show();
        }
    }