1

こんにちは基本的に私はデータベースから配列にデータを取得するためにこれをやっています

 for(i=0;i<numfilas;i++){
    HashMap<Object, Object> rowdata = new HashMap<Object, Object>(cur.getNextRow());
    for(j=0;j<numcolumnas;j++){
        datos[posicion]=rowdata.get(nombrecolumnas[j]).toString();
        posicion++;
    }
    }

次に、ユーザーが編集できるようにデータを EditTexts に渡し、その後配列を更新します。問題は、このデータを取得してデータベースに戻す方法です。

データ型に問題がありますか? 配列がString型で、データベースがint型、String型、long型だったので.....

前もって感謝します

4

1 に答える 1

2

データ型に問題がありますか? 配列がString型で、データベースがint型、String型、long型だったので.....

更新しようとしているフィールドのいずれかがDate/TimeAccess のフィールドである場合、可能性があります。Jackcess は暗黙のうちに文字列を数値にキャストできますが (多くの場合、とにかく)、日付に関してはそれができません。

[Members] という名前のテーブルのサンプル データの場合

MemberID  MemberName  SponsorID  DateJoined  FeePaid
--------  ----------  ---------  ----------  -------
       1  Gord                   2014-01-16        0

次のコードは正常に動作します

try (Database db = DatabaseBuilder.open(new File("C:/Users/Public/mdbTest.mdb"))) { 
    Table table = db.getTable("Members");
    Row row = CursorBuilder.findRow(table, Collections.singletonMap("MemberID", 1));
    if (row != null) {
        row.put("SponsorID", "0");  // "Long Integer" in Access
        row.put("FeePaid", "130");  // "Currency" in Access
        table.updateRow(row);
    }
    else {
        System.out.println("row not found.");
    }
} catch (Exception e) {
    e.printStackTrace(System.out);
}

ただし、これは機能しません

row.put("DateJoined", "2014-01-23");  // "Date/Time" in Access

Jackcess は文字列値を内部 (数値) 日付値に暗黙的にキャストできないため、代わりに次のようなことを行う必要があります。

org.joda.time.DateTime dt = new org.joda.time.DateTime("2014-01-23");
row.put("DateJoined", dt.getMillis());

別の方法として、 UCanAccessを調査することもできます。これは、Jackcess を使用して Access データベースで読み取りと書き込みを実行する純粋な Java JDBC ドライバーですが、次のようなより「通常の」SQL メソッドを使用して実行できます。

Connection conn=DriverManager.getConnection(
        "jdbc:ucanaccess://C:/Users/Public/mdbTest.mdb");
PreparedStatement ps = conn.prepareStatement(
        "UPDATE Members SET " +
            "SponsorID=?, " +
            "DateJoined=?, " +
            "FeePaid=? " +
        "WHERE MemberID=1");
ps.setInt(1, Integer.parseInt("0"));
org.joda.time.DateTime dt = new org.joda.time.DateTime("2014-01-23");
ps.setTimestamp(2, new Timestamp(dt.getMillis()));
ps.setBigDecimal(3, new BigDecimal("130"));
ps.executeUpdate();
于 2014-03-06T13:16:50.953 に答える