- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过组合其他三个整数字段来更新我的 SQLite 数据库中的一个整数字段,但如果字段值的长度为 1,我还需要在其他字段中的两个前面加上一个零。
这是我尝试通过我的 DBAdapter 类中的升级数据库方法执行的例程。
所以我需要更改当前的更新:
if (newVersion==2) {
populatesql = "update " + DB_TABLE +
" set field1="+ COL_FIELD2 +
" || " +
COL_FIELD3 +
" || " +
COL_FIELD4;
}
类似这样的事情(是的,我知道 prefixzero 不起作用,因为它需要字符串而不是整数,但我尝试使用字符串并将其设为静态,但它不起作用)
if (newVersion==2) {
populatesql = "update " + DB_TABLE +
" set field1="+ COL_FIELD2 +
" || " +
prefixzero(COL_FIELD3) +
" || " +
prefixzero(COL_FIELD4);
}
public String prefixzero(String number) {
String result = Integer.toString(number);
// Log.d("PREFIX", "result starts with this = "+result);
if (result.length() >1 ) {
// Log.d("PREFIX", "NO ZEROES HERE");
return Integer.toString(number);
}
String zeroprefix = "";
zeroprefix = "0"+result;
// Log.d("PREFIX", zeroprefix);
return zeroprefix ;
}
数据库字段声明如下:
public static final String COL_FIELD4 = "day";
public static final String COL_FIELD3 = "month";
public static final String COL_FIELD2 = "year";
public static final String COL_FIELD1 = "long_date";
这是我遗漏空格的错误。就像没有空格一样,字段名称只是简单地连接在一起。使用的代码低于此错误。
02-28 07:34:00.919: E/AndroidRuntime(18332): java.lang.RuntimeException: Unable to start activity ComponentInfo{co.uk.common.myapp/co.uk.common.myapp.MainActivity}: android.database.sqlite.SQLiteException: no such column: yearmonthday: update Log set long_date= yearmonthday
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1658)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1674)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:942)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.os.Handler.dispatchMessage(Handler.java:99)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.os.Looper.loop(Looper.java:130)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.app.ActivityThread.main(ActivityThread.java:3735)
02-28 07:34:00.919: E/AndroidRuntime(18332): at java.lang.reflect.Method.invokeNative(Native Method)
02-28 07:34:00.919: E/AndroidRuntime(18332): at java.lang.reflect.Method.invoke(Method.java:507)
02-28 07:34:00.919: E/AndroidRuntime(18332): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
02-28 07:34:00.919: E/AndroidRuntime(18332): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:662)
02-28 07:34:00.919: E/AndroidRuntime(18332): at dalvik.system.NativeStart.main(Native Method)
02-28 07:34:00.919: E/AndroidRuntime(18332): Caused by: android.database.sqlite.SQLiteException: no such column: yearmonthday: update Log set long_date= yearmonthday
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763)
02-28 07:34:00.919: E/AndroidRuntime(18332): at co.uk.shieldstothemax.blastedneighbours.DBAdapter$DBHelper.onUpgrade(DBAdapter.java:68)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:132)
02-28 07:34:00.919: E/AndroidRuntime(18332): at co.uk.shieldstothemax.blastedneighbours.DBAdapter.open(DBAdapter.java:87)
02-28 07:34:00.919: E/AndroidRuntime(18332): at co.uk.shieldstothemax.blastedneighbours.MainActivity.onCreate(MainActivity.java:123)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-28 07:34:00.919: E/AndroidRuntime(18332): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
onUpgrade 方法中的代码:
if (newVersion==2) {
populatesql = "update "+ DB_TABLE +" set long_date= "+getDateStr(COL_FIELD2,COL_FIELD3,COL_FIELD4);
}
getDateStr:
public static String getDateStr(String year, String month,String day) {
return year+ prefixfieldzero(month)+ prefixfieldzero(day);
}
前缀字段零:
public static String prefixfieldzero(String number) {
String result = String.valueOf(number);
// Log.d("PREFIX", "result starts with this = "+result);
if (result.length() >1 ) {
// Log.d("PREFIX", "NO ZEROES HERE");
return number;
}
String zerofieldprefix = "";
zerofieldprefix = "0"+result;
// Log.d("PREFIX", zeroprefix);
return zerofieldprefix ;
}
这是我的 DBAdapter:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter {
private static final String DB_NAME = "TABLE";
private static final String DB_TABLE = "Log";
private static final int DB_VERSION = 2;
private static final String DB_CREATE = "CREATE TABLE IF NOT EXISTS "+DB_TABLE+
" (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"type_id INTEGER, " +" hour INTEGER, " +
"min INTEGER , " +" info VARCHAR,"+"image_desc VARCHAR, "+
"day INTEGER, "+"month INTEGER, "+ "year INTEGER,"+" second INTEGER,long_date INTEGER ,date_time_long INTEGER NOT NULL "+");" ;
public static final String COL_TYPE = "type_id";
public static final String COL_HOUR = "hour";
public static final String COL_MIN = "min";
public static final String COL_SEC = "second";
public static final String COL_IMAGE = "image_desc";
public static final String COL_DAY = "day";
public static final String COL_MON = "month";
public static final String COL_YEAR = "year";
public static final String COL_DATE = "date";
public static final String COL_LONG_DATE = "long_date";
public static final String COL_INFO = "info";
public static final String COL_ID = "_id";
private SQLiteDatabase mDB;
private DBHelper mDBHelper;
private Context mCtx;
private static class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.v("OLDDBVERSION", "Old version="+String.valueOf(oldVersion));
Log.v("NEWDBVERSION", "New version="+String.valueOf(newVersion));
//String upgradesql = null;
String populatesql = null;
if (newVersion==2) {
populatesql = "update "+ DB_TABLE +" set long_date= "+getDateStr(COL_YEAR,COL_MON,COL_DAY);
}
if (populatesql !=null) {
//db.execSQL(upgradesql);
if (populatesql !=null) {
db.execSQL(populatesql);
}
}
}
}
public DBAdapter(Context ctx)
{
this.mCtx = ctx;
}
//OPEN METHOD AND CLOSE METHOD
public DBAdapter open()
{
mDBHelper = new DBHelper(mCtx);
mDB = mDBHelper.getWritableDatabase(); //important
return this;
}
public void close()
{
mDBHelper.close();
}
//INSERT AND DELETE
public long createLog(String info,String image, Integer type,Integer hour,Integer mins,Integer sec,Integer day,Integer month,Integer year,Long longdate,Long date)
{
ContentValues v = new ContentValues();
v.put(COL_TYPE, type);
v.put(COL_INFO, info);
v.put(COL_IMAGE, image);
v.put(COL_HOUR, hour);
v.put(COL_SEC, sec);
v.put(COL_MIN, mins);
v.put(COL_DAY, day);
v.put(COL_MON, month);
v.put(COL_YEAR, year);
v.put(COL_DATE, date);
v.put(COL_LONG_DATE, longdate);
return mDB.insert(DB_TABLE, null, v);
}
public boolean deleteLogRec(long id)
{
return mDB.delete(DB_TABLE, COL_ID + "="+ id, null)>0;
}
public boolean deleteAllLogs()
{
return mDB.delete(DB_TABLE, null, null)>0;
}
//get all bookmark
public Cursor GetAllLogs(Integer i,String sortfield)
{
String sorted = "";
if (i == 1 ) {
sorted = "DESC";
} else if (i == 2) {
sorted = "ASC";
}
return mDB.query(DB_TABLE, new String[] {COL_ID, COL_TYPE,COL_IMAGE, COL_INFO,COL_IMAGE,COL_HOUR,COL_SEC,COL_MIN,COL_DAY,COL_MON,COL_YEAR,COL_SORT_DATE},
null, null, null, null, COL_DATE+" "+sorted);
}
public Cursor allrecords() {
return mDB.query(DB_TABLE, new String[] {COL_ID, COL_TYPE,COL_IMAGE, COL_INFO,COL_IMAGE,COL_HOUR,COL_SEC,COL_MIN,COL_DAY,COL_MON,COL_YEAR,COL_SORT_DATE},
null, null, null, null, null);
}
//get a specific log by id
public Cursor getLog(long id)
{
Cursor mCursor = mDB.query(true, DB_TABLE, new String[] {COL_ID, COL_TYPE,COL_IMAGE, COL_INFO,COL_IMAGE,COL_HOUR,COL_SEC,COL_MIN,COL_DAY,COL_MON,COL_YEAR},
COL_ID + "=" + id,
null, null, null, null, null);
if (mCursor!=null)
mCursor.moveToFirst();
return mCursor;
}
//finally update the log
public boolean updateLog(long id, String uinfo, String uimage,Integer utype,Integer uhour,Integer usec,Integer umin,Integer uday,Integer umonth,Integer uyear,Long ulongdate,Long udate)
{
ContentValues v = new ContentValues();
v.put(COL_TYPE, utype);
v.put(COL_INFO, uinfo);
v.put(COL_IMAGE, uimage);
v.put(COL_HOUR, uhour);
v.put(COL_SEC, usec);
v.put(COL_MIN, umin);
v.put(COL_DAY, uday);
v.put(COL_MON, umonth);
v.put(COL_YEAR, uyear);
v.put(COL_DATE, udate);
v.put(COL_SORT_DATE, ulongdate);
return mDB.update(DB_TABLE, v, COL_ID + "=" + id, null) > 0;
}
public static String prefixfieldzero(String number) {
String result = String.valueOf(number);
// Log.d("PREFIX", "result starts with this = "+result);
if (result.length() >1 ) {
// Log.d("PREFIX", "NO ZEROES HERE");
return number;
}
String zerofieldprefix = "";
zerofieldprefix = "0"+result;
// Log.d("PREFIX", zeroprefix);
return zerofieldprefix ;
}
public static String getDateStr(String year, String month,String day) {
return year+ prefixfieldzero(month)+ prefixfieldzero(day);
}
}
尝试根据您的最新答案运行 SQL,但出现此错误:
03-01 00:20:05.379: E/AndroidRuntime(19060): Caused by: android.database.sqlite.SQLiteException: near "AS": syntax error: update TABLE AS TABLE_Temp1 set long_date = (select year || substr('00' || month ,-2,2 ) || substr('00' || ,day, -2 ,2) from Log AS TABLE_Temp2 where TABLE_Temp1.id=TABLE_Temp2.id
当前用于将长日期更新为年月日组合的 SQL:
populatesql = "update "+DB_TABLE + " AS LogTemp1 set long_date = (select year || substr('00' || month ,-2,2 ) || substr('00' || ,day, -2 ,2) from "+DB_TABLE+" AS LogTemp2 where LogTemp1.id=LogTemp2.id " ;
我也试过如下:
populatesql = "update "+DB_TABLE + " AS LogTemp1 set long_date = (select year || substr('00' || month ,-2,2 ) || substr('00' || ,day, -2 ,2) from "+DB_TABLE+" AS LogTemp2 where **LogTemp1._id=LogTemp2._id** " ;
最佳答案
好吧,我终于得到了,你想要的。您需要一个更新语句来根据其当前值更新每一行。当然,您不能从 SQLite 数据库调用 Java 代码中的函数。因此,一切都必须在 SQLite 本身的 UPDATE 语句中完成。
鉴于此,您的陈述应如下所示:
UPDATE yourTable AS table1
SET date =
(SELECT year ||
substr('00' || month, -2, 2) ||
substr('00' || day, -2, 2)
FROM yourTable AS table2
WHERE table1.id = table2.id);
您只需将我在这里使用的名称替换为您实际使用的名称,并生成一个有效的 Java 字符串。
substr('00' || month, -2, 2)
语句执行其他数据库引擎的 lpad
语句(在 SQLite 中不可用)会做。
您可以这样读:将两个零与一个数字连接起来,然后取结果字符串最右边的两个字符。 -2
表示子串从右边开始计数,2
表示取两个字符作为结果子串。
此 lpad
替换基于 a blogpost通过 Jason Hinkle .
关于android - SQLite Android 从其他字段更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118370/
我查看了网站上的一些问题,但还没有完全弄清楚我做错了什么。我有一些这样的代码: var mongoose = require('mongoose'), db = mongoose.connect('m
基本上,根据 this bl.ocks,我试图在开始新序列之前让所有 block 都变为 0。我认为我需要的是以下顺序: 更新为0 退出到0 更新随机数 输入新号码 我尝试通过添加以下代码块来遵循上述
我试图通过使用随机数在循环中设置 JSlider 位置来模拟“赛马”的投注结果。我的问题是,当然,我无法在线程执行时更新 GUI,因此我的 JSlider 似乎没有在竞赛,它们从头到尾都在运行。我尝试
该功能非常简单: 变量:$table是正在更新的表$fields 是表中的字段,$values 从帖子生成并放入 $values 数组中而$where是表的索引字段的id值$indxfldnm 是索引
让我们想象一个环境:有一个数据库客户端和一个数据库服务器。数据库客户端可以是 Java 程序或其他程序等;数据库服务器可以是mysql、oracle等。 需求是在数据库服务器上的一个表中插入大量记录。
在我当前的应用程序中,我正在制作一个菜单结构,它可以递归地创建自己的子菜单。然而,由于这个原因,我发现很难也允许某种重新排序方法。大多数应用程序可能只是通过“排序”列进行排序,但是在这种情况下,尽管这
Provisioning Profile 有 key , key 链依赖于它。我想知道 key 什么时候会改变。 Key will change after renew Provisioning Pr
截至目前,我在\server\publications.js 中有我的 MongoDB“选择”,例如: Meteor.publish("jobLocations", function () { r
我读到 UI 应该始终在主线程上更新。但是,当谈到实现这些更新的首选方法时,我有点困惑。 我有各种函数可以执行一些条件检查,然后使用结果来确定如何更新 UI。我的问题是整个函数应该在主线程上运行吗?应
我在代理后面,我无法构建 Docker 镜像。 我试过 FROM ubuntu , FROM centos和 FROM alpine ,但是 apt-get update/yum update/apk
我构建了一个 Java 应用程序,它向外部授权客户端公开网络服务。 Web 服务使用带有证书身份验证的 WS-security。基本上我们充当自定义证书颁发机构 - 我们在我们的服务器上维护一个 ja
因此,我有时会在上传新版本时使用 app_offline.htm 使应用程序离线。 但是,当我上传较大的 dll 时,我收到黄色错误屏幕,指出无法加载 dll。 这似乎与我对 app_offline.
我刚刚下载了 VS Apache Cordova Tools Update 5,但遇到了 Node 和 NPM 的问题。我使用默认的空白 cordova 项目进行测试。 版本 如果我在 VS 项目中对
所以我有一个使用传单库实例化的 map 对象。 map 实例在单独的模板中创建并以这种方式路由:- var app = angular.module('myApp', ['ui', 'ngResour
我使用较早的 Java 6 u 3 获得的帧速率是新版本的两倍。很奇怪。谁能解释一下? 在 Core 2 Duo 1.83ghz 上,集成视频(仅使用一个内核)- 1500(较旧的 java)与 70
我正在使用 angular 1.2 ng-repeat 创建的 div 也包含 ng-click 点击时 ng-click 更新 $scope $scope 中的变化反射(reflect)在使用 $a
这些方法有什么区别 public final void moveCamera(CameraUpdate更新)和public final void animateCamera (CameraUpdate
我尝试了另一篇文章中某人评论中关于如何将树更改为列表的建议。但是,我在某处(或某物)有未声明的变量,所以我列表中的值是 [_G667, _G673, _G679],而不是 [5, 2, 6],这是正确
实现以下场景的最佳方法是什么? 我需要从java应用程序调用/查询包含数百万条记录的数据库表。然后,对于表中的每条记录,我的应用程序应该调用第三方 API 并获取状态字段作为响应。然后我的应用程序应该
只是在编写一些与 java 图形相关的代码,这是我今天的讲座中的非常简单的示例。不管怎样,互联网似乎说更新不会被系统触发器调用,例如调整框架大小等。在这个例子中,更新是由这样的触发器调用的(因此当我只
我是一名优秀的程序员,十分优秀!