如何在Android中自动增加数据库中的代码?
我正在我的应用程序中使用外部数据库,我希望从数据库中获取最大的报告代码(例如13-T005),并将其递增1。然而,由于我使用了“int”并且它只得到最后一个数字,所以我在如何获取最后3个数字上遇到了困难。如何获取报告代码的最后3位数字而不出现任何问题,或者更好地获取整个报告代码本身?谢谢 在my MainActivity.java中:如何在Android中自动增加数据库中的代码?,android,Android,我正在我的应用程序中使用外部数据库,我希望从数据库中获取最大的报告代码(例如13-T005),并将其递增1。然而,由于我使用了“int”并且它只得到最后一个数字,所以我在如何获取最后3个数字上遇到了困难。如何获取报告代码的最后3位数字而不出现任何问题,或者更好地获取整个报告代码本身?谢谢 在my MainActivity.java中: private void getNextReportCode() { tv_Code = (TextView) findViewById(
private void getNextReportCode() {
tv_Code = (TextView) findViewById(R.id.tv_Code);
String query = "SELECT SUBSTR(MAX(ReportCode),5) AS ReportCode FROM " + Constants.TABLE_REPORT; //getting the last 3 digits from the code
Cursor cursorReportCode = databaseHandler.getLastRCode(query);
int reportCode = cursorReportCode.getInt(cursorReportCode.getColumnIndex(Constants.REPORT_CODE)) +1; //increment by 1
String newReportCode = "13-T" + reportCode;
tv_Code.setText(newReportCode);
}
DatabaseHandler.java
public Cursor getLastRCode(String query) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
if (cursor != null);
cursor.moveToFirst();
db.close();
return cursor;
}
根据LuckyMe在评论中的建议,您可能希望使用字符串 您的问题变成:
如何增加字符串?
这似乎相当于问如何增加字符串末尾的数字?
。(如果我错了,请纠正我?)
这里的关键是你知道你的字符串将遵循一个特定的模式;具体来说,[number1]-T[number2]
您对number2
感兴趣
您可能需要的工具是。幸运的是,Java提供了一个API和一个应用程序。要点是:您展示了字符串将遵循的模式,正则表达式(也称为Regex)允许您捕获它的特定部分
希望这能让你走上正轨
编辑:具体来说,这里是。这个代码示例应该做您想要做的事情。关键是使用子字符串提取报表索引,因为您提到它位于最后3位。然后您可以解析和递增。要将其返回到报表代码,需要使用“%03d”的字符串格式来指定一个长度为3位的零填充整数
public class Report {
public String incrementReportCode(String s) {
// Get last 3 characters
int length = s.length();
String lastThreeChars = s.substring(length - 3, length);
// Parse report index
int reportIndex = Integer.parseInt(lastThreeChars);
// Increment report index
int incrementedReportIndex = reportIndex + 1;
// Format as report code, with a zero-filled report index for the last 3 characters
String reportCode = String.format("13-T%03d", incrementedReportIndex);
return reportCode;
}
}
下面是我为此做的一个测试:
public void testIncrement() {
Report r = new Report();
String incrementedString = r.incrementReportCode("13-T005");
assertEquals("13-T006", incrementedString);
}
考虑过将
reportCode
制作成String
,并使用cursorReportCode.getString(…)
?@LuckyMe我确实做到了这一点,但我如何通过使用String来增加它呢?似乎有几个人抢先给了我解释:)注意到。感谢@MFrankli如何使用上面的代码实现您的代码?我很难从数据库中获取报告代码。我认为您的报告代码是:cursorReportCode.getColumnIndex(Constants.report\u code)。也许您可以将其分配给如下字符串:String reportCode=cursorReportCode.getString(cursorReportCode.getColumnIndex(Constants.REPORT_CODE));然后可以使用此代码段获取递增的报告代码:new report()。递增报告代码(reportCode);