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循环添加记录,最后提交该事务。会很快的