无法在Sqlite数据库android中插入数据

发布于 2024-12-28 00:04:01 字数 4286 浏览 0 评论 0原文

以下代码用于向数据库中插入数据。

当应用程序启动时,将执行以下代码。

执行 RecentDBManager 后,当我从模拟器内存​​中 PULL 数据库时,它在 FavoriteScrip 表中显示没有记录。

当我在 setData 方法中记录 InsertStmt 时,它工作正常。 它显示

插入到FavoriteScrip(sym,cmp,chg)值('value1','value2','value3')

但它没有插入到表中...

在主类

 rdbM = new RecentDBManager(CompanyView.this);
                        try {
                            if (!rdbM.checkDataBase()) {
                                rdbM.createDataBase();
                            }
                            rdbM.openDB();
                            rdbM.setData("value1");
                            rdbM.closeDB();

                        } catch (Exception e) {
                            throw new Error("ERROR in DB Access"+ e.toString());
                    }

RecentDBManager 类

    public class RecentDBManager {
    private DatabaseHelper dataHelper;
    private SQLiteDatabase mDb;
    private Context ctx;
    private String DATABASE_PATH = "/data/data/com.mypackage/databases/";
    private static String DATABASE_NAME = "ScripMasterDB";
    private static String TABLE_NAME = "FavoriteScrip";
        private String InsertStmt;
    private static final int DATABASE_VERSION = 1;
    private Cursor cur;

    RecentDBManager(Context ctx) {
        this.ctx = ctx;
        dataHelper = new DatabaseHelper(ctx);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {
        Context myContext = null;

        public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            this.myContext = context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w("DBHelper", "Upgrading database from version " + oldVersion
                    + " to " + newVersion + ", which will destroy all old data");
            onCreate(db);
        }
    }

    public boolean checkDataBase() {
        String myPath = DATABASE_PATH + DATABASE_NAME;
        File f = new File(myPath);
        return f.exists();
    }

    public void createDataBase() {
        openDB();
        try {
            OutputStream myOutput = new FileOutputStream(DATABASE_PATH+ DATABASE_NAME);

            if (mDb.isOpen())
                mDb.close();
            myOutput.flush();
            myOutput.close();

        } catch (Exception e) {
            throw new Error("RecentDbManager Exception - " + e.getMessage());
        }
    }

    public RecentDBManager openDB() throws SQLException {
        mDb = dataHelper.getWritableDatabase();
        return this;
    }

    public void setData(String value1, String value2, String value3) {
                ContentValues cv = new ContentValues();
cv.put("sym", value1);
cv.put("dt_tm", "datetime()");
mDb.insert(TABLE_NAME, null, cv);

        } catch (SQLiteException e) {
            throw new Error("RecentDbManager Exception in inserting data"
                    + e.getMessage());
        }
    }

    public void closeDB() {
        try {
            mDb.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

编辑

我有一列包含当前日期时间。

因此查询的形式为 "insert into " + TABLE_NAME+ " (sym,dt_tm) values ('" + value1 + "',datetime())"

我尝试了

    ContentValues cv = new ContentValues();
cv.put("sym", value1);
cv.put("dt_tm", "datetime()");
mDb.insert(TABLE_NAME, null, cv);

value1< /code> 列已插入表中,但未插入日期时间。可能是什么问题?

最终编辑

完成...我使用了以下内容:

                Calendar date1 = Calendar.getInstance();
                    SimpleDateFormat dateformatter = new SimpleDateFormat(
                            "dd/MM/yyyy HH:mm:ss");

                    String currentdate = dateformatter.format(date1
                            .getTime());

并将 currentdate 作为第二个参数传递。

谢谢大家!!!!

任何帮助都将挽救生命!!!

Following code is used to insert data in the database.

When application is launched, following code is executed.

After RecentDBManager is executed, when I PULL database from emulator memory, it shows no record in FavoriteScrip table.

When I logged InsertStmt in setData method, it works fine.
It shows

insert into FavoriteScrip(sym,cmp,chg) values ('value1','value2','value3')

but it is not getting inserted in table...

In main class

 rdbM = new RecentDBManager(CompanyView.this);
                        try {
                            if (!rdbM.checkDataBase()) {
                                rdbM.createDataBase();
                            }
                            rdbM.openDB();
                            rdbM.setData("value1");
                            rdbM.closeDB();

                        } catch (Exception e) {
                            throw new Error("ERROR in DB Access"+ e.toString());
                    }

RecentDBManager class

    public class RecentDBManager {
    private DatabaseHelper dataHelper;
    private SQLiteDatabase mDb;
    private Context ctx;
    private String DATABASE_PATH = "/data/data/com.mypackage/databases/";
    private static String DATABASE_NAME = "ScripMasterDB";
    private static String TABLE_NAME = "FavoriteScrip";
        private String InsertStmt;
    private static final int DATABASE_VERSION = 1;
    private Cursor cur;

    RecentDBManager(Context ctx) {
        this.ctx = ctx;
        dataHelper = new DatabaseHelper(ctx);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {
        Context myContext = null;

        public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            this.myContext = context;
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w("DBHelper", "Upgrading database from version " + oldVersion
                    + " to " + newVersion + ", which will destroy all old data");
            onCreate(db);
        }
    }

    public boolean checkDataBase() {
        String myPath = DATABASE_PATH + DATABASE_NAME;
        File f = new File(myPath);
        return f.exists();
    }

    public void createDataBase() {
        openDB();
        try {
            OutputStream myOutput = new FileOutputStream(DATABASE_PATH+ DATABASE_NAME);

            if (mDb.isOpen())
                mDb.close();
            myOutput.flush();
            myOutput.close();

        } catch (Exception e) {
            throw new Error("RecentDbManager Exception - " + e.getMessage());
        }
    }

    public RecentDBManager openDB() throws SQLException {
        mDb = dataHelper.getWritableDatabase();
        return this;
    }

    public void setData(String value1, String value2, String value3) {
                ContentValues cv = new ContentValues();
cv.put("sym", value1);
cv.put("dt_tm", "datetime()");
mDb.insert(TABLE_NAME, null, cv);

        } catch (SQLiteException e) {
            throw new Error("RecentDbManager Exception in inserting data"
                    + e.getMessage());
        }
    }

    public void closeDB() {
        try {
            mDb.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

EDIT

I have one column which contains current datetime.

So query is of the form "insert into " + TABLE_NAME+ " (sym,dt_tm) values ('" + value1 + "',datetime())"

I tried

    ContentValues cv = new ContentValues();
cv.put("sym", value1);
cv.put("dt_tm", "datetime()");
mDb.insert(TABLE_NAME, null, cv);

value1 column is getting inserted into table but not datetime. What can be the problem?

Final edit

DONE... I used following :

                Calendar date1 = Calendar.getInstance();
                    SimpleDateFormat dateformatter = new SimpleDateFormat(
                            "dd/MM/yyyy HH:mm:ss");

                    String currentdate = dateformatter.format(date1
                            .getTime());

and passed currentdate as second parameter.

THNX ALL !!!!

ANY HELP WILL BE LIFE-SAVER !!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北渚 2025-01-04 00:04:01

尝试

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(Create table Memo (ID INTEGER PRIMARY KEY AUTOINCREMENT, sym TEXT, cmp TEXT, cng TEXT);
}

public void setData(String value1, String value2, String value3) {

            ContentValues cv = new ContentValues();
            cv.put("sym", value1);
            cv.put("cmp", value2);
            cv.put("cng", value3);

            mDb.insert(TABLE_NAME, null, cv);
    }        

try

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(Create table Memo (ID INTEGER PRIMARY KEY AUTOINCREMENT, sym TEXT, cmp TEXT, cng TEXT);
}

.

public void setData(String value1, String value2, String value3) {

            ContentValues cv = new ContentValues();
            cv.put("sym", value1);
            cv.put("cmp", value2);
            cv.put("cng", value3);

            mDb.insert(TABLE_NAME, null, cv);
    }        
羁客 2025-01-04 00:04:01

尝试在插入语句的表名后面留一个空格:

insert into FavoriteScrip (sym,cmp,chg) values ('value1','value2','value3')

InsertStmt="insert into " + TABLE_NAME + " (sym,cmp,chg) values ('" + value1 + "','" + value2                    + "','" + value3 + "')";

Try leaving a blank space after tablename of your insert statement:

insert into FavoriteScrip (sym,cmp,chg) values ('value1','value2','value3')

InsertStmt="insert into " + TABLE_NAME + " (sym,cmp,chg) values ('" + value1 + "','" + value2                    + "','" + value3 + "')";
掩耳倾听 2025-01-04 00:04:01

尝试使用 插入而不是原始查询

try using insert instead of raw query

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文