android中没有创建数据库

2023-12-13

在我的应用程序中,活动运行良好,但未创建数据库,logcat 中也没有错误。 主要活动类别:

package com.example.testdb;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Database d=new Database(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

数据库类:

package com.example.testdb;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;

public class Database extends SQLiteOpenHelper{

    String Tablename = "Table1";
    private String Column1 = "RegionID";
    private String Column2 = "RegionName";
    private String Column3 = "Currency";
    SQLiteDatabase db;

    public Database(Context context) {
        super(context, "Test", null, 2);
        this.getWritableDatabase();
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        try {
            final String r_Table = "CREATE TABLE " + Tablename + " (" + Column1+ " INTEGER PRIMARY KEY , " + Column2 + " TEXT, " + Column3 + " Text) ";
            db.execSQL(r_Table);
            ContentValues cv = new ContentValues();
            cv.put(Column1, 1);
            cv.put(Column2, "India");
            cv.put(Column3, "Rupee");
            db.insert(r_Table, null, cv);
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }

        Cursor c = db.rawQuery("Select * from Table1", null);

        if (c != null ) {
            if  (c.moveToFirst()) {
                //Toast.makeText(new MainActivity().getApplicationContext(), c.getCount(), Toast.LENGTH_LONG).show();
                System.out.println("Rows are:"+c.getCount());
            }
        }
        c.close();  
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
    }
}

Logcat:

05-18 12:45:22.042: I/ActivityThread(3270): Switching default density from 160 to 130
05-18 12:47:18.162: I/ActivityThread(3415): Switching default density from 160 to 130

我正在使用 Virtual box 作为模拟器,在 DDMS 中我什至看不到创建的数据库。

任何人都可以帮助我吗?

提前致谢 湿婆


根据文件SqliteOpenHelper使用创建数据库的惰性模型。这意味着,在没有数据库的情况下, onCreate 不会在构造函数中调用,而是在实际需要数据库时调用,即第一次致电时获取可读数据库 or 获取可写数据库。 所以,你的情况是正常的。

将 SqliteOpenHelper 视为提供者联系到数据库,包含用于处理“如果数据库不存在”和“如果数据库已过时”等情况的附加逻辑。 因此,就您而言,不必担心数据库文件的实际创建时间。

您的 Activity 中的数据库使用情况(如果是唯一的,则使用 db)可能类似于:

private SqliteOpenHelper connection;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.OnCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    connection = new Database(this); //no actual db creation here
    //if you want to test db table creation without any further work uncomment following line
    //SQLiteDatabase db = connection.getReadableDatabase();
}

public void onBtnAddRecordClick(View view) {
    SqliteDatabase db = connection.getWritableDatabase(); //if something not right with
                                                  //the db this will be corrected here
    ContentValues values;
    //... fill in the record to insert
    db.insert(MY_TABLE_NAME, null, values);
}

重要的提示:如果要从多个活动访问数据库,请考虑使数据库扩展 SqliteDatabaseHelper 为单例或将其包装到 ContentProvider 中,因为通常不赞成在没有明确目的的情况下使用多个数据库连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android中没有创建数据库 的相关文章

随机推荐

  • ElasticSearch (2.2) startDate 和 endDate 之间的 Java 过滤器(如果存在)

    我想要使 用elasticsearch java客户端 进行以下过滤 如果 startDate 存在且低于现在 如果 endDate 存在且大于现在 我已经有以下内容 但它没有显示没有开始日期或结束日期的一次 Start date end
  • jQuery 中 $.getJSON() 和 $.ajax() 之间的区别

    我正在调用 ASP NET MVC 操作 public JsonResult GetPatient string patientID 使用 jQuery 从 JavaScript 生成 以下调用有效 getJSON Services Get
  • jquery - 从回调函数(在发布请求中)返回值到其内部的函数中?

    我有一个 javascript 函数 它将数据发送到验证脚本并从那里获取值 post 请求上的回调函数返回一个布尔值 我试图获取entire函数返回该布尔值 现在 回调函数返回正确的值 但函数本身不返回任何内容 这是代码 function
  • 某个时间点的事件队列量

    我有一个事件队列 由记录数字字符串 打开时间 日期时间和关闭时间 日期时间组成 这些记录可以追溯到一年左右 我想要得到的是一个折线图 显示每天晚上 8 点的队列量 因此 如果票证在当天晚上 8 点之前或前一天的任何时间打开 但截至 8 点尚
  • HTML5 画布上的图像渐变

    我想在图像上获得径向渐变效果 alpha 1中间透明 边缘透明 您对我如何做到这一点有什么想法吗 如果我没记错的话你想做的是 绘制图像 在其上绘制径向渐变 其中边界是透明的 中间是不透明的 并使用globalCompositeOperati
  • SQL:OPENROWSET,无法构建请求字符串?

    我想构造与 OPENROWSET 方法一起使用的查询 Example SELECT FROM OPENROWSET SQLOLEDB srv login mdp SELECT FROM Case WHERE ID caseID 但是当我这样
  • 无法重新分配自动全局变量 _POST

    我收到以下错误 Fatal error Cannot re assign auto global variable POST in C Program Files x86 Zend Apache2 htdocs includes class
  • 我们如何在 iPhone Xcode 中处理多个 NSURLConnection?

    我正在开发一个小应用程序 其中有多个 NSURLConnection 我已经创建了该 NSURL 连接 但我不知道如何处理它 我的代码如下所示 void loadTrafficAndEvent int a 10 Get the map vi
  • 错误:Android 上的自签名 SSL 证书名称不匹配

    我正在尝试使用内置浏览器从 Android 2 3 4 访问受 SSL 保护的 Web 应用程序 服务器证书是我使用创建的自签名证书MAKECERT并安装在服务器上 当我尝试访问该页面时 我从浏览器收到一条错误消息 指出The name o
  • 如何在Unity中通过脚本创建动画剪辑?

    我想创建一个AnimationClip在脚本中针对GameObject在统一中 但是 我不知道该怎么做 我已将以下代码附加到GameObject在 Cube 中并按下播放按钮 但是 我得到了错误输出 using UnityEngine us
  • 如何在 Hibernate 中将多个值类型集合映射到一张表?

    出于性能原因 我试图将休眠中的许多值类型集映射到一张表 首先 我确实将它们全部放在自己的表中 这导致了太多的连接 我有一个类别类 其中包含许多带有一组集合的组件 然后我使用实体名称和鉴别器通过子类将它们映射到单个表 请参阅下面的映射片段 这
  • django - 加载静态文件的服务器错误

    所以我正在构建我自己的 django 网站 现在我一直在加载静态数据 我在控制台中收到以下错误 GET http localhost 8000 static css style css 500 Internal Server Error 我
  • Google Material图表柱形图(条形图)自定义列颜色不起作用

    我想画一个简单的柱形图 in HTML JavaScript using google chart 我用过Google materiel chart CDN绘制柱形图有 4 行 4 种不同颜色 我尝试了很多选择 但没有一个能正常工作 当我使
  • 将 .NET Maui Preview 14 发布到 App Store 和 Google Play

    是否可以将 NET Maui 应用程序发布到 Apple AppStore 和 Google Play 还是我们需要等到 NET Maui 最终确定 正如评论中已经指出的那样 您绝对可以 但由于明显的原因并未正式推荐 不过 我确实知道现在商
  • 使用itext在pdf页脚中创建包含2行的表格

    您好 我想添加 2 行页脚 第一行将包含带有背景颜色的文档名称 第二行将有版权说明 我尝试使用 ColumnText 创建 但我无法设置行的背景颜色 只有文本获取背景颜色 有什么办法可以实现这一点吗 我花了一整晚的时间来寻找解决方案 但没有
  • 如何求逆排列?

    假设我有一个未知向量v 以及一个排列p 我该如何重建v from v p and p 一个等效的问题是找到一个排列q这样p q 1 2 n 由于这将在紧密循环中运行 因此我需要将答案矢量化 并且高效 为了找到逆排列 我通常使用 q sort
  • 在Android中使用静态方法?

    我已经在 Android 中制作了一些应用程序 并注意到我经常使用静态方法 例如我有一个类扩展PreferenceFragment 在此 PreferenceFragment 中我设置了一个onClick事件在Button Button b
  • INSERT,并获取自增值

    考虑下表 create table language id integer generated always as identity START WITH 1 INCREMENT BY 1 name long varchar constra
  • 在 PHP 中迭代嵌套数组

    我在此链接上有一个嵌套数组阵列样本 我正在使用下面的代码来解析它 但第二次和深度之外它什么也没有返回 但是尝试使用递归函数 printAllValues ArrXML function printAllValues arr keys arr
  • android中没有创建数据库

    在我的应用程序中 活动运行良好 但未创建数据库 logcat 中也没有错误 主要活动类别 package com example testdb import android os Bundle import android app Acti