Java 如何在sql中向一列中添加多个值?

Java 如何在sql中向一列中添加多个值?,java,android,sqlite,listview,android-custom-view,Java,Android,Sqlite,Listview,Android Custom View,我正在创建一个应用程序,您可以在其中注册一个人,然后将其添加到列表中,接下来您可以查看此列表中的所有信息名称、姓氏、时间和日期。但是我不知道怎么做?首先,我要解决一个sqlite异常问题,即我不能将4个值设置为一列。其次,我不知道如何创建自定义列表视图,在其中我可以在一列中设置名称为Item,姓氏为subItem package com.example.pass; import android.app.Activity; import android.content.Context;

我正在创建一个应用程序,您可以在其中注册一个人,然后将其添加到列表中,接下来您可以查看此列表中的所有信息名称、姓氏、时间和日期。但是我不知道怎么做?首先,我要解决一个sqlite异常问题,即我不能将4个值设置为一列。其次,我不知道如何创建自定义列表视图,在其中我可以在一列中设置名称为Item,姓氏为subItem

   package com.example.pass;

 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemLongClickListener;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.ListView;
 import android.widget.Toast;

 public class Detail extends Activity {

    Button b, clr;
    ListView lv;
    String query;
    Cursor c;
    String uns[] = { "", "", "", "", "", "", "","","",""};
    int i = 0;
    int t = 0;
    SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.detail);
            b = (Button) findViewById(R.id.btn);
            clr = (Button) findViewById(R.id.clear);
            lv = (ListView) findViewById(R.id.listView1);

            // Declaring arrayadapter to store the items and return them as a view
            final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_expandable_list_item_1, uns);

            db = openOrCreateDatabase("todo", Context.MODE_WORLD_READABLE, null);

            //READING THE DATA FROM THE TABLE TODOLIST AND SETTING IN AN      ARRAYADAPTER...HERE C IS A CURSOR...
            //WHICH POINTS TO A ROW..AND MOVE TO THE NEXT ROW....
            c = db.rawQuery("SELECT * FROM TODOLIST; ", null);
            i = 0;
            while (c.moveToNext()) {

                    uns[i] = c.getString(0);
                    i++;
            }
            t = i;

            lv.setAdapter(adapter);

            // clear all the data from table..
            clr.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            // TODO Auto-generated method stub

                            db = openOrCreateDatabase("todo",     Context.MODE_WORLD_WRITEABLE,
                                            null);

                            //QUERY TO DELETE ALL THE DATA FROM TABLE
                            db.delete("TODOLIST", null, null);

                            db.close();

                            for (int j = 0; j < t; j++) {
                                    uns[j] = "";
                                    lv.setAdapter(adapter);
                            }

                    }
            });

            //GOING BACK TO MAIN ACTIVITY
            b.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            // TODO Auto-generated method stub
                            startActivity(new     Intent(getApplicationContext(),
                                            MainActivity.class));
                    }
            });


    }

 }
这是我的权限类,我在其中处理所有编辑文本字段,并按“确定”按钮将所有字符串添加到列表中

  package com.example.pass;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;




public class Permission extends ActionBarActivity{
 EditText Date;
 EditText Time;
 EditText userName;
 EditText userSurname;

 EditText Name;
 String Surname;

 //INITIALIZING THE VARIABLES...
 Button b1,b2;
 EditText e1;
 String text,u,text2,text3,text4;
 String un[]={"","","","","","","","","","","","","","",""};
 String pas;
 Cursor c;
 int i=0;
 String s,sqlquery;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_permission);

    Button add = (Button) findViewById(R.id.add);
    Button cancel = (Button) findViewById(R.id.cancel);


    // Create custom dialog object          
    // set values for custom dialog components - text, image and button
    userName = (EditText) findViewById(R.id.dialog_username);
    userSurname = (EditText)findViewById(R.id.dialog_usersurname);
    Time = (EditText)findViewById(R.id.dialog_time2);
    Date = (EditText)findViewById(R.id.dialog_date2);   


           Date.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    //To show current date in the datepicker
                    Calendar mcurrentDate=Calendar.getInstance();
                    int mYear = mcurrentDate.get(Calendar.YEAR);
                    int mMonth = mcurrentDate.get(Calendar.MONTH);
                    int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);

                    DatePickerDialog mDatePicker=new DatePickerDialog(Permission.this, new OnDateSetListener() {                  
                        public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
                            // TODO Auto-generated method stub                      
                            /*      Your code   to get date and time    */
                            Date.setText(selectedyear+"-"+(selectedmonth+1)+"-"+selectedday);
                        }
                    },mYear, mMonth, mDay);
                    mDatePicker.setTitle("Select date");                
                    mDatePicker.show();  }
            });


           Time.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                   // TODO Auto-generated method stub
                   //To show current date in the datepicker

                   Calendar mcurrentTime=Calendar.getInstance();
                   int mHour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
                   int mMinute = mcurrentTime.get(Calendar.MINUTE);


                   TimePickerDialog mTimePicker=new TimePickerDialog(Permission.this, new OnTimeSetListener() {                  
                       public void onTimeSet(TimePicker timepicker, int selectedhour, int selectedminute ) {
                           // TODO Auto-generated method stub                      
                           /*      Your code   to get date and time    */
                          if (selectedminute<10){
                              Time.setText(selectedhour+":"+"0"+(selectedminute)+""+"val");
                          }
                          else
                        Time.setText(selectedhour+":"+(selectedminute));
                       }
                   },mHour, mMinute, false);
                   mTimePicker.setTitle("Select date");                
                   mTimePicker.show();  }
           });


          cancel.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                   // TODO Auto-generated method stub
                   //To show current date in the datepicker
                    startActivity(new Intent(Permission.this, Choose.class));
                  Permission.this.finish();
               }     
           });

          add.setOnClickListener(new OnClickListener() {
              @Override
              public void onClick(View arg0) {
                  // TODO Auto-generated method stub
                  text=userName.getText().toString();
                  text2=userSurname.getText().toString();
                  text3=Date.getText().toString();
                  text4=Time.getText().toString();
                  //CREATING A DATABASE OBJECT..HERE db is SQLITEDATABASE OBJECT AND
                  // todo is our database name AND
                  //WE ARE USING IT IN WRITE MODE
                  SQLiteDatabase db=openOrCreateDatabase("todo", Context.MODE_WORLD_WRITEABLE, null);

                  text="'"+text+"'";
                  text2="'"+text2+"'";
                  text3="'"+text3+"'";
                  text4="'"+text4+"'";

          //SQL QUERY TO CREATE TABLE
          s="CREATE TABLE if not exists TODOLIST"+" ("+ "list" +" VARCHAR(100)"+");";
                  db.execSQL(s);

                  // QUERY TO INSERT THE DATA INTO TABLE
                  sqlquery="INSERT INTO TODOLIST"+ " VALUES"+"("+text+","+text2+","+text3+","+text4+");";
                  db.execSQL(sqlquery);
                  userName.setText("");

                  Toast.makeText(getApplicationContext(), "TASK ADDED IN LIST", Toast.LENGTH_SHORT).show();
              }     
          });

        }


    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.permission, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}









  }
package com.example.pass;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
导入android.app.Activity;
导入android.app.DatePickerDialog;
导入android.app.DatePickerDialog.OnDateSetListener;
导入android.app.Dialog;
导入android.app.TimePickerDialog;
导入android.app.TimePickerDialog.OnTimeSetListener;
导入android.content.Context;
导入android.content.Intent;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.text.format.DateFormat;
导入android.util.Log;
导入android.view.KeyEvent;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.view.OnKeyListener;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemLongClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.CursorAdapter;
导入android.widget.DatePicker;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.TimePicker;
导入android.widget.Toast;
公共类权限扩展了ActionBarActivity{
编辑文本日期;
编辑文本时间;
编辑文本用户名;
编辑文本用户名;
编辑文本名称;
串姓;
//正在初始化变量。。。
按钮b1、b2;
编辑文本e1;
字符串文本,u,text2,text3,text4;
字符串un[]={“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”};
字符串pas;
光标c;
int i=0;
字符串s,sqlquery;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u权限);
按钮添加=(按钮)findViewById(R.id.add);
按钮取消=(按钮)findViewById(R.id.cancel);
//创建自定义对话框对象
//设置自定义对话框组件的值-文本、图像和按钮
用户名=(EditText)findViewById(R.id.dialog\u用户名);
username=(EditText)findViewById(R.id.dialog\u username);
时间=(EditText)findViewById(R.id.dialog\u time2);
日期=(EditText)findViewById(R.id.dialog\u date2);
Date.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
//在日期选择器中显示当前日期的步骤
Calendar mcurrentDate=Calendar.getInstance();
int mYear=mcurrentDate.get(日历年);
int mMonth=mcurrentDate.get(日历月);
int mDay=mcurrentDate.get(日历.日期/月份);
DatePickerDialog mDatePicker=new DatePickerDialog(Permission.this,new OnDateSetListener(){
public void onDateSet(日期选择器日期选择器,int selectedyear,int selectedmonth,int selectedday){
//TODO自动生成的方法存根
/*获取日期和时间的代码*/
Date.setText(selectedyear+“-”+(selectedmonth+1)+“-”+selectedday);
}
},mYear,Ammonth,mDay);
mDatePicker.setTitle(“选择日期”);
mDatePicker.show();}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
//在日期选择器中显示当前日期的步骤
Calendar mcurrentTime=Calendar.getInstance();
int mHour=mcurrentTime.get(日历小时);
int mMinute=mcurrentTime.get(Calendar.MINUTE);
TimePickerDialog mTimePicker=新的TimePickerDialog(Permission.this,new-OnTimeSetListener(){
public void onTimeSet(计时器选择器计时器选择器,int-selectedhour,int-selectedminute){
//TODO自动生成的方法存根
/*获取日期和时间的代码*/

如果(selectedminute首先,对于SQLite,您需要为您的用户创建一个表,那么您需要按您想要放置的元素设置1个coulmn(1表示姓氏,1表示名称,…),除非您在其中放置类似于包含您的用户的JSONObject的内容

例如:

此类是表及其字段的定义

public final class SQLiteContract{

// this shouldn't be instantiate
public SQLiteContract(){}

public static abstract class UserContract implements BaseColumns {

    /*                              TableName                           */

    public static final String TABLE_NAME = "USER";

    /*                              Fields                             */

    public static final String COLUMN_NAME_NAME = "Name";
    public static final String COLUMN_NAME_SURNAME = "Surname";
    public static final String COLUMN_NAME_TIME = "Time";
    public static final String COLUMN_NAME_DATE = "Date";
}
对于sqlite中的4个字段,您应该使用第一个字段。如果您希望只使用一个字段,则需要更改该部分

    public static final String COLUMN_NAME_NAME = "Name";
    public static final String COLUMN_NAME_SURNAME = "Surname";
    public static final String COLUMN_NAME_TIME = "Time";
    public static final String COLUMN_NAME_DATE = "Date";
进入

那么您的SQLite在第一个版本中应该是这样的

private void dbCreateUser(SQLiteDatabase db)
{
    SQL_CREATE_USER = "CREATE TABLE " + UserContract.TABLE_NAME + " (";
    SQL_CREATE_USER += UserContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,";


    SQL_CREATE_USER += UserContract.COLUMN_NAME_NAME + TEXT_TYPE + COMMA_SEP;
    SQL_CREATE_USER += UserContract.COLUMN_NAME_SURNAME + TEXT_TYPE + COMMA_SEP;
    SQL_CREATE_USER += UserContract.COLUMN_NAME_TIME + TEXT_TYPE + COMMA_SEP;
    SQL_CREATE_USER += UserContract.COLUMN_NAME_DATE_TOUR + TEXT_TYPE;
    SQL_CREATE_USER += " )";
}
对于第二个,我只喜欢

private void dbCreateUser(SQLiteDatabase db)
{
    SQL_CREATE_USER = "CREATE TABLE " + UserContract.TABLE_NAME + " (";
    SQL_CREATE_USER += UserContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,";
    SQL_CREATE_USER += UserContract. COLUMN_NAME_USER_JSONOBJECT+ TEXT_TYPE;
    SQL_CREATE_USER += " )";
}
请注意,这可能需要一些更新,具体取决于您存储数据的方式(如INT/BLOB/TEXT等)

此外,变量文本类型和逗号类型如下:

private static final String TEXT_TYPE = " TEXT";
private static final String INTEGER_TYPE = " INTEGER";
private static final String COMMA_SEP = ",";
这里有一个链接


然后,对于列表视图,您需要创建一个自定义布局,该布局将显示在列表视图中,也许您应该看看。

也许您可以为用户提供一个SQLite示例?我正在编辑模式下进行此操作,只是提供了第一个快照,允许用户
private void dbCreateUser(SQLiteDatabase db)
{
    SQL_CREATE_USER = "CREATE TABLE " + UserContract.TABLE_NAME + " (";
    SQL_CREATE_USER += UserContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,";


    SQL_CREATE_USER += UserContract.COLUMN_NAME_NAME + TEXT_TYPE + COMMA_SEP;
    SQL_CREATE_USER += UserContract.COLUMN_NAME_SURNAME + TEXT_TYPE + COMMA_SEP;
    SQL_CREATE_USER += UserContract.COLUMN_NAME_TIME + TEXT_TYPE + COMMA_SEP;
    SQL_CREATE_USER += UserContract.COLUMN_NAME_DATE_TOUR + TEXT_TYPE;
    SQL_CREATE_USER += " )";
}
private void dbCreateUser(SQLiteDatabase db)
{
    SQL_CREATE_USER = "CREATE TABLE " + UserContract.TABLE_NAME + " (";
    SQL_CREATE_USER += UserContract._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,";
    SQL_CREATE_USER += UserContract. COLUMN_NAME_USER_JSONOBJECT+ TEXT_TYPE;
    SQL_CREATE_USER += " )";
}
private static final String TEXT_TYPE = " TEXT";
private static final String INTEGER_TYPE = " INTEGER";
private static final String COMMA_SEP = ",";