Java 如何使用jackcess将数据从阵列传递到数据库
嗨,我这样做是为了从数据库到阵列检索数据Java 如何使用jackcess将数据从阵列传递到数据库,java,arrays,ms-access,gridview,jackcess,Java,Arrays,Ms Access,Gridview,Jackcess,嗨,我这样做是为了从数据库到阵列检索数据 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();
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++;
}
}
(i=0;i)的
我在数据类型方面遇到麻烦了吗?因为数组是字符串类型,数据库有int类型、String类型、long类型
如果您试图更新的任何字段都是Access中的Date/Time
字段,则可能是。JackAccess能够隐式地将字符串转换为数字(无论如何,在许多情况下),但在日期方面它无法做到这一点
对于名为[Members]的表中的示例数据
MemberID MemberName赞助商id DateJoined feepay
-------- ---------- --------- ---------- -------
1 Gord 2014-01-16 0
下面的代码工作正常
try(Database db=DatabaseBuilder.open(新文件(“C:/Users/Public/mdbTest.mdb”)){
Table=db.getTable(“成员”);
Row-Row=CursorBuilder.findRow(表,Collections.singletonMap(“MemberID”,1));
如果(行!=null){
在Access中放置(“赞助商ID”、“0”);/“长整数”
第行。在Access中输入(“feepayed”、“130”);/“Currency”
表.updateRow(行);
}
否则{
System.out.println(“未找到行”);
}
}捕获(例外e){
e、 printStackTrace(系统输出);
}
然而,这是行不通的
row.put(“DateJoined”,“2014-01-23”);/“日期/时间”在Access中
由于Jackcess无法将字符串值隐式转换为其内部(数字)日期值,因此您需要执行以下操作
org.joda.time.DateTime dt=new org.joda.time.DateTime(“2014-01-23”);
row.put(“DateJoined”,dt.getMillis());
作为替代方案,您可能需要进行研究。它是一个纯Java JDBC驱动程序,使用JackAccess对Access数据库执行读写操作,但允许您使用以下更“正常”的SQL方法:
Connection conn=DriverManager.getConnection(
“jdbc:ucanaccess://C:/Users/Public/mdbTest.mdb”);
PreparedStatement ps=conn.prepareStatement(
“更新成员集”+
“赞助商ID=?,”+
“日期联接=?”+
“支付的费用=?”+
“其中MemberID=1”);
ps.setInt(1,Integer.parseInt(“0”));
org.joda.time.DateTime dt=新的org.joda.time.DateTime(“2014-01-23”);
ps.setTimestamp(2,新的时间戳(dt.getMillis());
ps.setBigDecimal(3,新的BigDecimal(“130”));
ps.executeUpdate();