如何在Android中自动增加数据库中的代码?

如何在Android中自动增加数据库中的代码?,android,Android,我正在我的应用程序中使用外部数据库,我希望从数据库中获取最大的报告代码(例如13-T005),并将其递增1。然而,由于我使用了“int”并且它只得到最后一个数字,所以我在如何获取最后3个数字上遇到了困难。如何获取报告代码的最后3位数字而不出现任何问题,或者更好地获取整个报告代码本身?谢谢 在my MainActivity.java中: private void getNextReportCode() { tv_Code = (TextView) findViewById(

我正在我的应用程序中使用外部数据库,我希望从数据库中获取最大的报告代码(例如13-T005),并将其递增1。然而,由于我使用了“int”并且它只得到最后一个数字,所以我在如何获取最后3个数字上遇到了困难。如何获取报告代码的最后3位数字而不出现任何问题,或者更好地获取整个报告代码本身?谢谢

在my MainActivity.java中:

    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);