Java Android sqlite插入数据sqlite异常

Java Android sqlite插入数据sqlite异常,java,android,sqlite,Java,Android,Sqlite,现在我按照建议,逐行插入: @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); // providers data // db.execSQL("insert into " // + TABLE_PROVIDERS // + " (_id, provider_id, paren

现在我按照建议,逐行插入:

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);
        // providers data
//      db.execSQL("insert  into "
//              + TABLE_PROVIDERS
//              + " (_id, provider_id, parent_id, title, image, sh_n, enable, visible, image_bg, type, is_group, hide_in_search, limit_min, limit_max, off_on_line, invoice_search) "
//              + "VALUES (1,600,101,'Источники оплаты','',1,1,0,'','',1,1,0,0,0,0)");

        ContentValues cv = new ContentValues();
        cv.put("_id", 1);
        cv.put("provider_id", 600);
        cv.put("parent_id", 101);
        cv.put("title", "Bla");
        cv.put("image", "bla");
        cv.put("sh_n", 1);
        cv.put("enable", 1);
        cv.put("visible", 1);
        cv.put("image_bg", "");
        cv.put("type", "");
        cv.put("is_group", 1);
        cv.put("hide_in_search", 1);
        cv.put("limit_min", 10);
        cv.put("limit_max", 10000);
        cv.put("off_on_line", 1);
        cv.put("invoice_search", 1);

        db.insertOrThrow(TABLE_PROVIDERS, null, cv);
}
import java.util.*;
导入android.content.*;
导入android.database.*;
导入android.database.sqlite.*;
公共类ProviderDataSource{
专用数据库;
私有MySQLiteHelper-dbHelper;
公共ProviderDataSource(上下文){
dbHelper=新的MySQLiteHelper(上下文);
}
public void open()引发SQLException{
database=dbHelper.getWritableDatabase();
}
公众假期结束(){
dbHelper.close();
}
公共列表getProvidersByParentId(长parentId){
列表提供程序列表=新的ArrayList();
Cursor Cursor=database.query(MySQLiteHelper.TABLE_PROVIDERS,新字符串[]{“provider_id”,“title”,“image”},parent_id=“+parentId,
空,空,空,空);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
提供程序提供程序=游标或提供程序(游标);
providersList.add(提供程序);
cursor.moveToNext();
}
cursor.close();
System.out.println(“getProvidersByParentId”);
返回提供者列表;
}
专用提供程序游标提供程序(游标){
提供程序=新提供程序();
provider.setId(cursor.getInt(1));
provider.setTitle(cursor.getString(3));
provider.setImg(cursor.getString(4));
退货供应商;
}
}

它不起作用。似乎没有插入行,getProvidersByParentId方法返回的数组为空。作为参数的Parent_id为101

您的insert语句错误。在SQLite中,不能通过用逗号分隔多条记录来插入多条记录,事实上,您需要为此准备单独的插入命令。但是如果您的SQLite版本是3.7.11,那么它是可能的


阅读。

您的insert语句是错误的。在SQLite中,不能通过用逗号分隔多条记录来插入多条记录,事实上,您需要为此准备单独的插入命令。但是如果您的SQLite版本是3.7.11,那么它是可能的


阅读。

您可以使用这样的for循环来完成

//添加按钮单击事件,如

字符串[]arr1=新字符串[n]; 字符串[]arr2=新字符串[n]; 字符串[]arr3=新字符串[n]

import java.util.*;

import android.content.*;
import android.database.*;
import android.database.sqlite.*;

public class ProviderDataSource {

    private SQLiteDatabase database;
    private MySQLiteHelper dbHelper;

    public ProviderDataSource(Context context) {
        dbHelper = new MySQLiteHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    public List<Provider> getProvidersByParentId(long parentId) {

        List<Provider> providersList = new ArrayList<Provider>();

        Cursor cursor = database.query(MySQLiteHelper.TABLE_PROVIDERS, new String[] { "provider_id", "title", "image" }, " parent_id=" + parentId,
                null, null, null, null);

        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            Provider provider = cursorToProvider(cursor);
            providersList.add(provider);
            cursor.moveToNext();
        }
        cursor.close();
        System.out.println("getProvidersByParentId");
        return providersList;
    }

    private Provider cursorToProvider(Cursor cursor) {

        Provider provider = new Provider();
        provider.setId(cursor.getInt(1));
        provider.setTitle(cursor.getString(3));
        provider.setImg(cursor.getString(4));

        return provider;

    }

}

你可以用这样的for循环来实现

//添加按钮单击事件,如

字符串[]arr1=新字符串[n]; 字符串[]arr2=新字符串[n]; 字符串[]arr3=新字符串[n]

import java.util.*;

import android.content.*;
import android.database.*;
import android.database.sqlite.*;

public class ProviderDataSource {

    private SQLiteDatabase database;
    private MySQLiteHelper dbHelper;

    public ProviderDataSource(Context context) {
        dbHelper = new MySQLiteHelper(context);
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    public List<Provider> getProvidersByParentId(long parentId) {

        List<Provider> providersList = new ArrayList<Provider>();

        Cursor cursor = database.query(MySQLiteHelper.TABLE_PROVIDERS, new String[] { "provider_id", "title", "image" }, " parent_id=" + parentId,
                null, null, null, null);

        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            Provider provider = cursorToProvider(cursor);
            providersList.add(provider);
            cursor.moveToNext();
        }
        cursor.close();
        System.out.println("getProvidersByParentId");
        return providersList;
    }

    private Provider cursorToProvider(Cursor cursor) {

        Provider provider = new Provider();
        provider.setId(cursor.getInt(1));
        provider.setTitle(cursor.getString(3));
        provider.setImg(cursor.getString(4));

        return provider;

    }

}

使用
ContentValues
像这样将数据插入表中

public void addValues(String Col1, String Col2,
                          String col3)

{

ContentValues values = new ContentValues();




        values.put(Columns1, Col1);
        values.put(Columns2, Col2);
        values.put(Columns3, Col3);

try{
            db.insert(Course_Info_Table, null, values);


}
        catch(Exception e)
        {

        }

}
对于多个记录,多次调用此方法。

SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();

        cv.put("_id", 1);
        cv.put("provider_id", 600);
        cv.put("parent_id", 0);

        cv.put("title", "Источники оплаты");
        cv.put("image", "");
        cv.put("sh_n", 1);
        cv.put("enable", 1);
        cv.put("visible", 0);
        cv.put("image_bg", "");
        cv.put("type", "");
        cv.put("is_group", 1);
        cv.put("hide_in_search", 1);
        cv.put("limit_min", 0);
        cv.put("limit_max", 0);
        cv.put("off_on_line", 0);
        cv.put("invoice_search", 0);
        db.insertOrThrow(TABLE_PROVIDERS, null, cv);
          db.close();

使用
ContentValues
像这样将数据插入表中

public void addValues(String Col1, String Col2,
                          String col3)

{

ContentValues values = new ContentValues();




        values.put(Columns1, Col1);
        values.put(Columns2, Col2);
        values.put(Columns3, Col3);

try{
            db.insert(Course_Info_Table, null, values);


}
        catch(Exception e)
        {

        }

}
对于多个记录,多次调用此方法。

SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();

        cv.put("_id", 1);
        cv.put("provider_id", 600);
        cv.put("parent_id", 0);

        cv.put("title", "Источники оплаты");
        cv.put("image", "");
        cv.put("sh_n", 1);
        cv.put("enable", 1);
        cv.put("visible", 0);
        cv.put("image_bg", "");
        cv.put("type", "");
        cv.put("is_group", 1);
        cv.put("hide_in_search", 1);
        cv.put("limit_min", 0);
        cv.put("limit_max", 0);
        cv.put("off_on_line", 0);
        cv.put("invoice_search", 0);
        db.insertOrThrow(TABLE_PROVIDERS, null, cv);
          db.close();


尝试插入单个记录。是的,谢谢,Ravi在下面的帖子中建议我使用一个ContentValues数组。尝试插入单个记录。是的,谢谢,Ravi在下面的帖子中建议我使用一个ContentValues数组。非常感谢,这似乎是真正的决定-我稍后会尝试。好的,如果我有超过1-10行要插入,比如说10000行的转储——在这种情况下我应该怎么做?我已经编辑了我的帖子。将所有代码放在一个方法中,并对要插入的多行多次调用方法。这没关系,但我需要使用多个参数调用此方法10000次,然后手动插入(不是动态插入)。我的意思是,我有mysql转储,需要将数据插入SQLite。这不是用户操作等。在循环中调用此方法10000次或手动调用10000行。非常感谢,这似乎是真正的决定-我稍后会尝试。好的,如果我有超过1-10行要插入,例如10000行的转储-在这种情况下我应该怎么做?我已经编辑了我的帖子。将所有代码放在一个方法中,并对要插入的多行多次调用方法。这没关系,但我需要使用多个参数调用此方法10000次,然后手动插入(不是动态插入)。我的意思是,我有mysql转储,需要将数据插入SQLite。这不是用户操作等。在循环中调用此方法10000次或手动调用10000行。好的,如果我有超过1-10行要插入,例如10000行的转储-在这种情况下我应该怎么做?开始SQLite事务,使用for循环添加记录,最后提交该事务。这将是真正的fastOk,如果我有超过1-10行要插入,比如10000行的dump-在这种情况下我应该怎么做?开始一个SQLite事务,使用for循环添加记录,最后提交该事务。会很快的