package org.aisen.android.component.orm.utils; import android.text.TextUtils; import org.aisen.android.common.utils.Logger; import org.aisen.android.component.orm.SqliteUtility; import org.aisen.android.component.orm.extra.AutoIncrementTableColumn; import org.aisen.android.component.orm.extra.Extra; import org.aisen.android.component.orm.extra.TableColumn; import org.aisen.android.component.orm.extra.TableInfo; import java.util.ArrayList; import java.util.List; /** * Created by wangdan on 15-3-17. */ public class SqlUtils { public static String getTableSql(TableInfo table) { TableColumn primaryKey = table.getPrimaryKey(); StringBuffer strSQL = new StringBuffer(); strSQL.append("CREATE TABLE IF NOT EXISTS "); strSQL.append(table.getTableName()); strSQL.append(" ( "); // 自增主键 if (primaryKey instanceof AutoIncrementTableColumn) { strSQL.append(" ") .append(primaryKey.getColumn()).append(" ") .append(" INTEGER PRIMARY KEY AUTOINCREMENT ,"); } else { strSQL.append(" ").append(primaryKey.getColumn()) .append(" ").append(primaryKey.getColumnType()) .append(" NOT NULL ,"); } for (TableColumn column : table.getColumns()) { strSQL.append(" ").append(column.getColumn()); strSQL.append(" ").append(column.getColumnType()); strSQL.append(" ,"); } strSQL.append(" ").append(FieldUtils.OWNER).append(" text NOT NULL, "); strSQL.append(" ").append(FieldUtils.KEY).append(" text NOT NULL, "); strSQL.append(" ").append(FieldUtils.CREATEAT).append(" INTEGER NOT NULL "); // 自动增加的主键,只有id一个 if (primaryKey instanceof AutoIncrementTableColumn) { } else { strSQL.append(", PRIMARY KEY ( ").append(primaryKey.getColumn()).append(" , ") .append(FieldUtils.KEY).append(" , ") .append(FieldUtils.OWNER).append(" )"); } // strSQL.append(" PRIMARY KEY ( ").append(primaryKey.getColumn()).append(" ) "); // strSQL.append(" PRIMARY KEY ( ").append(primaryKey.getColumn()).append(" ), "); // strSQL.append(" UNIQUE KEY (").append(primaryKey.getColumn()).append(", ") // .append(FieldUtils.OWNER).append(", ") // .append(FieldUtils.KEY).append(" )"); // strSQL.deleteCharAt(strSQL.length() - 1); strSQL.append(" )"); String tableStr = strSQL.toString(); Logger.d(SqliteUtility.TAG, "create table = " + tableStr); return tableStr; } public static String createSqlInsert(String insertInto, TableInfo tableInfo) { List<TableColumn> columns = new ArrayList<TableColumn>(); // 如果是自增主键,不设置值 if (tableInfo.getPrimaryKey() instanceof AutoIncrementTableColumn) ; else columns.add(tableInfo.getPrimaryKey()); columns.addAll(tableInfo.getColumns()); columns.add(FieldUtils.getOwnerColumn()); columns.add(FieldUtils.getKeyColumn()); columns.add(FieldUtils.getCreateAtColumn()); StringBuilder builder = new StringBuilder(insertInto); builder.append(tableInfo.getTableName()).append(" ("); appendColumns(builder, columns); builder.append(") VALUES ("); appendPlaceholders(builder, columns.size()); builder.append(')'); return builder.toString(); } public static StringBuilder appendColumns(StringBuilder builder, List<TableColumn> columns) { int length = columns.size(); for (int i = 0; i < length; i++) { builder.append('\'').append(columns.get(i).getColumn()).append('\''); if (i < length - 1) { builder.append(','); } } return builder; } public static StringBuilder appendPlaceholders(StringBuilder builder, int count) { for (int i = 0; i < count; i++) { if (i < count - 1) { builder.append("?,"); } else { builder.append('?'); } } return builder; } public static String appendExtraWhereClauseSql(Extra extra) { StringBuffer sb = new StringBuffer(); if (extra == null || (TextUtils.isEmpty(extra.getKey()) && TextUtils.isEmpty(extra.getOwner()))) { sb.append(""); } else if (!TextUtils.isEmpty(extra.getKey()) && !TextUtils.isEmpty(extra.getOwner())) { sb.append(" ").append(FieldUtils.OWNER).append(" = '").append(extra.getOwner()).append("' ") .append(" and ") .append(FieldUtils.KEY).append(" = '").append(extra.getKey()).append("' "); } else if (!TextUtils.isEmpty(extra.getKey())) { sb.append(FieldUtils.KEY).append(" = '").append(extra.getKey()).append("' "); } else if (!TextUtils.isEmpty(extra.getOwner())) { sb.append(" ").append(FieldUtils.OWNER).append(" = '").append(extra.getOwner()).append("' "); } return sb.toString(); } public static String appendExtraWhereClause(Extra extra) { StringBuffer sb = new StringBuffer(); if (extra == null || (TextUtils.isEmpty(extra.getKey()) && TextUtils.isEmpty(extra.getOwner()))) { sb.append(""); } else if (!TextUtils.isEmpty(extra.getKey()) && !TextUtils.isEmpty(extra.getOwner())) { sb.append(" ").append(FieldUtils.KEY).append(" = ? ") .append(" and ") .append(FieldUtils.OWNER).append(" = ? "); } else if (!TextUtils.isEmpty(extra.getKey())) { sb.append(FieldUtils.KEY).append(" = ? "); } else if (!TextUtils.isEmpty(extra.getOwner())) { sb.append(" ").append(FieldUtils.OWNER).append(" = ? "); } return sb.toString(); } public static String[] appendExtraWhereArgs(Extra extra) { List<String> argList = new ArrayList<String>(); if (extra != null) { if (!TextUtils.isEmpty(extra.getKey())) argList.add(extra.getKey()); if (!TextUtils.isEmpty(extra.getOwner())) argList.add(extra.getOwner()); } return argList.toArray(new String[0]); } }