Mvc 提交长字符串出现“从客户端(QuestionContent="<p>...")中检测到有潜在危险的 Request.QueryString 值。”...

本文介绍了一种简单的方法来禁用ASP.NET MVC中的输入验证,通过在后台表单接收处添加特性[ValidateInput(false)],可以有效地解决因输入验证导致的问题。

解决方法很简单,就是在后台表单接收处加上 [ValidateInput(false)]

look like this :

[ValidateInput(false)]
/// <summary>
/// 新增题库
/// </summary>
/// <param name="qu"></param>
/// <returns></returns>
public ActionResult AddQues(Question qu)
{
}

转载于:https://www.cnblogs.com/wangpengchengwc/p/4625957.html

select qqr.session_id, qqr.user_id,qqr.user_question,qdd.dict_value as 'feedType', qqr.user_question as 'questionContent', qac.category_name as 'answerCategory', qd.dimension_name as 'channel', qde.dimension_name as 'brand',qqr.feedback_suggestion as 'suggestion',qqr.generative_identify, qqr.feedback_quality as 'quality', qqr.answer_time as 'sessionDate' ,qqr.answer_content,qqr.referenced_articles from qam_qa_records qqr left join qam_question qq on qq.question_content=qqr.user_question left join qam_answer_category qac on qac.id=qq.category_id left join qam_dimension qd on qd.dimension_code=qqr.channel_code and qd.dimension_type='channel' left join qam_dimension qde on qde.dimension_code=qqr.entry_code and qde.dimension_type='brand' left join qam_data_dictionary qdd on qdd.dict_code=qqr.user_feedback AND qdd.dict_type = 'feedback_type' left join qam_data_dictionary qdda on qdda.dict_code=qqr.answer_type AND qdda.dict_type = 'answer_type' where 1=1 and qqr.ask_time BETWEEN #{data.startDate} and #{data.endDate} <if test="data.userId!=null and data.userId!=''"> and qqr.user_id=#{data.userId} </if> <if test="data.sessionId!=null and data.sessionId!=''"> and qqr.session_id = #{data.sessionId} </if> <if test="data.userQuestion!=null and data.userQuestion!=''"> and qqr.user_question like concat('%',#{data.userQuestion},'%') </if> <if test="data.questionContent!=null and data.questionContent!=''"> and qq.question_content like concat('%',#{data.questionContent},'%') </if> <if test="data.answerContent!=null and data.answerContent!=''"> and qqr.answer_content like concat('%',#{data.answerContent},'%') </if> <if test="data.answerCategory!=null and data.answerCategory!=''"> and qac.id =#{data.answerCategory} or qac.parent_id =#{data.answerCategory} </if> 在这个sql语句中,and qac.id =#{data.answerCategory} or qac.parent_id =#{data.answerCategory}条件中,qac表可能存在多级,所以qac.parent_id = #{data.answerCategory}是不对的,帮我修改一下这个条件
最新发布
09-14
项目要求:1.三类角色,分别为提问者(学生)、回答者(教师)、潜水者(游客),子类(学生Student、教师Teacher)、父类(Person); 2.根据不同角色增加接口,每个角色一个(教师:回答接口Answerer, 学生:提问接口Questioner, 游客:公共接口Common); 3.任何人可以点“赞”,可以评论(公共接口Common); 4.教师类可以为回答打分(接口Answerer)、提问者可以为回答打分(接口Questioner); 5.必须用数据库(如SQLite)存储信息;//目前用户信息表已完成,问题及其相关信息(包括问题内容,提问者;该问题对应的回答(最多3个)及其回答者、点赞数等)待完善 6.重点代码注释; 请你帮我完善代码,在main页面显示问题列表 package com.example.iask0; import android.content.Intent; import android.view.View; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import com.example.iask0.databinding.ActivityMainBinding; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.ListView; import android.widget.Toast; import java.util.List; import db.DatabaseManager; import db.Question; import db.QuestionAdapter; public class MainActivity extends AppCompatActivity { public TextView identityTextView; public EditText searchEditText; public Button searchButton; private Button askButton; private Button mineButton; private DatabaseManager dbManager; public ListView questionListView; // 问题列表视图 public List<Question> questionList; // 问题数据列表 private QuestionAdapter adapter; // 问题列表适配器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); identityTextView = findViewById(R.id.identityTextView); searchEditText = findViewById(R.id.searchEditText); searchButton = findViewById(R.id.searchButton); askButton = findViewById(R.id.askButton); mineButton=findViewById(R.id.mineButton); questionListView=findViewById(R.id.questionListView); //questionListView=findViewById(R.layout.item_question); dbManager = new DatabaseManager(this); dbManager.open(); //获取传递的信息 Intent intent = getIntent(); String username = intent.getStringExtra("username"); String identity= getCurrentIdentity(); identityTextView.setText("身份:" + identity);// 设置用户身份 // 搜索按钮点击事件 searchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String query = searchEditText.getText().toString(); if (!query.isEmpty()) { // 执行搜索操作 Toast.makeText(MainActivity.this, "搜索: " + query, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "请输入搜索内容", Toast.LENGTH_SHORT).show(); } } }); // 提问按钮点击事件(仅学生可按) askButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 执行提问操作 String question = searchEditText.getText().toString(); if(dbManager.insertQuestion(question, username)!=-1) { Toast.makeText(MainActivity.this, "问题提交成功", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(MainActivity.this, QuestionDetailActivity.class); intent.putExtra("username_asker", username); intent.putExtra("username", username); intent.putExtra("identity", getCurrentIdentity()); intent.putExtra("question_content", question); startActivity(intent); finish(); } else{ Toast.makeText(MainActivity.this, "故障!问题提交失败", Toast.LENGTH_SHORT).show(); } } }); //“我的”按钮 mineButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, MyActivity.class); intent.putExtra("username", username); intent.putExtra("identity", getCurrentIdentity()); startActivity(intent); } }); toggleAskButtonVisibility();// 根据当前用户身份显示或隐藏提问按钮 loadQuestionsList(); //加载问题列表 } private String getCurrentIdentity() { // 从Intent获取登录信息 Intent intent = getIntent(); String identity = intent.getStringExtra("identity"); // 设置身份 if (identity == null) { identity = "游客"; } return identity; } private void toggleAskButtonVisibility() { String identity = getCurrentIdentity(); if ("学生".equals(identity)) { askButton.setVisibility(View.VISIBLE); } else { askButton.setVisibility(View.GONE); } } private void loadQuestionsList() { questionList = dbManager.getAllQuestions();// 从数据库获取所有问题 // 创建并设置适配器 adapter = new QuestionAdapter(this, questionList); questionListView.setAdapter(adapter); } } <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 顶部区域 --> <LinearLayout android:id="@+id/topBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="#5F8772" android:padding="16dp"> <!-- 标题 --> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginLeft="64dp" android:gravity="center" android:text="iask 主页" android:textColor="#FFFFFF" android:textSize="25sp"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center"> <!-- 用户身份 --> <TextView android:id="@+id/identityTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="身份:游客" android:textColor="#FFFFFF"/> <!--个人界面跳转按钮--> <Button android:id="@+id/mineButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我的" android:background="#303030"/> </LinearLayout> </LinearLayout> <!-- 搜索区域 --> <LinearLayout android:id="@+id/searchBar" android:layout_below="@id/topBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="8dp"> <!-- 输入框 --> <EditText android:id="@+id/searchEditText" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="输入搜索内容" android:padding="28dp" android:background="#FFFFFF"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <!-- 搜索按钮 --> <Button android:id="@+id/searchButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="搜索" android:background="#303030"/> <!-- 提问按钮(仅学生可按) --> <Button android:id="@+id/askButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提问" android:background="#000000" android:visibility="gone"/> <!-- 默认不显示 --> </LinearLayout> </LinearLayout> <!-- 问题区域 --> <LinearLayout android:id="@+id/questionBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/searchBar" android:orientation="vertical"> <!-- 选项卡 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/questionsListHeading"> <TextView android:id="@+id/tabQuestions" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="问题(时间倒序)" android:gravity="center" android:padding="8dp" android:background="#FAFAFA"/> <TextView android:id="@+id/tabAnswers" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:text="回答数" android:gravity="center" android:padding="8dp" android:background="#FAFAFA"/> </LinearLayout> <!-- 问题列表项 --> <ListView android:id="@+id/questionListView" android:layout_below="@+id/questionsListHeading" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> <!-- <LinearLayout android:id="@+id/bottomBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/questionBar"> <Button android:id="@+id/homeButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我的" android:background="#303030"/> </LinearLayout>--> </RelativeLayout> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 问题内容 --> <TextView android:id="@+id/questionContent" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp" android:textColor="#333333" android:maxLines="2" android:ellipsize="end"/> <!-- 问题元信息(问题和回答数) --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="5dp"> <TextView android:id="@+id/questionTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="#666666"/> <TextView android:id="@+id/answerCount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="#666666" android:layout_marginStart="15dp"/> </LinearLayout> </RelativeLayout> package com.example.iask0; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import db.DatabaseManager; public class QuestionDetailActivity extends AppCompatActivity { private TextView identityTextView; public TextView questionTextView; public TextView askerView; private EditText answerEditText; private Button submitAnswerButton; private ListView answerListView; private DatabaseManager dbManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_question_detail); identityTextView = findViewById(R.id.identityTextView); questionTextView =findViewById(R.id.questionText); askerView = findViewById(R.id.asker); answerEditText = findViewById(R.id.answerEditText); submitAnswerButton = findViewById(R.id.submitAnswerButton); answerListView = findViewById(R.id.answerListView); Button backButton = findViewById(R.id.backButton); Intent intent = getIntent(); String username = intent.getStringExtra("username"); String askername = intent.getStringExtra("username_asker"); String identity = intent.getStringExtra("identity"); String question = intent.getStringExtra("question_content"); // 设置身份和用户名 if (username != null && identity != null) { setIdentity(identity); } else { setIdentity("游客"); } questionTextView.setText("问题内容\n" + question); askerView.setText("提问者:"+ askername); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(QuestionDetailActivity.this, MainActivity.class); intent.putExtra("username", username); intent.putExtra("identity", identity); startActivity(intent); finish(); } }); submitAnswerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String answer = answerEditText.getText().toString(); // 提交回答逻辑 EditText answerContentEditText = findViewById(R.id.answerEditText); String answerContent = answerContentEditText.getText().toString(); String responder = username; long questionId = 1; // 示例问题ID,实际应用中应动态获取 long answerId = dbManager.insertAnswer(answerContent, responder, questionId); if (answerId != -1) { Toast.makeText(QuestionDetailActivity.this, "回答提交成功", Toast.LENGTH_SHORT).show(); } } }); } //界面显示 根据身份 private void setIdentity(String identity) { identityTextView.setText("身份:" + identity); identityTextView.setVisibility(View.VISIBLE); if ("教师".equals(identity)) { answerEditText.setVisibility(View.VISIBLE); submitAnswerButton.setVisibility(View.VISIBLE); } else { answerEditText.setVisibility(View.GONE); submitAnswerButton.setVisibility(View.GONE); } } } package db; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.icu.text.SimpleDateFormat; import android.util.Log; import java.text.ParseException; import java.util.*; public class DatabaseManager extends SQLiteOpenHelper{ private SQLiteDatabase database; private static final String DATABASE_NAME = "iAsk.db"; private static final int DATABASE_VERSION = 1; // 数据库版本 //user表 public static final String TABLE_NAME = "userss";// 表名 // 列名 public static final String COLUMN_ID = "id"; public static final String COLUMN_NAME = "username"; public static final String COLUMN_PASSWORD = "password"; public static final String COLUMN_IDENTIFY = "identity"; //问题和回答表 public static final String QUESTIONS_TABLE_NAME = "questions"; public static final String ANSWERS_TABLE_NAME = "answers"; public static final String QUESTION_ID = "question_id"; public static final String QUESTION_CONTENT = "question_content"; public static final String QUESTION_ASKER = "question_asker"; public static final String QUESTION_TIMESTAMP = "question_timestamp"; public static final String ANSWER_ID = "answer_id"; public static final String ANSWER_CONTENT = "answer_content"; public static final String ANSWER_RESPONDER = "answer_responder"; public static final String ANSWER_TIMESTAMP = "answer_timestamp"; public static final String ANSWER_LIKES = "answer_likes"; public static final String ANSWER_QUESTION_ID = "answer_question_id"; public DatabaseManager(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); Log.d("DB_DEBUG", "===== 进入 DB ====="); this.getWritableDatabase(); } // 创建表的SQL语句 private static final String TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT NOT NULL, " + COLUMN_PASSWORD + " TEXT NOT NULL, "+ COLUMN_IDENTIFY + " TEXT NOT NULL);";//用户表 private static final String CREATE_QUESTIONS_TABLE = "CREATE TABLE IF NOT EXISTS " + QUESTIONS_TABLE_NAME + " (" + QUESTION_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + QUESTION_CONTENT + " TEXT NOT NULL, " + QUESTION_ASKER + " TEXT NOT NULL, " + QUESTION_TIMESTAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP" + ");";//问题表 private static final String CREATE_ANSWERS_TABLE = "CREATE TABLE IF NOT EXISTS " + ANSWERS_TABLE_NAME + " (" + ANSWER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + ANSWER_CONTENT + " TEXT NOT NULL, " + ANSWER_RESPONDER + " TEXT NOT NULL, " + ANSWER_TIMESTAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + ANSWER_LIKES + " INTEGER DEFAULT 0, " + ANSWER_QUESTION_ID + " INTEGER NOT NULL, " + "teacher_score REAL DEFAULT 0, " + // 教师评分 "student_score REAL DEFAULT 0, " + // 学生评分 "FOREIGN KEY (" + ANSWER_QUESTION_ID + ") REFERENCES " + QUESTIONS_TABLE_NAME + "(" + QUESTION_ID + ")" + ");";//回答表 @Override public void onCreate(SQLiteDatabase db) { Log.d("DB_DEBUG", " ====== 创 建 表 ====== "); // 创建表 db.execSQL(TABLE_CREATE); db.execSQL(CREATE_QUESTIONS_TABLE); db.execSQL(CREATE_ANSWERS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//数据库版本更新 // 删除旧表,创建新表(但会丢失数据) db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + QUESTIONS_TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + ANSWERS_TABLE_NAME); onCreate(db); } // 打开数据库 public void open() { database=this.getWritableDatabase(); } // 检查用户名是否存在(查找数据-user) public boolean checkUsernameExists(String username) { SQLiteDatabase database = this.getReadableDatabase(); Cursor cursor = database.query(TABLE_NAME, new String[]{COLUMN_NAME}, COLUMN_NAME + "=?", new String[]{username}, null, null, null); boolean exists = cursor.getCount() > 0; cursor.close(); return exists; } // 注册(插入数据-user) public boolean insertUser(String username, String password, String identity) { SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(COLUMN_NAME, username); values.put(COLUMN_PASSWORD, password); values.put(COLUMN_IDENTIFY, identity); long result = database.insert(TABLE_NAME, null, values); return result != -1; } //登录(查找数据-user) public boolean checkPassword(String username, String password) { SQLiteDatabase readableDatabase = this.getReadableDatabase(); Cursor cursor = readableDatabase.query(//在TABLE_NAME表查询 用户名为 username 的密码 TABLE_NAME, new String[]{COLUMN_PASSWORD}, COLUMN_NAME + " = ?", new String[]{username}, null, null, null ); boolean isPasswordCorrect = false; if (cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndex(COLUMN_PASSWORD); // 获取密码列的索引 if (columnIndex != -1) { String storedPassword = cursor.getString(columnIndex); // 获取存储的密码 isPasswordCorrect = storedPassword.equals(password); //判断密码是否正确 } else { Log.e("DB_DEBUG", "COLUMN_PASSWORD column not found in the table."); } } cursor.close(); return isPasswordCorrect; } //获取身份(查找数据-user) public String getIdentity(String username) { SQLiteDatabase readableDatabase = this.getReadableDatabase(); Cursor cursor = readableDatabase.query( TABLE_NAME, new String[]{COLUMN_IDENTIFY}, COLUMN_NAME + " = ?", new String[]{username}, null, null, null ); String identity = ""; if (cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndex(COLUMN_IDENTIFY); if (columnIndex != -1) { identity = cursor.getString(columnIndex); } } cursor.close(); return identity; } //插入数据(提问和回答-question&answer) public long insertQuestion(String content, String asker) { database= this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(QUESTION_CONTENT, content); values.put(QUESTION_ASKER, asker); return database.insert(QUESTIONS_TABLE_NAME, null, values); } public long insertAnswer(String content, String responder, long questionId) { database= this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(ANSWER_CONTENT, content); values.put(ANSWER_RESPONDER, responder); values.put(ANSWER_QUESTION_ID, questionId); return database.insert(ANSWERS_TABLE_NAME, null, values); } //查找所有问题 public List<Question> getAllQuestions() { List<Question> questions = new ArrayList<>(); database = this.getReadableDatabase(); // 查询问题并按时间倒序排列 String query = "SELECT q.*, COUNT(a.answer_id) as answer_count " + "FROM " + QUESTIONS_TABLE_NAME + " q " + "LEFT JOIN " + ANSWERS_TABLE_NAME + " a ON q.question_id = a.answer_question_id " + "GROUP BY q.question_id " + "ORDER BY q.question_timestamp DESC"; Cursor cursor = database.rawQuery(query, null); if (cursor.moveToFirst()) { do { int id = cursor.getInt(cursor.getColumnIndexOrThrow(QUESTION_ID)); String content = cursor.getString(cursor.getColumnIndexOrThrow(QUESTION_CONTENT)); String asker = cursor.getString(cursor.getColumnIndexOrThrow(QUESTION_ASKER)); String timestampStr = cursor.getString(cursor.getColumnIndexOrThrow(QUESTION_TIMESTAMP)); int answerCount = cursor.getInt(cursor.getColumnIndexOrThrow("answer_count")); // 转换时间戳字符串为Date对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); Date timestamp = null; try { timestamp = sdf.parse(timestampStr); } catch (ParseException e) { throw new RuntimeException(e); } questions.add(new Question(id, content, asker, timestamp, answerCount)); } while (cursor.moveToNext()); } cursor.close(); return questions; } //查找问题id public ContentValues getQuestionById(long questionId) { SQLiteDatabase readableDatabase = this.getReadableDatabase(); Cursor cursor = readableDatabase.query( QUESTIONS_TABLE_NAME, new String[]{QUESTION_ID, QUESTION_CONTENT, QUESTION_ASKER, QUESTION_TIMESTAMP}, QUESTION_ID + " = ?", new String[]{String.valueOf(questionId)}, null, null, null ); ContentValues question = null; if (cursor.moveToFirst()) { long id = cursor.getLong(cursor.getColumnIndexOrThrow(QUESTION_ID)); int idIndex = cursor.getColumnIndex(QUESTION_ID); int contentIndex = cursor.getColumnIndex(QUESTION_CONTENT); int askerIndex = cursor.getColumnIndex(QUESTION_ASKER); int timestampIndex = cursor.getColumnIndex(QUESTION_TIMESTAMP); int answerCount = getAnswerCount(id); if (idIndex != -1 && contentIndex != -1 && askerIndex != -1 && timestampIndex != -1) { question = new ContentValues(); question.put(QUESTION_ID, cursor.getLong(idIndex)); question.put(QUESTION_CONTENT, cursor.getString(contentIndex)); question.put(QUESTION_ASKER, cursor.getString(askerIndex)); question.put(QUESTION_TIMESTAMP, cursor.getString(timestampIndex)); } else { Log.e("DB_DEBUG", "Missing columns in questions table."); } } cursor.close(); return question; } //搜索问题 根据关键词 public List<Question> searchQuestions(String keyword) { List<Question> questionList = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(QUESTIONS_TABLE_NAME, null, QUESTION_CONTENT + " LIKE ?", new String[]{"%" + keyword + "%"}, null, null, QUESTION_TIMESTAMP + " DESC"); if (cursor != null && cursor.moveToFirst()) { do { long id = cursor.getLong(cursor.getColumnIndexOrThrow(QUESTION_ID)); String content = cursor.getString(cursor.getColumnIndexOrThrow(QUESTION_CONTENT)); String asker = cursor.getString(cursor.getColumnIndexOrThrow(QUESTION_ASKER)); String timestampStr = cursor.getString(cursor.getColumnIndexOrThrow(QUESTION_TIMESTAMP)); int answerCount = getAnswerCount(id); // 转换时间戳字符串为Date对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); Date timestamp = null; try { timestamp = sdf.parse(timestampStr); } catch (ParseException e) { throw new RuntimeException(e); } questionList.add(new Question(id, content, asker, timestamp, answerCount)); } while (cursor.moveToNext()); } if (cursor != null) { cursor.close(); } return questionList; } public int getAnswerCount(long questionId) { database= this.getReadableDatabase(); Cursor cursor = database.query(ANSWERS_TABLE_NAME, null, ANSWER_QUESTION_ID + " = ?", new String[]{String.valueOf(questionId)}, null, null, null); int count = cursor.getCount(); cursor.close(); return count; } //查找与更新数据(点赞-answer) public void updateAnswerLikes(long answerId, int likes) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(ANSWER_LIKES, likes); db.update(ANSWERS_TABLE_NAME, values, ANSWER_ID + " = ?", new String[]{String.valueOf(answerId)}); } //评分 public boolean updateTeacherScore(long answerId, float score) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("teacher_score", score); return db.update(ANSWERS_TABLE_NAME, values, ANSWER_ID + " = ?", new String[]{String.valueOf(answerId)}) > 0; } // 更新数据 public int updateItem(long id, String username, String identify) { ContentValues values = new ContentValues(); values.put(COLUMN_NAME, username); values.put(COLUMN_IDENTIFY, identify); return database.update( TABLE_NAME, values, COLUMN_ID + " = ?", new String[]{String.valueOf(id)} ); } } --- package db; public interface Common { void comment();//评论 void like();//点赞 } --- package db; public interface Questioner { void ask();//提问 void score();//评分 } --- package db; public class Person implements Common{ private long id; private String username; private String password; private String identify; public Person(long id, String username, String password, String identify) { this.id = id; this.username = username; this.password = password; this.identify=identify; }} -- package db; public class Student extends Person implements Questioner{ public Student(long id, String username, String password, String identify,String question) { super(id, username, password, identify); } @Override public void like(){//点赞 } @Override public void comment(){//评论 } @Override public void ask() {//提问 } @Override public void score() {//评分 } } -- package db; import java.util.Date; public class Question { private long id; private String content; private String asker; private Date timestamp; private int answerCount; public Question(long id, String content, String asker, Date timestamp, int answerCount) { this.id = id; this.content = content; this.asker = asker; this.timestamp = timestamp; this.answerCount = answerCount; } // Getters and Setters public long getId() { return id; } public String getContent() { return content; } public String getAsker() { return asker; } public Date getTimestamp() { return timestamp; } public int getAnswerCount() { return answerCount; } } 已完成部分,用于参考: package com.example.iask0; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import db.*; public class RegisterActivity extends AppCompatActivity { private EditText usernameEditText; private EditText passwordEditText; private EditText confirmPasswordEditText; private TextView usernameTakenTextView; private TextView passwordMismatchTextView; private RadioButton teacherRadioButton; private RadioButton studentRadioButton; private Button registerButton; private Button backloginButton; private DatabaseManager dbManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); usernameEditText = findViewById(R.id.usernameEditText); passwordEditText = findViewById(R.id.passwordEditText); confirmPasswordEditText = findViewById(R.id.confirmPasswordEditText); usernameTakenTextView = findViewById(R.id.usernameTakenTextView); passwordMismatchTextView = findViewById(R.id.passwordMismatchTextView); RadioGroup identityRadioGroup = findViewById(R.id.identityRadioGroup); teacherRadioButton = findViewById(R.id.teacherRadioButton); studentRadioButton = findViewById(R.id.studentRadioButton); registerButton = findViewById(R.id.registerButton); backloginButton=findViewById(R.id.backLoginButton); dbManager = new DatabaseManager(this); dbManager.open(); registerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { attemptRegistration();} }); backloginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 返回登录界面 Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); startActivity(intent); finish(); } }); } private void attemptRegistration() { String username = usernameEditText.getText().toString(); String password = passwordEditText.getText().toString(); String confirmPassword = confirmPasswordEditText.getText().toString(); //int selectedId = identityRadioGroup.getCheckedRadioButtonId(); if (username.isEmpty()) {//用户名为空提示 Toast.makeText(RegisterActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show(); return; } if (password.isEmpty() || confirmPassword.isEmpty()) {//密码为空提示 Toast.makeText(RegisterActivity.this, "请输入密码", Toast.LENGTH_SHORT).show(); return; } if (!password.equals(confirmPassword)) {//确认密码与密码不同提示 passwordMismatchTextView.setVisibility(View.VISIBLE); return; } else { passwordMismatchTextView.setVisibility(View.GONE); } // 获取选中的身份 //String tableName; String identity; if (teacherRadioButton.isChecked()) { identity = "教师"; //tableName = "tch"; } else if (studentRadioButton.isChecked()) { identity = "学生"; //tableName = "stu"; } else { Toast.makeText(RegisterActivity.this, "请选择身份", Toast.LENGTH_SHORT).show(); return; } // 检查用户名是否被占用,注册 if (dbManager.checkUsernameExists(username)) { usernameTakenTextView.setVisibility(View.VISIBLE); } else { usernameTakenTextView.setVisibility(View.GONE); if (dbManager.insertUser(username, password, identity)) { Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(RegisterActivity.this, "注册失败", Toast.LENGTH_SHORT).show(); } } } @Override protected void onDestroy() { super.onDestroy(); dbManager.close(); } }
06-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值