5

データベースにレコードを挿入しようとしましたが、以前に行ったにもかかわらず、Androidでは機能しません。ORMLiteで複数のテーブルを操作するのはこれが初めてです。

これが私がやろうとしていることです。XMLからモデルにデータを保存する次に、モデルからデータを挿入しようとします。

使用するデータベース:SQLite ORM:ORMLite

ActivityClass

TbDriverInfoBO tbDriverInfoBO = new TbDriverInfoBO();
Document doc = XMLfunctions.XMLfromString(strResult);
NodeList nodes = doc.getElementsByTagName("root");
Element root = (Element) nodes.item(0);
jabongModel.setLoginId(XMLfunctions.getValue(root, "UserId"));
jabongModel.setPassword(XMLfunctions.getValue(root, "UserPwd"));
jabongModel.setDrsno(XMLfunctions.getValue(root, "DRSNo"));
jabongModel.setBrancode(XMLfunctions.getValue(root, "BranchCode"));
jabongModel.setLoginDate(XMLfunctions.getValue(root, "LoginDate"));
//clsDriverInfo obj = new clsDriverInfo(loginId, pswd, drsno,
/*tbDriverInfoBO.setColUserId(jabongModel.getLoginId());
tbDriverInfoBO.setColPwd(jabongModel.getPassword());
tbDriverInfoBO.setColDrs(jabongModel.getDrsno());
tbDriverInfoBO.setColBranch(jabongModel.getBrancode());*/

tbDriverInfoBO.fillBo(jabongModel);

dbHelperTbDriverInfo.addData(tbDriverInfoBO);

BOClass:

public class TbDriverInfoBO {

    @DatabaseField(generatedId = true)
    int id;
    @DatabaseField
    String colUserId;
        ...

        // getters and setters

    public TbDriverInfoBO(String colUserId, String colPwd, String colDrs, String colBranch)
    {
        this.colBranch = colBranch;
        this.colDrs = colDrs;
        this.colPwd = colPwd;
        this.colUserId = colUserId;
    }

    public TbDriverInfoBO() {
        // TODO Auto-generated constructor stub
    }
    public void fillBo(JabongModel jabongModel)
    {
       this.colBranch = jabongModel.getBrancode();
       this.colDrs = jabongModel.getDrsno();
       this.colPwd = jabongModel.getPassword();
       this.colUserId = jabongModel.getLoginId();
       //this.id = jabongModel.getId();

    }
}



DBHelperClass
public int addData(TbDriverInfoBO tbDriverInfoBO) {
    int i=0;
    RuntimeExceptionDao<TbDriverInfoBO, String> dao = getTbDriverInfoDaO();
    try{
     i = dao.create(tbDriverInfoBO);
    }
    catch (Exception e) {
        e.getStackTrace();// TODO: handle exception
    }
    return i;
}

どこが間違っているのかわからない。誰か助けてください!!!

スタックトレース(取得したログ猫)は次のとおりです。

01-28 15:43:46.251: D/dalvikvm(368): threadid=1: still suspended after undo (sc=1 dc=1 s=Y)
01-28 15:43:46.251: D/dalvikvm(368): GC_FOR_MALLOC freed 8148 objects / 498080 bytes in 72ms
01-28 15:43:49.514: D/dalvikvm(368): threadid=1: still suspended after undo (sc=1 dc=1 s=Y)
01-28 15:43:50.790: D/dalvikvm(368): threadid=1: still suspended after undo (sc=1 dc=1 s=Y)
01-28 15:43:50.900: I/Database(368): sqlite returned: error code = 1, msg = no such table: tbdriverinfobo
01-28 15:43:58.681: D/dalvikvm(368): threadid=1: still suspended after undo (sc=1 dc=1 s=Y)
01-28 15:44:01.956: D/dalvikvm(368): threadid=1: still suspended after undo (sc=1 dc=1 s=Y)
4

2 に答える 2

11

のテーブルを作成していないtbdriverinfoboようです。

sqlite returned: error code = 1, msg = no such table: tbdriverinfobo

onCreate()ヘルパーにあなたの方法を教えてもらえますか?アプリケーションに既存のデータベースがあり、後でこのテーブルを追加しましたか?データベースのバージョン番号をインクリメントする必要がありますか?

于 2013-01-29T14:28:16.643 に答える
0

必要な新しいテーブルの前にデータベースとテーブルを作成したため、このエラーが発生します

tbDriverInfoBO(これは新しいテーブルです)

ORMLiteライブラリは、「テーブルtbDriverInfoBOが見つかりませんでした....」のような例外をスローします。したがって、携帯電話からモバイルアプリをアンインストールしてから、以下のコードのようにすべてのテーブルクラスをonCreateメソッドに書き込む必要があります。 ..

@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
    try {
        TableUtils.createTable(connectionSource, Table1.class);
        TableUtils.createTable(connectionSource, Table2.class);
        TableUtils.createTable(connectionSource, Table3.class);
        TableUtils.createTable(connectionSource, Table4.class);
        TableUtils.createTable(connectionSource, Table5.class);//you must add all your table class 
        TableUtils.createTable(connectionSource, TableN.class);
    } catch (SQLException e) {
        e.printStackTrace();
    }

}

すべてのテーブルクラスを追加した後、ローカルテーブルにデータを追加できます...

私の答えが誰かに役立つことを願っています...幸せなコーディング

于 2017-12-14T13:07:46.063 に答える