安卓:sqlite的错误 - (1)近及QUOT;零":语法错误 [英] Android : Sqlite error - (1) near "null": syntax error

查看:144
本文介绍了安卓:sqlite的错误 - (1)近及QUOT;零":语法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我'从服务器作为一个JSONObject获取数据和现在的储蓄,以我的表。

我'对着下面的错误。


  

2月11日至22日:18:35.489:E / AndroidRuntime(2597):android.database.sqlite.SQLiteException:近零:语法错误(code 1),在编译:CREATE TABLE Con​​ntact(空INTEGER PRIMARY KEY AUTOINCREMENT,空TEXT,空TEXT,空TEXT,空TEXT,空TEXT,空TEXT);


 的for(int i = 0; I< contactdata.length();我++)
        {
            JSONObject的CONT = contactdata.getJSONObject(I)
            字符串CON_ID =的getValue(续,ID);
            的System.out.println(的ContactID+ CON_ID);
            字符串FIRST_NAME =的getValue(续FIRST_NAME);
            字符串姓氏=的getValue(续,姓氏);
            字符串SHORT_NAME =的getValue(续简称的);
            字符串PID =的getValue(续,PID);
            串CID =的getValue(续,CID);
            串号=的getValue(续914424411295);
            Conntact CON =新Conntact(getActivity());
            con.insertValues​​(CON_ID,SHORT_NAME,名字,姓氏,人数,PID,CID);
            Toast.makeText(CTX,接触内幕,Toast.LENGTH_SHORT).show();
        }

这是我的Conntact类

 公共类Conntact {公共Conntact(){    // TODO自动生成构造函数存根
}
静态SQLiteDatabase分贝;
静态ContactDB DEDB;
公共Conntact(上下文的背景下)
{
    DEDB =新ContactDB(背景);
}
公共静态SQLiteDatabase的open()
{
    返回dedb.getWritableDatabase();
}
公共无效的close()
{
    dedb.close();
}
公共无效insertValues​​(CON_ID字符串,字符串SHORT_NAME,FIRST_NAME字符串,字符串姓氏,PID字符串,字符串CID,串号)
{
    DB =开();
    ContentValues​​值=新ContentValues​​();
    values​​.put(ContactDB.con_id,CON_ID);
    values​​.put(ContactDB.short_name,SHORT_NAME);
    values​​.put(ContactDB.first_name,FIRST_NAME);
    values​​.put(ContactDB.last_name,姓氏);
    values​​.put(ContactDB.pid,PID);
    values​​.put(ContactDB.cid,CID);
    values​​.put(ContactDB.number,数);
    db.insert(ContactDB.TABLE_NAME,空,价值);
    this.close();
}公众的ArrayList<串GT;的GetValues​​()
{
    ArrayList的<串GT;名称=新的ArrayList<串GT;();
    DB =开();
    查询字符串= + ContactDB.TABLE_NAME从选择*;
    光标光标= db.rawQuery(查询,NULL);
    如果(cursor.moveToFirst())
    {
        做{
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.con_id)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.number)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.first_name)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.last_name)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.short_name)));;
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.pid)));;
            //names.add(cursor.get)
        }而(cursor.moveToNext());
    }
    返回名称;}
公共静态布尔isAvailable(串号)
{
    DB =开();
    查询字符串= + ContactDB.TABLE_NAME +,从选择*,其中+ ContactDB.number +=+号;
    光标C = db.rawQuery(查询,NULL);
    如果(C == NULL)
    {
        返回false;
    }其他
    返回true;
}
}

这是我的ContactDB类

 公共类ContactDB扩展SQLiteOpenHelper {
公共静态最后弦乐DATABASE_NAME =AA_DB_N​​AME;
公共静态最后弦乐TABLE_NAME =Conntact;
公共静态最终诠释VERSION = 1;
公共ContactDB(上下文的背景下){
    超(背景下,DATABASE_NAME,空,VERSION);
    // TODO自动生成构造函数存根
}公共静态字符串CON_ID;
公共静态字符串SHORT_NAME;
公共静态字符串FIRST_NAME;
公共静态字符串姓氏;
公共静态字符串PID;
公共静态字符串CID;
公共静态串号;
公共静态字符串CREATE_QUERY =创建表+ TABLE_NAME +(+ CON_ID +INTEGER PRIMARY KEY AUTOINCREMENT,+ SHORT_NAME +TEXT+ FIRST_NAME +TEXT+姓氏+TEXT+ PID +TEXT+ CID + TEXT,+数字+TEXT);;
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    // TODO自动生成方法存根
    db.execSQL(CREATE_QUERY);
}@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    // TODO自动生成方法存根
    db.execSQL(DROP TABLE+ TABLE_NAME +IF NOT EXISTS);
}}

我不知道我做了错误。请帮助,如果我在一个错误的方式去。


解决方案

正如前面提到的,你需要分配值公共静态字符串■在 ContactDB 类。你也应该让他们最后,以$ P $被意外修改pvent他们。

 公共静态最后弦乐CON_ID =CON_ID;
公共静态最后弦乐SHORT_NAME =SHORT_NAME;
公共静态最后弦乐FIRST_NAME =FIRST_NAME;
公共静态最后弦乐姓氏=姓氏;
公共静态最后弦乐PID =PID;
公共静态最后弦乐CID =CID;
公共静态最后弦乐数=数字;

I'am getting data from the server as a JSONObject and am saving to my table.

I'am facing the following error.

11-22 02:18:35.489: E/AndroidRuntime(2597): android.database.sqlite.SQLiteException: near "null": syntax error (code 1): , while compiling: create table Conntact (null INTEGER PRIMARY KEY AUTOINCREMENT, null TEXT, null TEXT, null TEXT, null TEXT, null TEXT, null TEXT);

for(int i=0;i<contactdata.length();i++)
        {
            JSONObject cont = contactdata.getJSONObject(i);
            String con_id = getValue(cont, "id");
            System.out.println("contactid"+con_id);
            String first_name = getValue(cont, "first_name");
            String last_name = getValue(cont, "last_name");
            String short_name = getValue(cont, "short_name");
            String pid = getValue(cont, "pid");
            String cid = getValue(cont, "cid");
            String number = getValue(cont, "914424411295");
            Conntact con = new Conntact(getActivity());
            con.insertValues(con_id, short_name, first_name, last_name, number, pid, cid);
            Toast.makeText(ctx, "contact inside", Toast.LENGTH_SHORT).show();
        }

This is my Conntact class

public class Conntact {

public Conntact() {

    // TODO Auto-generated constructor stub
}
static SQLiteDatabase db;
static ContactDB dedb;
public Conntact(Context context)
{
    dedb = new  ContactDB(context);
}
public static SQLiteDatabase open()
{
    return dedb.getWritableDatabase();
}
public void close()
{
    dedb.close();
}
public void insertValues(String con_id, String short_name,String first_name,String last_name,String pid,String cid,String number)
{
    db = open();
    ContentValues values = new ContentValues();
    values.put(ContactDB.con_id, con_id);
    values.put(ContactDB.short_name, short_name);
    values.put(ContactDB.first_name, first_name);
    values.put(ContactDB.last_name, last_name);
    values.put(ContactDB.pid, pid);
    values.put(ContactDB.cid, cid);
    values.put(ContactDB.number, number);
    db.insert(ContactDB.TABLE_NAME, null, values);
    this.close();
}

public ArrayList<String> getValues()
{
    ArrayList<String> names = new ArrayList<String>();
    db = open();
    String query = "select * from "+ContactDB.TABLE_NAME;
    Cursor cursor = db.rawQuery(query, null);
    if(cursor.moveToFirst())
    {
        do{
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.con_id)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.number)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.first_name)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.last_name)));
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.short_name)));;
            names.add(cursor.getString(cursor.getColumnIndex(ContactDB.pid)));;
            //names.add(cursor.get)
        }while(cursor.moveToNext());
    }
    return names;

}
public static  boolean isAvailable(String number)
{
    db = open();
    String query = "select * from"+ContactDB.TABLE_NAME+"where"+ContactDB.number+"="+number;
    Cursor c =db.rawQuery(query, null);
    if(c==null)
    {
        return false;
    }else
    return true;
}
}

This is my ContactDB class

public class ContactDB extends SQLiteOpenHelper{
public static final String DATABASE_NAME = "AA_DB_NAME";
public static final String TABLE_NAME = "Conntact";
public static final int VERSION = 1;
public ContactDB(Context context) {
    super(context, DATABASE_NAME, null, VERSION);
    // TODO Auto-generated constructor stub
}

public static String con_id;
public static String short_name;
public static String first_name;
public static String last_name;
public static String pid;
public static String cid;
public static String number;
public static String CREATE_QUERY = "create table "+TABLE_NAME+" ("+con_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+short_name+" TEXT, "+first_name+" TEXT, "+last_name+" TEXT, "+pid+" TEXT, "+cid+" TEXT, "+number+" TEXT);";
@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL(CREATE_QUERY);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE "+TABLE_NAME+" IF NOT EXISTS");
}

}

I don't know where i did mistakes. Please help if i go in a wrong way.

解决方案

As mentioned, you need to assign values to the public static Strings in the ContactDB class. You should also make them final, to prevent them from being accidentally modified.

public static final String con_id = "con_id";
public static final String short_name = "short_name";
public static final String first_name = "first_name";
public static final String last_name = "last_name";
public static final String pid = "pid";
public static final String cid = "cid";
public static final String number = "number";   

这篇关于安卓:sqlite的错误 - (1)近及QUOT;零&QUOT;:语法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆