Мне нужно знать, как я могу пройти, и можно ли передать несколько результатов выбора на SQL Server в текстовом представлении.
Пример: у меня есть два элемента в табличных продуктах с одинаковымname, поэтому, если я выполняю выборку с именем этого продукта, он должен вернуть 2 результата.
В табличных продуктах есть 2 элемента, называемых test, поэтому, если я выполню выборку, передав параметр 'test', мой textview в androidСтудия должна вернуть два «тестовых» элемента.
package com.example.projeto;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class EntrarActivity extends AppCompatActivity {
TextView txtRegistrar;
TextView txtEntrar;
EditText edtItem;
Button btnItem;
TextView txtView_produtos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_entrar);
txtView_produtos = findViewById(R.id.txtView_produtos);
edtItem = findViewById(R.id.edtItem);
btnItem = findViewById(R.id.btnItem);
txtEntrar = findViewById(R.id.txtEntrar);
txtRegistrar = findViewById(R.id.txtRegistrar);
btnItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
agregarUsuario();
}
});
txtEntrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent menuTela = new Intent(EntrarActivity.this, TesteActivity.class);
startActivity(menuTela);
finish();
}
});
txtRegistrar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Evento ao clicar no txtRegistrar ir para tela de cadastro
Intent novaTela = new Intent(EntrarActivity.this, RegistrarActivity.class);
startActivity(novaTela);
finish();
}
});
}
public Connection conexionDB() {
Connection conexion=null;
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
conexion = DriverManager.getConnection("jdbc:jtds:sqlserver://"my-ip";databaseName="mydbname";user=sa;password="mypass";");
}catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
return conexion;
}
public void agregarUsuario() {
try {
PreparedStatement pst=conexionDB().prepareStatement("select xname from tb_product where xname= ?");
pst.setString(1,edtItem.getText().toString());
pst.executeQuery();
// int rsCount = 0;
ResultSet rs = pst.executeQuery();
while (rs.next()){
rs.getString("xname");
txtView_produtos.setText(rs.getString("xname"));
}
// do {
// if (results) {
// ResultSet rs = pst.getResultSet();
// rsCount++;
// while (rs.next()){
// txtView_produtos.setText(rs.getString("xname"));
// }
// }
// results = pst.getMoreResults();
// }while (results);
Toast.makeText(getApplicationContext(), "SELECT DONE", Toast.LENGTH_SHORT).show();
}catch (SQLException e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
Я пробовал оба эти способа, но оба способа всегда возвращают 1 элемент в результате.
пример
product
'test'
должен возвращаться вот так
product
'test'
'test'
´´´
public void agregarUsuario () {
try {
PreparedStatement pst=conexionDB().prepareStatement("select xdescricao from tb_produtos where xdescricao LIKE ?");
pst.setString(1,'%' + edtItem.getText().toString() + '%');
ResultSet rs = pst.executeQuery();
List<Map<String, String>> data = null;
data = new ArrayList<Map<String, String>>();
while (rs.next()){
Map<String, String> datanum = new HashMap<String, String>();
datanum.put("A", rs.getString("xdescricao"));
data.add(datanum);
}
String[] from = {"A"};
int [] views = {R.id.txt_titulo};
simpleAD = new SimpleAdapter(this, data,R.layout.modelo, from, views);
listView_item.setAdapter(simpleAD);
Toast.makeText(getApplicationContext(), "SELECT DEU CERTO", Toast.LENGTH_SHORT).show();
}catch (SQLException e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
´´´
это сработало, но у меня все еще есть проблема, когда return с использованием listview и simpleAdapter возвращает мне только 1 результат SELECT LIKE, имеющий более 1 элемента, для возврата в этом SELECT, где при прямом запросе с базой данных возвращает мне 5 элементов