new Thread(new Runnable() {
@Override
public void run() {
person.name = "QQQ";
person.age = 999;
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
for (int i =0;i<10;i++){
db.insert("person", null, cv);
}
}
}).start();
就创建了一个列表,想在线程中循环插入信息 请问怎么解决
final SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
new Thread(new Runnable() {
@Override
public void run() {
ContentValues cv1 = new ContentValues();
cv1.put("name", "张");
cv1.put("age", 18);
for (int i =0;i<10;i++){ db.insert("person", null, cv1); db.insert("person", null, cv1); }
Cursor c= db.rawQuery("SELECT * FROM person", null);
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
}
}).start();
你这样试试
循环怎么不执行? 你每次循环插入的数据是相同的
循环是肯定执行了的,你可以打Log看输出,如果插入后只有一条那只能说明和数据库设计有关系
public class MainActivity extends AppCompatActivity {
public static SQLiteDatabase db;
public static Person person;
public Thread thread1,thread2,thread3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
person = new Person();
person.name = "john";
person.age = 30;;
db.execSQL("INSERT INTO person VALUES (NULL, ?, ?)", new Object[]{person.name, person.age});
person.name = "david";
person.age = 33;
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
person.name = "dasdd";
person.age = 33;
ContentValues cv1 = new ContentValues();
cv1.put("name", person.name);
cv1.put("age", person.age);
person.name = "dasdd";
person.age = 88;
ContentValues cv2 = new ContentValues();
cv2.put("name", person.name);
cv2.put("age", person.age);
db.insert("person", null, cv);
db.insert("person", null, cv1);
db.insert("person", null, cv2);
/* Cursor c = adb.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"33"});
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("adb", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}*/
thread1 = new Thread(new Runnable() {
@Override
public void run() {
person.name = "abc";
person.age = 100;
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
person.name = "axt";
person.age = 67;
ContentValues cv1 = new ContentValues();
cv1.put("name", person.name);
cv1.put("age", person.age);
int i =1;
while (i<10){
db.insert("person", null, cv);
db.insert("person", null, cv1);
i++;
}
}
});
thread1.start();;
thread2 = new Thread(new Runnable() {
@Override
public void run() {
person.name = "张";
person.age = 47;
ContentValues cv1 = new ContentValues();
cv1.put("name", person.name);
cv1.put("age", person.age);
person.name = "QQQ";
person.age = 999;
ContentValues cv = new ContentValues();
cv.put("name", person.name);
cv.put("age", person.age);
for (int i =0;i<10;i++){
db.insert("person", null, cv);
db.insert("person", null, cv1);
}
}
});
thread2.start();
thread3 =new Thread(new Runnable() {
@Override
public void run() {
Cursor c= db.rawQuery("SELECT * FROM person WHERE age >= ?", new String[]{"30"});
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
//c.close();
}
}
});
thread3.start();
final SQLiteDatabase db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 0x123){
new Thread(new Runnable() {
@Override
public void run() {
Cursor c = null;
try {
c = db.rawQuery("SELECT * FROM person", null);
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
}catch (Throwable e) {
} finally {
if(c != null){
c.close();
}
}
}
}).start();
}
}
};
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
new Thread(new Runnable() {
@Override
public void run() {
ContentValues cv1 = new ContentValues();
cv1.put("name", "张");
cv1.put("age", 18);
for (int i =0;i<10;i++){ db.insert("person", null, cv1); db.insert("person", null, cv1); }
//插入完成发送消息
handler.sendEmptyMessage(0x123);
}
}).start();
这样喽
public class MainActivity extends AppCompatActivity {
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseManager.initializeInstance(getApplicationContext());
db = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null);
db.execSQL("DROP TABLE IF EXISTS person");
db.execSQL("CREATE TABLE person (_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, age SMALLINT)");
Cursor c = db.rawQuery("SELECT * FROM person", null);
while (c.moveToNext()) {
int _id = c.getInt(c.getColumnIndex("_id"));
String name = c.getString(c.getColumnIndex("name"));
int age = c.getInt(c.getColumnIndex("age"));
Log.i("db", "_id=>" + _id + ", name=>" + name + ", age=>" + age);
}
DatabaseManager.initializeInstance(getApplicationContext());
new Thread(new Runnable() {
@Override
public void run() {
db =DatabaseManager.getInstance().openDatabase();
ContentValues cv1 = new ContentValues();
cv1.put("name", "张");
cv1.put("age", 18);
db.insert("person", null, cv1);
DatabaseManager.getInstance().closeDatabase();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
db =DatabaseManager.getInstance().openDatabase();
ContentValues cv1 = new ContentValues();
cv1.put("name", "李");
cv1.put("age", 17);
db.insert("person", null, cv1);
DatabaseManager.getInstance().closeDatabase();
}
}).start();
}
我这样写DatabaseManager.initializeInstance(getApplicationContext());里面的getApplicationContext()是有浪线的
新建了一个DatabaseManager的类 和他写的是一样的 请问有什么问题呀
getApplicationContext()是有浪线的 ?什么意思