【发布时间】:2017-11-19 23:06:27
【问题描述】:
堆栈溢出,
我正在尝试了解如何使用 String.format() 为我的 Android 应用程序创建一个 sqlite 数据库。
我有一个扩展 SQLiteOpenHelper 的公共类和一个包含私有静态最终字符串的私有内部类,我打算将其作为数据库的列名。
音乐数据库类代码
public class SaturnMusicDatabase extends SQLiteOpenHelper{
private Context mContext;
// Necessary public constructor to use SQLiteOpenHelper
public SaturnMusicDatabase(Context context){
super(context, "SaturnMusic.db"), null,1);
mContext = context;
}
// The columns beginning with an underscore are the primary key
private static final class Songs{
private static final String TABLE = "songs";
private static final String COL_ARTIST ="_artist";
private static final String COL_ALBUM="_album";
private static final String COL_TITLE ="_title";
private static final String COL_GENRE = "genre";
private static final String COL_LENGTH ="length";
private static final String COL_Number ="number";
}
@Override
public void onCreate(SQLiteDatabase db) {
String queryMakeSong = String.format
("create table %s (primary key(%s, %s, %s)%s, %s, %s)",
Songs.TABLE, Songs.COL_ARTIST, Songs.COL_ALBUM, Songs.COL_TITLE,
Songs.COL_GENRE, Songs.COL_LENGTH, Songs.COL_Number);
db.execSQL(queryMakeSong);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
我的困惑在于 create 语句。我理解 String.format() 工作原理的方式是,后跟修饰符的 % 符号决定了在格式化传递给函数的数据时要使用的数据类型。
我的目的是创建一个名为 song 的表,它有六个字段,其中三个是主键:Artist、Album 和 Title。
字段名称应该是字符串是有道理的,所以这就是我选择使用's'修饰符的原因。这是否意味着将存储在这些字段中的数据将是字符串?或者这是否意味着字段名称是字符串,我必须在 create table 语句中指定这些字段应包含的数据类型?
如果是前者,那不是我想要的所有领域。 LENGTH 和 NUMBER 之类的东西应该存储整数。这让我觉得他们应该使用“d”修饰符。
如果我的语法有错误,请分享,以及如何纠正它。
【问题讨论】:
标签: java android sqlite string-formatting sqliteopenhelper