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