【问题标题】:Insert command not working in sqlite in android studio 2.3.3在 android studio 2.3.3 的 sqlite 中插入命令不起作用
【发布时间】:2017-10-07 14:29:42
【问题描述】:

大家好,我一直在尝试将一些数据插入到我在 android studio 中创建的表中,代码如下

public class admin_manipulation extends AppCompatActivity {

EditText Train_name;
EditText Train_no;
EditText Train_start;
EditText Train_end;
EditText Train_seats;
Button insert;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin_manipulation);
    insert=(Button)findViewById(R.id.add);
    Train_name=(EditText)findViewById(R.id.trainname);
    Train_no=(EditText)findViewById(R.id.trainno);
    Train_start=(EditText)findViewById(R.id.Startlocation);
    Train_end=(EditText)findViewById(R.id.terminationpoint);
    Train_seats=(EditText)findViewById(R.id.seats);

}
public void addrecords(View view)
{
    String str_Train_name=Train_name.getText().toString();
    String str_Train_no=Train_no.getText().toString();
    String str_Train_start=Train_start.getText().toString();
    String str_Train_end=Train_end.getText().toString();
    String str_Train_seats=Train_seats.getText().toString();

    SQLiteDatabase Trains = openOrCreateDatabase("Train_list",MODE_PRIVATE,null);
    Trains.execSQL("CREATE TABLE IF NOT EXISTS Train_list(Train_name VARCHAR,Train_no VARCHAR,Train_start VARCHAR, Train_end VARCHAR , Seats_Available VARCHAR );");
    Toast.makeText(admin_manipulation.this, "The Add records Function has been called" , Toast.LENGTH_SHORT).show();
    String temp="INSERT INTO Train_list VALUES("+str_Train_name+","+str_Train_no+","+str_Train_start+","+str_Train_end+","+str_Train_seats+");";
    Toast.makeText(admin_manipulation.this,temp, Toast.LENGTH_LONG).show();
    Trains.execSQL(temp);
    }

每当我调用此活动时,我都会收到错误消息

unfortunately db has stopped

(db 是应用程序的名称)

所以我决定注释掉上面写着

的行
Trains.execSQL(temp);

我发现该活动的执行没有任何问题,因此应用程序没有崩溃,所以我决定敬酒插入查询,看看它是否有任何问题。

据我所知,只要我包含它看起来还可以购买

Trains.execSQL(temp);

在我的代码中,应用程序崩溃(temp 包含我刚刚烤过的查询)

任何帮助将不胜感激。

【问题讨论】:

  • 你能在更小的范围内重现问题吗?例如。写几行纯 SQLite/MySQL 语法(顺便说一下是哪一个?为什么你都标记了?),这会导致同样的问题,而不允许额外的编程语言妨碍。

标签: android mysql sqlite


【解决方案1】:

试试这个

   SQLiteDatabase db = openOrCreateDatabase( "Train_list.db", SQLiteDatabase.CREATE_IF_NECESSARY , null);
    try {
        final String CREATE_TABLE_TRAIN_LIST = "CREATE TABLE IF NOT EXISTS Train_list ("
                + "ID INTEGER primary key AUTOINCREMENT,"
                + "Train_name VARCHAR,"
                + "Train_no VARCHAR,"
                + "Train_start VARCHAR,"
                + "Train_end VARCHAR,"
                + "Seats_Available VARCHAR);";
        db.execSQL(CREATE_TABLE_TRAIN_LIST);
        Toast.makeText(admin_manipulation.this, "table created ", Toast.LENGTH_LONG).show();
        String sql =
            "INSERT or replace INTO Train_list (Train_name, Train_no, Train_start, Train_end, Seats_Available) VALUES(" + str_Train_name + ", " + str_Train_no + ", " + str_Train_start ", " + str_Train_end ", " + str_Train_seats + ")" ;       
                db.execSQL(sql);
    }
    catch (Exception e) {
        e.printStackTrace();
}

【讨论】:

  • 谢谢你这对我很陌生,这帮助我理解了很多!
  • 我建议您在开始编码之前查找 SQLite 数据库和查询的语法。很好理解。互联网上有大量资源。
【解决方案2】:

你还没有实现 getWritableDatabase() 方法 + 在你的 sql 查询中你没有使用单个 quotes "INSERT INTO Train_list VALUES("+str_Train_name+","+str_Train_no+","+str_Train_start+","+str_Train_end+","+str_Train_seats+");";

改成

String temp="INSERT INTO Train_list VALUES(" '"+str_Train_name+"'","'"+str_Train_no+"'","'"+str_Train_start+"'","'"+str_Train_end+"'","'"+str_Train_seats+"'");"; 

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 2020-02-22
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多